mt6762/mt6765平台i2c驱动能力修改与波形优化
mt6762在连接一些外设时,i2c在低电平会拉不低的情况,最低电平在0.4V左右.这时需要去掉外设的上拉电阻或调整硬件i2c的驱动电流.
修改文件路径:
vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6765/src/drivers/i2c.c
修改函数:
int i2c_hw_init(void)
1 修改上拉电阻
/* Switch internal resistor */
/* 0x0:75k 0x1:5k */
/* 0x2:15k 0x3:1k */
/*I2C0,1*/
I2C_SET_REG32(0x10002a00 + 0x70, 0xFF, 0xFF);
/*I2C2,4*/
I2C_SET_REG32(0x10002800 + 0xA0, 0xFF, 0xFF);
/*I2C6*/
I2C_SET_REG32(0x10002c00 + 0x70, 0xF, 0xF);
/*I2C3,5*/
I2C_SET_REG32(0x10002600 + 0xb0, 0xFF, 0xFF);
2修改驱动电流
/* Just for MT6765/MT6762, config driving set EH2,EH1= 2'b01 */
/* EH: 1, i2c mode;0, GPIO mode */
/* [EH2,EH1]: 2'b00,0.31;2'b01,0.61;2'b10,1.1;2'b11,1.41 单位为mA*/
/* [EH,EH2,EH1] = [bit2,bit1,bit0] */
/*I2C0,1*/
I2C_SET_REG32((0x10002a00 + 0x20), 0x0FFF, 0x0B6D);
/*I2C2,4*/
I2C_SET_REG32((0x10002800 + 0x20), 0x0FFF, 0x0B6D);
/*I2C6*/
I2C_SET_REG32((0x10002c00 + 0x20), 0x3F, 0x2D);
/*I2C3,5*/
I2C_SET_REG32((0x10002600 + 0x20), 0x0FFF, 0x0B6D);
3我们以i2c4为例,修改其内部上拉电阻与驱动电流看波形有哪些影响.
设置i2c4,DWS i2c4配置为Pull&Push En打勾
(1)上拉电阻为1K,2b'11
/*I2C2,4*/
I2C_SET_REG32(0x10002800 + 0xA0, 0xFF, 0xFF);
驱动电流为1.1mA,[EH,EH2,EH1] = 2b'110
/*I2C2,4*/
I2C_SET_REG32((0x10002800 + 0x20), 0x0FFF, 0x0B6D);
对应波形如下
可见i2c第九个clk为读取ACK的电平没有完全拉地低.
(2)上拉电阻为1K,2b'11
/*I2C2,4*/
I2C_SET_REG32(0x10002800 + 0xA0, 0xFF, 0xFF);
驱动电流为1.41mA,[EH,EH2,EH1] = 2b'111
/*I2C2,4*/
I2C_SET_REG32((0x10002800 + 0x20), 0x0FFF, 0x0FFF);
对应波形如下
可见驱动电流增加波形没改善.
(3)上拉电阻为15K,2b'10
/*I2C2,4*/
I2C_SET_REG32(0x10002800 + 0xA0, 0xFF, 0xAA);
驱动电流为1.41mA,[EH,EH2,EH1] = 2b'111
/*I2C2,4*/
I2C_SET_REG32((0x10002800 + 0x20), 0x0FFF, 0x0FFF);
对应波形如下
可见增大上拉电阻,2c第九个clk为读取ACK的电平完全拉低,但是第9个CLK后高电平建立时间变长.
(4)上拉电阻为75K,2b'00
/*I2C2,4*/
I2C_SET_REG32(0x10002800 + 0xA0, 0xFF, 0x00);
驱动电流为1.41mA,[EH,EH2,EH1] = 2b'111
/*I2C2,4*/
I2C_SET_REG32((0x10002800 + 0x20), 0x0FFF, 0x0FFF);
对应波形如下
可见上拉电阻越大,第9个CLK后高电平建立时间越长.
4 如果直接把DWS i2c4配置为Pull&Push En打勾去掉
高低电平建立的时间会变长,波形有畸变,如下图
5 总结,
mt6762在连接一些外设时,i2c在低电平会拉不低的情况时,可以尝试从外部更改外部上拉电阻,i2c内部上拉电阻,以及寄存器修改驱动电流三个方面去优化i2c的波形,适配对应外设i2c波形,达到满足i2c数据通行的要求.
mt6762/mt6765平台i2c驱动能力修改与波形优化相关推荐
- Android 驱动(15)---如何修改USB驱动能力
如何修改USB驱动能力 修改或查看USB驱动能力有三种方法: 1.工模菜单 通过"*#*#3646633#*#*"进入工程模式,通过如下菜单可以查看修改USB驱动能力: hard ...
- 如何修改USB驱动能力
Android 驱动(15)---如何修改USB驱动能力 如何修改USB驱动能力 修改或查看USB驱动能力有三种方法: 1.工模菜单 通过"*#*#3646633#*#*"进入工 ...
- MTK 平台修改或查看USB驱动能力有三种方法
MTK 平台修改或查看USB驱动能力有三种方法: 1.工模菜单 通过"*#*#3646633#*#*"进入工程模式,通过如下菜单可以查看修改USB驱动能力: hardware t ...
- host速度 mtk usb_[MTK] 如何修改usb驱动能力
[MTK] 如何修改usb驱动能力 2020-03-5 阅读:2732 [DESCRIPTION] USB驱动能力调节方法: USB眼图测试fail处理方法: [SOLUTION] 1.USB眼图测试 ...
- MTK如何修改usb驱动能力
[DESCRIPTION] USB驱动能力调节方法: USB眼图测试fail处理方法: [SOLUTION] 1.USB眼图测试fail通常需要修改如下两个register调节USB驱动能力: RG_ ...
- 【驱动】linux下I2C驱动架构全面分析
I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...
- linux下I2C驱动架构全面分析
I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...
- linux I2C 驱动
原文地址: http://hello2mao.github.io/2015/12/02/Linux_I2C_driver.html 目录 一.LinuxI2C驱动--概述 1.1 写在前面 1.2 I ...
- 【正点原子MP157连载】第四十章 Linux I2C驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
最新文章
- Python多线程threading用法
- PHP 接收 UDP包_PHP早已不是十年前的鸟样!!!
- 113 - Power of Cryptography 浮点数 pow()函数
- python读取excel画散点图-matplotlib两种画散点图的方式
- SQL SERVER CURSOR
- unity中如何解决镜头穿透模型?
- 在批评数据湖的时候,你有没有想过,它并不是取代数据仓库的
- .NET的托管堆中是否可能出现内存泄漏现象
- POJ 3666 Making the Grade (DP滚动数组)
- 【三石jQuery视频教程】01.图片循环展示
- 基于java的密码字典生成
- IT服务公司经理专栏:小公司管理(3)
- 掌握这个技能,再也不用为面试发愁了
- DC综合基础知识学习
- 这是我见过描写天津女孩中最真实的
- android学习:模拟微博看看界面
- python package什么意思_Python模块、包(Package)概念与用法分析
- nginx日志[配置解释]
- 开发人员项目开发的步骤
- 论文笔记MEMC-Net TPAMI