这块我们来说一下I2C通信协议。
IIC有两根线,SCL时钟线,SDA数据线,主机可以挂载很多从机, 多个主机也可以挂载相同的从机,但是同一时刻只能有1个主机同一个从机进行通信。并且时钟线SCL是只能由主机控制,数据线SDA主机和从机都可以控制。
IIC时序
1.IIC空闲状态:SDA为高电平,SCL为高电平。
2.起始信号:当SCL为高电平时,SDA由高电平转变为低电平。
3.停止信号:当SCL为高电平时,SDA由低电平转变为高电平
4.应答或者不应答
当发送低电平时为应答,发送高电平为不应答
应答信号是在主机接收到数据后给从机的信号,一般选择不去应答,然后发送停止信号,如果应答从机可能还会继续发送数据。
5.时序
平时正常使用是写入一个字节(8个bit位),此时是向所有的从机发送,但是从机会去比对发送的数据,这个数据是从机的地址,这个地址是7位bit,但是不知道是给从机发还是从从机收到数据,所以最后一位数据是确定去发送还是去接收数据。
如图第1-7位是从机的地址位,最后第0位是控制向从机写还是从从机读数据,当第0位为0时表示主机向从机写数据,当为1时代表主机要接收从机的数据。
所以假设从机地址为1010000,此时要读数据,最后一位发送的就是1,最后的数据也就是0xA1,
当要向该从机写数据时就发送0xA0。
总体时序
在读数据和写数据的时候需要去同步传输的数据,IIC是通过SCL这根时钟线来同步传输的数据的,在写入1个bit位时,需要先将SCL拉低,然后改变此时你想传输的1位数据,再将SCL时钟线拉高,也就是从低电平转变为高电