本篇来介绍一下I2C协议,多用于E2PROM等芯片间通讯,因为只有两根线,支持多主机应用,应用简单成本低,因此在设计中应用较多。一、硬件连接
下图是STM32内部的I2C硬件结构:
对于I2C的连接最重要的是上拉电阻的设置,上拉电阻的设置目的是保证空闲电平为高,这样就可以实现总线仲裁检测而进行多主机通讯,这样的方式可参照CAN总线的方式。就是通过显性电平(低电平)来修改总线。下图是标准的OD方式的I2C接口:
那么上拉电阻如何设置,上拉电阻一般推荐的是1K~10K,具体的大小会影响上升沿和下降沿时间,因此I2C一般出现通讯问题因为上拉电阻的可能性较大,具体设计参数可以参考公式:
Rmin=(VDD(min)-0.4V)/3mA; 3mA为最大上拉电流
Rmax=(T/0.874)*c,T=1uS 100khZ 0.3uS 400KHz
C是总线寄生电容。上拉电阻设置不当会导致波形不稳定,通讯异常,寄生电容也会限制节点数目。
另外在信号线中加入匹配电阻也能防止波形反射振铃等异常现象。
二、通讯方式
下图是STM32中的I2C几种通讯特点
传输格式如图:
下图是网上找来的一张I2C波形图:
三、I2C的特点
1、同步串行通讯,非差分信号,远距离慎用。
2、非高速应用,100KHz,400KHz,3,4MHz。
3、主从模式,多主从模式。
4、两根线,应用简单。
5、通讯时序固定,驱动编写简单。
6、单工通讯