三大通信协议(二):IIC通信协议

      最后更新:2022-02-09 18:38:10 手机定位技术交流文章

      目录

      • 1. 概念
      • 2. 硬件连接
      • 3. 数据传输协议
        • 3.1 开始信号
        • 3.2 地址位
        • 3.3 读写位(R/W)
        • 3.4 应答位(ACK / NACK)
        • 3.5 数据位(8Bit)
        • 3.6 停止信号
      • 4. 软件编写
        • 4.1 初始化
        • 4.2 开始信号
        • 4.3 IIC发送一个字节数据
        • 4.4 IIC读取一个字节
        • 4.5 停止信号
      • 参考资料

      1. 概念

      • 是什么?

      I²C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980年代初设计的,方便了主板、嵌入式系统或手机与周边设备组件之间的通讯。由于其简单性,它被广泛用于微控制器与传感器阵列,显示器,IoT设备,EEPROM等之间的通信。

      • 优点
        1. 仅需要两条总线即可通讯(大大的节约了IO口资源)
        2. 最大主机数量:无限制。最大从机限制:理论127
          (一个主机多个从机,一对多,多对一,多对多)

      2. 硬件连接

      • I²C协议仅需要一个SDA(串行数据线)和SCL(串行时钟线)引脚。这两条数据线需要接上拉电阻。
      • 上拉电阻使用典型的4.7kΩ。
      • 使用I2C设备灌电流不得超过3mA
      • 逻辑0电压不得高于0.4V
        在这里插入图片描述

      I²C总线(SDA,SCL)内部都使用漏极开路驱动器(开漏驱动),因此SDA和SCL 可以被拉低为低电平,但是不能被驱动为高电平,所以每条线上都要使用一个上拉电阻,默认情况下将其保持在高电平;
      在这里插入图片描述

      3. 数据传输协议

      主设备和从设备进行数据传输时遵循以下协议格式。
      数据通过一条SDA数据线在主设备和从设备之间传输0和1的串行数据。串行数据序列的结构可以分为,开始条件,地址位,读写位,应答位,数据位,停止条件,具体如下所示;

      在这里插入图片描述

      1. 主机(Master)发送开始信号给从机(Slave),唤醒所有主从机
      2. 主机发送7位的地址位和1位的读写位给从机
      3. 等待地址匹配从机的应答信号
      4. 主机发送或接收数据到从机
      5. 在传输完每个数据帧后,接收设备将另一个ACK位返回给发送方,以确认已成功接收到该帧:
      6. 结束之后主机发出停止信号

      3.1 开始信号

      当主设备决定开始通讯时,需要发送开始信号,需要执行以下动作:

      1. 先将SDA线从高压电平切换到低压电平;
      2. 然后将SCL从高电平切换到低电平;

      在主设备发送开始条件信号之后,所有从机即使处于睡眠模式也将变为活动状态,并等待接收地址位。
      在这里插入图片描述

      3.2 地址位

      7位组成的地址位
      主设备如果需要向从机发送/接收数据,首先要发送对应从机的地址,然后会匹配总线上挂载的从机的地址;

      3.3 读写位(R/W)

      该位指定数据传输的方向:

      • 如果主设备需要将数据发送到从设备,则该位设置为0
      • 如果主设备需要往从设备接收数据,则将其设置为1

      3.4 应答位(ACK / NACK)

      主机每次发送完数据之后会等待从设备的应答信号ACK:

      • 在第9个时钟信号,如果从设备发送应答信号ACK,则SDA会被拉低;
      • 若没有应答信号NACK,则SDA会输出为高电平,这过程会引起主设备发生重启或者停止;
        在这里插入图片描述

      3.5 数据位(8Bit)

      传输的数据总共有8位,由发送方设置,它需要将数据位传输到接收方。(这个则是cmd或者data)

      发送之后会紧跟一个ACK / NACK位,如果接收器成功接收到数据,则设置为0。否则,它保持逻辑1。

      • 8DataBit+AckBit、8DataBit+AckBit…直到数据发送完进行下一次才接上Stop信号

      3.6 停止信号

      当主设备决定结束通讯时,需要发送开始信号,需要执行以下动作:

      1. 先将SDA线从低电压电平切换到高电压电平;
      2. 再将SCL线从高电平拉到低电平;

      具体如下图所示:
      在这里插入图片描述

      4. 软件编写

      4.1 初始化

      4.2 开始信号

      4.3 IIC发送一个字节数据

      4.4 IIC读取一个字节

      4.5 停止信号

      参考资料

      I2C协议靠这16张图彻底搞懂(超详细)
      IIC原理超详细讲解—值得一看

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/18076.html

          热门文章

          文章分类