今天的文章来源于网友问答,我在群里给解答了一下,关于I2C电平转换,我之前写过一篇串口电平转换,其实是一个东西,然后今天我再简单写一下。
聊天记录中给出的原图就是下面这张。
1. 我首先问了一下,VDD_SN的电压,这个电压肯定是要小于右边的3.3V的,因为什么呢?
VDD_SN高于3.3V,NMOS Q13和Q14在关闭状态时,左边高于3.3V的电压就会通过Q13和Q14的体二极管到达TP_SCL和TP_SDA上,使其电压高于3.3V,就有损坏单片机IO口的风险。
2. 这个电路的工作原理是什么呢?
SN2_SCL=0V,Q13导通,TP_SCL=0;
SN2_SCL=1.8V,Q13截止,TP_SCL=3.3V;能正常完成电平转换过程,SDA信号是同样的道理。
3. 然后我又提到MOS管的开关时间,原因是什么呢?
左边到右边的数据传输,会有一个时间差,这个时间差一方面受到NMOS开关时间的影响,另一方面是总线容抗+上拉电阻(RC时间常数)的影响。
假如I2C的速率是400KHz,那传输1bit数据的时间就是2.5us,如果MOS管的关闭时间参数大,加上RC较大,会出现如下比较差的上升沿波形,在这2.5us之内,1位数据的传输可能无法满足时序要求,导致通信失败。
动图来自于嵌入式客栈
下降沿是单片机IO直接输出低电平,驱动能力比较足,所以时间差主要受MOS管开启时间影响。
综上所述,最好选择开关时间小的MOS管,一般都是ns级别,其次还要考虑上拉电阻的选择。I2C的上拉电阻如何选择,在之前的文章中,我也有提到。
春眠不觉晓,IIC总线知多少?
图中的型号是SI2302,看了一下SPEC,参数还是比较小的。
MOS开关时间不光要看switching参数,最好也看一下Qg、Qgs和Qgd,参数的介绍,我在之前的文章也有写到。
然后看了一下开启阈值,也符合要求。
综上所述,这个电路是可以用的。
今天的文章内容到这里就结束了,希望对你有帮助,我们下一期见。