一、IIC协议介绍
IIC是主从结构的,并且按位传输的串行半双工通信总线协议。IIC总线由SCL时钟信号线与SDA数据信号线组成,支持一主多从,即一个IIC主机可以挂接多个IIIC从机,主机通过从机地址和相应的从机进行通信。
在实际开发中,我们通过不同IIC器件对应的Data sheet中的IIC时序图来编写驱动程序,实现主从之间的数据传输。
二、IIC时序
1、START开始信号
首先由主机发送起始信号:即高电平跳变到低电平的脉冲
2、发送寻址字节
接下来主机发送一个寻址字节(8位:7位从机地址+1位读写位),其中第0位是读写位(表示写,1表示读),第1-7位表示从机地址(1-3位可自定义,4-7位为不可修改的默认地址)。
3、ACK应答信号
到第九位数据时,主机释放SDA,由从机驱动SDA,用以主机接收从机的应答信号。此时如果从机发现该地址是自己的,就把SDA拉为低电平作为ACK应答信号,由主机接收。
4、数据传输
主机接收到从机的应答信号之后,
(1)如果第8位读写位是0,即主机向从机写数据,接下来继续由主机驱动SDA,向从机传输数据,期间主机每传送8位数据,从机就会产生一个应答信号ACK,由主机接收。
(2)如果第8位读写位是1 ,即从机向主机写数据,接下来继续由从机驱动SDA,向主机传输数据,期间从机每传送8位数据,主机就会产生一个应答信号ACK,由从机接收。
PS:并非每传输8位数据,都会产生ACK信号,以下3中情况例外;
(1)从机不能响应主机发送的从机地址。例如从机正忙而无法响应IIC总线的操作,或者这个地址没有对应的从机,那么在第9个SCL周期内SDA线就没有被拉低,即没有ACK信号。这时,由主机发送一个停止信号终止传输,或者重新发送一个START信号开始新的传输。
(2)如果从机无法接收更多的数据,即主机发送的数据超过从机的数据接收能力时,从机不会发出ACK信号,这时,由主机发出一个停止信号终止传输或者重新发送一个START信号开始新的传输。
(3)主机接收器接收到最后一个字节后,也不会发出ACK信号。于是从机发送器释放SDA线,以允许主机发出停止信号结束传输。
5、停止信号
数据传输完毕之后,以SCL为高电平时,SDA由低电平拉为高电平作为停止信号,来结束本次数据传输。
PS:
每次向SDA发送一位数据,都需要在SCL高电平时保持,所以SDA上所传输每一位数据都会占用一个时钟周期。