今天的文章来源于网友问答,我在群里给解答了一下,关于 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 位数据的传输可能无法满足时序要求,导致通信失败。
来自于嵌入式客栈 综上所述,最好选择开关时间小的 MOS 管,一般都是 ns 级别,其次还要考虑上拉电阻的选择。I2C 的上拉电阻如何选择,在之前的文章中,我也有提到。 图中的型号是 SI2302,看了一下 SPEC,参数还是比较小的。
MOS 开关时间不光要看 switching 参数,最好也看一下 Qg、Qgs 和 Qgd,参数的介绍,我在之前的文章也有写到。 然后看了一下开启阈值,也符合要求。
今天的文章内容到这里就结束了,希望对你有帮助,我们下一期见。