I2C协议是非常常用的一种通信协议,是必须要掌握的几种协议之一。
I2C 总线使用连接设备的"SCL"(串行时钟总线)和"SDA"(串行数据总线)来传送信息。主机在SCL 线上输出串行时钟信号,数据在SDA 线上进行传输,每传输一个字节(最高位MSB 开始传输),后面跟随一个应答位。一个SCL 时钟脉冲传输一个数据位。通常标准I2C 传输协议包含四个部分:起始(S)或重复起始信号(Sr),从机地址及读写位, 传输数据,停止信号(P)。
起始信号、重复起始信号、停止信号 当总线处于空闲状态下(SCL 和SDA 线同时为高),SDA 线上出现由高到低的信号, 表明总线上产生了起始信号。当两个起始信号之间没有停止信号时,即产生了重复起始信号。主机采用这种方法与另一个从机或相同的从机以不同传输方向进行通信(例如:从写入设备到从设备读 出)而不释放总线。 当SCL 线为高时,SDA 线上出现由低到高的信号,被定义为停止信号。主机向总线 发出停止信号结束数据传送。
从机地址及读写位 当起始信号产生后,主机立即传输数据的第一字节:7 位从机地址 + 读写位,读写位控制从机的数据传输方向(0:写;1:读)。被主机寻址的从机会通过在第9 个SCL时钟周期将SDA 置为低电平作为应答。 传输数据 数据传输过程中,一个 SCL 时钟脉冲传输一个数据位,且 SDA 线只有在 SCL 为低 时才可以改变。
每传输一个字节,后面跟随一个应答位。通过将 SDA 线拉低,来允许接收端回应发送端。ACK 为一个低电平信号,当时钟信号为高时,SDA 保持低电平则表明接收端已成 功接收到发送端的数据。当主机作为发送器件时,如果从机上产生无响应信号(NACK),主机可以产生停止信号来退出数据传输,或者产生重复起始信号开始新一轮的数据传输。当主机作为接收器件 时,发生无响应信号(NACK),从机释放SDA 线,使主机产生停止信号或重复起始信号。 支持四种工作模式:主机发送模式、主机接收模式、从机发送模式和从机接收模式。 可以通过逻辑分析仪对I2C通信过程中的波形进行分析,可以获得通讯的数据。
|