IIC通讯协议学习笔记(以从MPU-6050获取数据为例)

    最近要使用MPU-6050,故开始学习IIC通讯协议。

一、基本概念

      1、发送器:向总线发送数据的器件。

           接收器:从总线接收数据的器件。

           主机   :初始化发送,产生时钟周期,结束发送的器件

           从机   :被主机寻址的器件

      2、释放总线:将总线SDA线拉高

二、以从MPU-6050获得数据为例的IIC通讯过程

      1、主机启动IIC(发送起始信号):SCL线为高电平时,SDA出现下降沿。

IIC通讯协议学习笔记(以从MPU-6050获取数据为例)

      2、主机发送从机地址(最后一位为0表示写信号)到总线:

            (1)在SCL线为高电平时,设置SDA线的高低,以此表示数据(高电平为1,低电平为0)   (一次发送八位数据/八个时钟周期)

IIC通讯协议学习笔记(以从MPU-6050获取数据为例)

            (2)在第九个时钟周期,主机释放总线,从机将SDA线拉低,表示成功接收数据 (ACK)  

IIC通讯协议学习笔记(以从MPU-6050获取数据为例)

       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)

IIC通讯协议学习笔记(以从MPU-6050获取数据为例)

        11、主机发送停止信号:SCL为高电平是,SDA出现上升沿。


注意:

        1、不管是主机还是从机发送数据都是从高位开始发。

        2、ACK和NACK的问题:

             (1)ACK表示应答,NACK表示不应答

             (2)在主机向从机发送数据时,每发送/接收一个数据,接收器发送一个ACK表示成功接收

                      在从机向主机发送数据时,每发送/接收一个数据,由主机决定是否还要继续发送,如果要则ACK(应答),如果不要则NACK(不应答).