I2C知识总结

I2C(Inter-Integrated Circuit,集成电路总线)
  I2C总线为PHILIPS公司推出的串行通信总线,具有接线少,控制方式简单,通信速率高等优点。采用数据线SDA和时钟线SCL构成通信线路,各器件可通过并联到总线上实现数据收发,器件间彼此独立,通过唯一的总线地址区分。传输数据时每个字节后需带一个响应位。


I2C知识总结_第1张图片

三种I2C传输模式:标准模式传输速率100k bit/s,快速模式传输速率400k bit/s,高速模式可达3.4M bits/s(一般设备不支持)。

单片机模拟I2C程序:(点我)

拓展:上拉电阻选择:(下文转自致远电子技术专题–I²C总线上拉电阻阻值如何选择?)
  I2C总线上各器件都采用漏极开路的形式与总线连接,因此SCL和SDA均需接上拉电阻,才能输出高电平。

I2C知识总结_第2张图片

图:I2C总线内部结构

  I2C规范将低于VIL或低于0.3VDD的电压定义为逻辑低电平,同样将高于VIH或高于0.7VDD的电压定义为逻辑高电平,如下图所示:
I2C知识总结_第3张图片

图:指定为逻辑高电平和逻辑低电平的电压电平

  电源电压限制了可允许总线拉低的最小上拉电阻值,过强的上拉会阻止器件充分拉低拉线的电平,导致无法确保逻辑低电平能被检测到。在输出级V_OLmax=0.4V 时指定I_OL为3mA,允许总线电压拉低的最小上拉电阻公式:
Rpmin=VDD(min)VOL3mA

VDD Rp 的函数关系分别如下图所示:
I2C知识总结_第4张图片

Rp 的最小值是电压的函数

  由于端口的输出的高电平是通过上拉电阻实现,线上的电平从低变到高时,电源通过上拉电阻对线上负载电容CL充电,这需要一定的时间,即上升时间,上拉电阻的最大值由总线容限负载决定,总线负载图如下图所示:
I2C知识总结_第5张图片

总线负载结构图

  总线电容主要由引脚、连接、PCB走线和导线等因素引起,总线电容与上拉电阻R具有一个RC时间常数,随着I2C通信速率的增加,该常数变得越发重要。通过电阻对电容进行充电的一般公式:
V(t)=VDD(1etRpC)

  重新排列,得:
t=RCln(1V(t)VDD)

  之后我们可计算电压上升至VIL的时间T1、上升至VHL的时间T2以及精确计算两个电平之间的时间TR,如图5所示。由于VIL与VHL都是有V_DD产生,因此该公式与电源电压无关,V_DD项已抵消。
I2C知识总结_第6张图片

总线电平上升时间

  求解,
VIL=0.3VDD T1=0.356675RpC

VIH=0.7VDD T2=1.203970RpC

TR=T1T1=0.847298RpC

  在I2C标准模式下,100Kbps总线的负载最大容限小于等于400pF;快速模式,400Kbps总线的负载最大容限小于等于200pF,快速模式下I2C总线上升时间更快,总线上拉电阻要比标准模式小,设计时以快速模式50Pf~200pF为参考,由上面(6)式得最大Rp值与总线电容的关系如下图所示:
I2C知识总结_第7张图片

图: 符合快速模式I2C总线TRmax要求的Rp最大值是总线电容的函数

  由上面的计算可得出上拉电阻RP可以取的范围是1.53K~7K @VDD = 5V,一般取5.1K ,综合到3.3V VDD低功耗设计中,通常选用4.7K牺牲速度换取电池使用时间,此阻值也是常规阻值。
  关于I2C的上拉电阻,最好的方式是看官方给出的参考设计,如果走线长了或总线上有多从机,就相应把电阻改小一些,如若参考设计没有就在计算范围内选用一个常规阻值。实际的时候我们没有去测量总线电容的问题,只能在选件、走线的时候给予些许关注。

......

你可能感兴趣的:(嵌入式开发)