MT6739 Android 8.1 I2C口电平转换低电平无法到0V的解决办法
项目使用MOS管做I2C的电平转换,I2C有内部上拉电阻,如下图:
同样的电路在其他平台已经验证过了,到了MT6739这个平台发现,当I2C为master,向salve发送数据时,S1点(蓝色)和D1点(黄色)的低电平如下:
可以看到S1点没有完全到0V,导致MOS管没有完全导通,所以D1点也没有降为0V;
感觉像是GPIO口内部,低电平时候,先经过一个等效电阻R之后,才到GND,如图:
为了验证上面的猜测,将电平转换电路的R2电阻,改为47K,减小MOS管的DS电流之后,S1点(蓝色)和D1点(黄色)的低电平如下:
可以看到此时S1和D1的低电平都接近0V,推测原因,可能是因为,DS的电流减小之后,流过内部等效电阻R的电流减小,R上的压降也减小,S1点电压接近0V,MOS管导通,D1点也可以被拉到接近0V;
猜测内部电阻产生的原因是因为IO口内部有电流限制,当限制的电流比较小的时候,内部等效电阻R的阻值就比较大:
将电平转换电路的R2电阻,恢复为4.7K,然后修改IO口的驱动电流到最大值,下面DRV_CFG寄存器:
再测S1点(蓝色)和D1点(黄色)的低电平如下:
可以看到此时S1和D1的低电平都接近0V,放大看如下图:
但最低还是没有完全到0V,推测原因,可能是因为,增大IO驱动电流之后,内部等效电阻R的阻值确实减小,但是还有一定的阻值;
所以,确实是因为电流限制的原因,导致内部形成等效电阻,哪如何能不限制电流?
询问MTK后,修改如下寄存器:
将EH_CFG寄存器设置为0,GPIO mode,测试如下:
可以明显看到,低电平几乎是0V,并且低电平下降速率也更快了,和其他平台的表现一致,回头再修改DRV_CFG寄存器,基本上对波形没有什么影响了!
所以,应该是EH_CFG寄存器为1,I2C mode的时候,IO口对电流的限制比较小,导致内部等效电阻R阻值比较大;当EH_CFG寄存器为0,GPIO mode的时候,IO口对电流的限制比较宽,或者几乎没有限制,内部等效电阻R阻值非常小!