IIC协议
IIC协议中设备地址模式有:7位地址模式、10位地址模式。
1、数据位有效性的规定
1)进行数据传送的时候,SCL必须为高电平,SDA上的数据必须保持稳定;只有在SCL为低电平期间,SDA上的状态才允许变化。
2)即数据在SCL的上升沿到来之前需做好准备,并在下降沿到来之前必须保持稳定。
2、空闲状态
1)规定:SDA和SCL同时处于高电平时,为总线的空闲状态。
3、起始信号与终止信号(都是由主机发送的)
起始信号:SCL为高电平期间,SDA由高电平变为低电平
终止信号:SCL为高电平期间,SDA由低电平变为高电平
4、应答信号
1) ACK(有效应答),当收到应答位为低电平时,表示接收方已经成功接收数据
2)NACK(非应答信号),当收到的应答位为高电平时,表示没有接收成功
3)有效的应答信号要求为:接收器在第9个时钟脉冲之前的低电平期间将数据线SDA拉低,并且确保在该时钟的高电平期间为稳定的低电平。
4)如果接收方为主机,当其收到最后一个字节时会发送一个NACK信号来通知发送方结束数据发送并释放SDA,以便主机发送停止信号P
5、数据传送格式
1)字节传输与应答:每一个字节必须保证是8bit长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随1bit的应答位(即每一帧数据一共有9bit)
2)在IIC总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。即数据位的传输是边沿触发。
6、发送一个字节和接收一个字节时序
7、读写操作的三个方式(常用下面的第一种和第三种方式)
下面示意图中绿色竖线表示从机在SDA上读取数据或者放入数据;两个红色竖线之间表示一个时序单元,具体理解看下图的注释。
(1)指定地址写(指定设备、指定地址进行写操作,所以下面示例中得发送三个字节:设备地址、寄存器地址、写入的数据)
(2)当前地址读(指定设备,在当前地址指针指示的地址下读数据,这个当前地址取决于从机里面的地址指针,是从机山一次操作的最后一个寄存器的地址,所以这个时序不常用)
(3)指定地址读(指定设备、在指定地址上读取数据)
综合前两个例子得出,即复合格式(先指定地址写,但不写数据,然后调用当前地址读,即可得到指定地址读)因为清晰度问题,下面拆分分为两个图来看
8、总线寻址(可以7位、8位和10位寻址)
(1)从机地址为7bit,D7~D1;而D0表示数据的传送方式:0表示主机写数据,1表示主机读数据。
(2)主机向从机写数据
主要有以下步骤:(这里理解对应前面第七大点中的第一小点)
1)由主机发送一个开始信号,
2)主机在数据线上广播从机地址
3)数据的传输方向(是读还是写)
4)“A”代表应答,表示主机找到了从机。
5)主机发送一个字节数据,从机接收到后,会返回给主机一个应答信号,直到主机发送完数据,或者从机返回一个NACK信号,表示从机不再接收主机发送的数据。主机发送一个stop信号。此次数据传输完成。
(3)主机读从机数据
步骤主要如下:(这个时序是进行读部分操作,一般来说读数据会有两个问题:一是向谁读,二是向一中的哪部分读;即下面读寄存器值的例子)这里理解对应前面第七大点中的第二小点
1)主机发送一个开始信号
2)主机在数据总线上广播地址
3)数据的传输方向(读1)
4)从机返回一个“A”代表应答,表示主机找到了从机。
5)从机返回读的数据
6)主机返回一个应答信号,表示成功接收从机发出的一个数据
7)当主机接收数据完毕,返回一个非应答信号“NACK”,从机释放数据总线,接着主机发送一个“P”信号,表示此次数据传输结束。
重要:(读从机寄存器里面的值)这里理解对应前面第七大点中的第三小点
1)主机首先产生START信号
2)然后紧跟着发送一个从机地址,注意此时该地址的第8位为0,表明是向从机写命令,
3)主机等待从机的应答信号(ACK)
4)当主机收到应答信号时,发送要访问的地址(一般为从机寄存器的地址),继续等待从机的应答信号,
5)当主机收到应答信号后,主机要改变通信模式(主机将由发送变为接收,从机将由接收变为发送)所以主机重新发送一个开始start信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为1,表明将主机设置成接收模式开始读取数据,
6)主机等待从机的应答信号,当主机收到应答信号时,就可以接收1个字节的数据,当接收完成后,主机发送非应答信号,表示不在接收数据
7)主机进而产生停止信号,结束传送过程。