两线制
I2C总线具有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL。
SCL为高,SDA稳定,则数据有效
举例,下图表示1010000
SCL为高,SDA信号下降沿,传输开始
SCL为高,SDA信号上升沿,传输结束
数据传输
I2C 总线上可以挂多个主设备,多个从设备(外围设备)。每个接到 I2C 总线上的器件都有唯一的地址。这时主机即为发送端,总线上收数据的器件则为接收端。
-
多主机仲裁
-
主机只能在总线空闲时启动传输。多个主机可能在起始条件的最小持续时间内产生一个起始条件,结果在总线上产生一个规定的起始条件。
-
当 SCL 线是高电平时,仲裁在 SDA 线发生。在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。
-
-
总线寻址
- 采用7位的寻址字节(寻址字节是起始信号后第一个字节),D7~D1位组成从机的地址,D0位是数据传送方向,为 “0” 时表示主机向从机写数据,为 “1” 时表示主机由从机读数据。
- 主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,则认为自己正在被主机寻址。
-
写数据
-
完整的一次写数据,如下图所示
-
-
读数据
-
完整的一次读数据,如下图所示
-
-
应答信号
- 如读写图所示,应答信号由从机产生,非应答信号可能是主机产生也可能是从机产生,产生非应答信号的情况主要有以下几种:
- I2C总线上没有主机所指定地址的从机设备;
- 从机正在执行一些操作,处于忙状态,还没有准备好与主机通讯;
- 主机发送的一些控制命令,从机不支持;
- 主机接收从机数据时,主机产生非应答信号,通知从机数据传输结束,不要再发数据了。
- 如读写图所示,应答信号由从机产生,非应答信号可能是主机产生也可能是从机产生,产生非应答信号的情况主要有以下几种: