背景:早期开发的一款产品,在做单元测试时出现了I2C Tf下降太快的问题,该问题查看了协议在400KHz时才有要求,但大部分Senor SPEC对应的I2C部分并没有标注tf的Min值,因此直接过去了,但这款Senor和协议要求完全一致,有Min值要求。
上拉2.2K测试的Tf是4.5nS,协议需求20+0.1Cb>20nS.
如下协议要求
针对以上问题,构建内部RC通路进行粗略的分析。
分析如下:
I2C上升时间完全是RC电路充电,对应MOS开关关闭
因此充电时间为一阶RC充电时间,
大概思路如下:之前的草稿
以10%-90%计算上升时间,约为2RC
1.通过上升时间RC 计算出电容,
2.通过低电平时电压计算出MOS的导通阻抗,可通过改变电流能力修改
通过计算的R和C验证下降时间
3.通过已知RC,和需要的下降时间计算增加的电容
验证上升时间,上升FAIL,以上升计算C,即 C=min(tr,tf求的的电容)
实际测试验证
单个I2C时取20pF计算,2.2K上拉时的上升时间为(mathcad计算)
88nS,实际测试值为160ns,即实际的电容只有40pF左右,RC估算时为80pF.
实际测试如下:
tR.SCL(MIN,MAX): SCL上升时间的最小最大值,最小值
下降沿时间为MOS导通时间+电容的放电时间,因MOS在IC内部,无法修改时间相关的参数,只能修改电容,
1.MOS导通时间
米勒效应
2.电容的放电时间,
以上拉2.2K时低电平的电压值估算MOS导通时的阻抗
VIL.SCL, VIH.SCL: SCL输入电压,通道1
VIL.SDA, VIH.SDA: SDA输入电压,通道3
因SCL完全由主机发起,从上可知低电平为40mV,通过分压可知导通内阻约为
约为50ohm,
反过来计算放电时间2rc
4nS,实际的下降时间为4.5nS
tF.SCL(MIN,MAX): SCL下降时间的最小最大值,最小值
因此mos打开的时间大概为0.5nS
如想修改下降时间为20nS,则需增加
C=
=0.2nF=200pF
按理论实际应为20.5nS
此时的上升时间约为
=880nS
协议规定最大tr=300nS,因此只能使用上升时间计算最大电容为
=68pF
完整计算过程如下:
使用82pf电容验证
SCL tR 444.3-486ns fail
SCL tF 8-9ns fail
SDA tr 404.8-421nS fail
tf 4-11ns fai
从上可以看出增加82pF电容后,Tr fail了,但Tf还是太快,没有满足>20nS的要求,因此增加电容的方案无法满足要求。好在Tf太快并不影响I2C正常通信功能,从通信的角度硬件希望Tf和Tr就是越快越好。
EMC 希望Tr Tf越长越好,因此此要求可能是考虑EMC的需求,整机EMC测试也无相关问题,产品并不受影响,从如上一个小问题,再次复习了下RC电路。