IIC属于两线式串行总线,没有仲裁结构,属于多主设备多个从设备的总线结构,两根双向线:串行时钟线(SCL)和串行数据线(SDA).所有的通信都是由主设备发起,从设备响应,实现数据的传输。
通信过程
主设备向从设备发送/写入数据:
- 主设备发送开始(START)信号
- 主设备发送设备地址到从设备
- 等待从设备响应(ACK)
- 主设备发送数据到从设备,一般发送的每个字节数据后会跟着等待接收来自从设备的响应(ACK)
- 数据发送完毕,主设备发送停止(STOP)信号终止传输
这里一个注意的点:主设备通过SDA发送设备地址,每个从设备都会检查是否匹配自己的地址,不匹配的发1,匹配的发0,但是只要有一个发0, SDA就是0
主设备从从设备接收/读取数据
- 设备发送开始(START)信号
- 主设备发送设备地址到从设备
- 等待从设备响应(ACK)
- 主设备接收来自从设备的数据,一般接收的每个字节数据后会跟着向从设备发送一个响应
- 一般接收到最后一个数据后会发送一个无效响应(NACK),然后主设备发送停止(STOP)信号终止传输