对于这种常用通信协议中的细节,时间长不使用总是记不清,今写下笔记。
一、信号
1、起始信号:
当时钟总线SCL为高电平时,数据线SDA由高电平向低电平跳变。
2、结束信号:
当SCL线为高电平时,SDA线从低电平向高电平跳变。
注:开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态,其它器件不能再产生开始信号。主器件在结束信号以后退出主器件角色,经过一段时间过,总线被认为是空闲的。
3、数据采样
IIC总线数据传送采用时钟脉冲逐位串行传送方式,在SCL的低电平期间,SDA线上高、低电平能变化,在高电平期间,SDA上数据必须保护稳定
为什么IIC要求在SCL高电平期间要SDA总线上数据保持稳定呢?
因为当SCL高电平期间,SDK由低到高的变化会被认为是结束信号;SDA由高到底的变化会被认为是起始信号。
3、应答信号(ACK/NAK)
第9个脉冲期间,主机释放SDA总线,此时产生ACK和NAK信号。
当SCL为高电平,SDA是低电平时为ACK;
当SCL为高电平,SDA是高电平时为NAK;
应答信号并不是只有主机应答从机,具体需要根据情况而定,如:
当主机写数据时:从机应答ACK,表示主机可以继续发送,从机回复NAK表示从机停止接受
当主机读数据时:主机回复ACK,表示可以继续读取,主机回复NAK表示主机不再读。
为什么信号高低电平变化这么规定?
在电路设计中,通常下SCL和SDK总线是需要外加上拉电阻的。因此,其常态下表现为高电平。因此,如果当设备需要动作是,需要将高电平拉低。反之,当设备无动作时,由于外部上拉电阻的原因,总线此时默认是高电平
此处盗个图
二、时序
1、读时序
(逻辑分析仪波形中由于从机只有一个寄存器地址,所以没有必要发送)
1、主机发送起始信号
2、主机发送地址及读命令(第8位是1)
3、从机返回ACK表示已经准备好
4、从机开始发送数据,主机返回ACK
5、从机继续发送数据,主机返回NAK,表示主机停止接收
6、主机返回结束信号,结束此次通信
2、写时序
(逻辑分析仪波形中由于从机只有一个寄存器地址,所以没有必要发送)
1、主机发送起始信号
2、主机发送地址及写命令(第8位是0)
3、从机返回ACK表示已经准备好
4、主机开始发送一字节数据,从机回复ACK
5、主机继续发送一字节数据,从机回复NAK,表示停止接收
6、主机返回结束信号,结束此次通信