IIC通讯协议
简介
IIC总线是一种串行,半双工总线。主要用于近距离,低速的芯片之间的通信;IIC总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;IIC总线硬件结构简单,成本较低,因此应用广泛。
IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机。主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁功能来防止错误产生。每个连接到IIC总线上的器件都有一个唯一的地址,且每个器件都可以作为主机(同一时刻只能有一个主机),总线上的器件增加和减少不影响其它器件正常工作;IIC总线在通讯时总线上发送数据的器件为发送器,接收数据的器件为接收器:
通信过程
- 主机发送起始信号启用总线;
- 主机发送一个字节数据指明从机地址(1-7位数据)和后续字节的传送方向(0:主机->从机,1:从机->主机);
- 被寻址的从机发送应答信号回应主机;
- 发送器发送一个字节数据;
- 接收器发送应答信号回应发送器;
- …(重复4,5);
- 通信完成后主机发送停止信号释放总线;
起始信号和停止信号
IIC的SDA和SCL在空闲时,都处于高电平状态;
- SCL为高电平时,SDA由高变低表示起始信号;
- SCL为高电平时,SDA由低变高表示停止信号;
- 起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态,停止信号产生后总线处于空闲状态;
发送数据与信号同步
IIC总线在传输数据时,时钟线SCL为低电平时,发送器向数据线发送一位数据,数据线发送完毕后,将SCL置为高电平,此时发送器不允许改变SDA,接收器从SDA上读取一位数据;
典型时序
- 主机向从机发送数据
- 从机向主机发送数据
- 主机先向从机发送数据,然后从机再向主机发送数据
从图中可以看到,当想要改变数据传输方向的时候,忽略当前需要发送的停止信号,直接发送起始信号,这样也是为了避免被其它主机抢占总线。
注:阴影部分表示数据又主机向从机发送,无阴影部分则表示数据由从机向主机传送,A表示应答,A非表示非应答,S表示起始信号,P表示终止信号。