IIC通讯协议学习笔记(以从MPU-6050获取数据为例)
最近要使用MPU-6050,故开始学习IIC通讯协议。
一、基本概念
1、发送器:向总线发送数据的器件。
接收器:从总线接收数据的器件。
主机 :初始化发送,产生时钟周期,结束发送的器件
从机 :被主机寻址的器件
2、释放总线:将总线SDA线拉高
二、以从MPU-6050获得数据为例的IIC通讯过程
1、主机启动IIC(发送起始信号):SCL线为高电平时,SDA出现下降沿。
2、主机发送从机地址(最后一位为0表示写信号)到总线:
(1)在SCL线为高电平时,设置SDA线的高低,以此表示数据(高电平为1,低电平为0) (一次发送八位数据/八个时钟周期)
(2)在第九个时钟周期,主机释放总线,从机将SDA线拉低,表示成功接收数据 (ACK)
3、用(1)、(2)的方法依次发送寄存器地址、寄存器配置数据
4、主机发送停止信号:SCL为高电平是,SDA出现上升沿。
5、主机启动IIC(发送起始信号):SCL线为高电平时,SDA出现下降沿。
6、主机发送从机地址(最后一位为0表示写信号)到总线。
7、主机发送寄存器地址。
8、主机启动IIC(发送起始信号):SCL线为高电平时,SDA出现下降沿。
9、主机发送从机地址(最后一位为1表示读信号)到总线。(之后从机开始从寄存器发送数据)
10、主机接收数据
(1)在SCL线为高电平时,读取SDA线的高低,存入一个八位变量(高电平为1,低电平为0;一次接收八个数据位/八个时钟周期;先高数据位,再低数位;
(2)在第九个时钟周期,主机告诉从机停止通信及(不要再接收数据):保持SDA线高电平。(NACK) //如果还要主机还要接收数据,就让SDA线保持低电平(ACK)
11、主机发送停止信号:SCL为高电平是,SDA出现上升沿。
注意:
1、不管是主机还是从机发送数据都是从高位开始发。
2、ACK和NACK的问题:
(1)ACK表示应答,NACK表示不应答
(2)在主机向从机发送数据时,每发送/接收一个数据,接收器发送一个ACK表示成功接收
在从机向主机发送数据时,每发送/接收一个数据,由主机决定是否还要继续发送,如果要则ACK(应答),如果不要则NACK(不应答).