IIC通信协议
IIC 集成电路总线,多用于主控制器和从器件间的主从通信,在小数据量场景下使用,传输距离短,任意时刻只能有一个主机
物理层面
只有两条线,一条是串行时钟线SCL和一条串行数据线SDA
空闲状态
IIC空闲状态下 SDA 和SCL 都为高电平
一般加两颗上拉电阻
数据传输状态
-
当时钟信号为高电平时,数据线上的数据必须稳定
-
当时钟信号为低电平时,数据线上的数据允许变化
起始信号
时钟线SCL为高电平期间,数据线SDA由高电平向低电平变化
终止信号
时钟线SCL为高电平期间,数据线SDA由低电平向高电平变化
应答信号
发送器每发送一个字节(8bit),就在第 9个时钟脉冲期间释放数据线,由接收器反馈一个应答信号。
- 应答位为低电平(Low Level)时,规定为有效应答位 (ACK)
- 应答位为高电平(High Level)时,规定为无效应答位(nACK)
写工作流程
- 发送起始信号 (SCL高电平,SDA下降沿)
- 发送7Bit 从机地址 + 1bit 写数据位 (为1)
- 等待从机应答ACK
- 发送Data,等待从机ACK,依次循环
- 发送终止信号 (SCL高电平,SDA上升沿)
读工作流程
- 发送起始信号(SCL高电平,SDA上升沿)
- 发送7Bit从机地址 + 1 Bit 读数据位 (为0)
- 等待从机应答ACK
- 从机发送Data,主机反馈ACK,依次循环
- 终止读数据时候发送NACK
- 主机发送终止信号
IIC 通信模式
IIC通信模式分为 标准模式和快速模式
100KHZ 以及400KHZ
IIC 错误处理和恢复机制
主机检测到错误时,可以发送一个NACK信号,选择重试或终止信号
IIC总线仲裁
当主机发送一个起始信号时候,其他主机接收到会自动释放控制权避免冲突
多主机下通信 只能有一个主机拥有控制权