IIC通信通常采用一主多从模式,即一个主机、多个从机进行通讯。
IIC通信通过SCL时钟信号线和SDA数据信号线挂载多个设备。
那么问题就来了,由于挂载了多个设备,那么如何确定主机(单片机)和哪一个从机进行通讯呢?
首先,由主机向从设备发从起始信号,即上图起始位。起始位信号是在时钟信号线(SCL)为高电平的时候,数据信号线产生下降沿(即由高电平转向低电平),就完成了起始信号。(如下图)
起始信号产生以后,就要发从从机设备地址。因为一主多从,主机要确定和那个从机通讯。假如:图一中屏幕的设备地址是0x80,24C02的设备地址是0x90。主机在发从完起始信号通知各从设备准备接受信号。主机再次发送从机设备地址,比如发送0x80,那边就会和屏幕建立通讯,其他从设备不受影响。
其中要注意,从设备地址只有七位,不是八位。第八位表示读写位。即第八位为0时,表示主机向从设备写入数据。第八位为1时表示主机向从机读取数据(即从机向主机发送数据)。
那么起始信号我们已经知道怎么发送了。但是设备地址、寄存器地址和数据是怎么产生和发送的呢?
1、首先、这三者的数据产生和发送时一模一样的!
2、数据产生:在SCL时钟信号线为低电平的时候,SDA数据线可以进行高点电平的转换。如下图。
3、数据读取:在SCL为高电平的时候,自动读取数据。因为在SCL为高电平的时候,数据必须保持稳定。
4、顺序:那么我们是先输入高位的电平信号还是先输入低位的电平信号呢?(这个先待定)。。。。
5、根据图二可以看出,每发送完八位数据,接收机都要发从应答信号。应答信号为低电平。
最后结束信号。结束信号是在SCL为高电平的时候,SDA数据线完成由低到高的跳变(上升沿)。