I2C通讯总线
简介
I2C(Inter-Integrated Circuit)总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
结构
两线式串行总线
- SDA 串行数据线 data
- SCL 串行时钟线 clock
特点
- 多主机总线
- 唯一地址识别
-
可串用多个从机,连接到相同总线的IC数量只受到总线的最大电容400pF限制。
- 通讯速率标准100Kbits/s, 快速可以达到400Kbits/s,高速模式可以达到3.4Mbits/s
基本时序
-
1.总线都带上拉,主机也好,从机也好,都是内置上拉电阻。所以初始状态都是高电平,也是空闲状态, 工作状态(Busy)是低电平,被占用。High is idle. Low is busy
-
2.发送机准备发信时,先检查SDA,如果SDA是低电平,即是有其他设备在使用总线,等待。if busy,waiting.
-
3.检查SDA为高电平,没占用,准备发信. 发送机先把SDA占用,拉低SDA。(也是开始信号start,SCL = 1, SDA 1→0)
-
4.时钟线SCL拉低,给SDA根据数据位改变信号。(SDA只能在SCL为低电平的时候才能变化)
-
5.SCL置高电平, SDA必须保持不变。从机是只在SCL的状态为高时才读取SDA。重复step 4一直到发完一个字节。
- 5.1.SDA最后一位发完。SCL拉低,发送机释放SDA,等待应答信号。
- 6.在SCL拉低的时间,接收机控制SDA来发送信号。SCL置高电平,发送机检查SDA是否有应答,SDA为0,有应答,SDA为1,无应答。
- 6.1.SDA有应答信号,需要继续发送/接收数据(在地址位中,最后一个低位是R/W标志,R是1,/W是0)。重复step 4一直到无应答。
- 7.SDA无应答信号。SCL置低电平,控制SDA置低电平。SCL再置高电平,SDA置高电平(停止信号stop,SCL = 1, SDA 0→1)
基础外设
I2C一般是单片机的基础外设,比较大的芯片可能会内置两个i2c总线功能,一般设备资源根据需求分配完,或者说i2c资源不够使用时, 就需要用IO口模拟I2C功能了。
普通IO模拟i2C
- 速率达不到高速模式
- 需要调试时序,注意通讯基本时序。