• 【经典总线协议】IIC


    一、IIC协议介绍

      IIC是主从结构的,并且按位传输的串行半双工通信总线协议。IIC总线由SCL时钟信号线SDA数据信号线组成,支持一主多从,即一个IIC主机可以挂接多个IIIC从机,主机通过从机地址和相应的从机进行通信。
      在实际开发中,我们通过不同IIC器件对应的Data sheet中的IIC时序图来编写驱动程序,实现主从之间的数据传输。

    二、IIC时序

    图2.1

    1、START开始信号

      首先由主机发送起始信号:即高电平跳变到低电平的脉冲
                    在这里插入图片描述

    2、发送寻址字节

      接下来主机发送一个寻址字节(8位:7位从机地址+1位读写位),其中第0位是读写位(表示写,1表示读),第1-7位表示从机地址(1-3位可自定义,4-7位为不可修改的默认地址)。
               在这里插入图片描述

    3、ACK应答信号

      到第九位数据时,主机释放SDA,由从机驱动SDA,用以主机接收从机的应答信号。此时如果从机发现该地址是自己的,就把SDA拉为低电平作为ACK应答信号,由主机接收。

    4、数据传输

               在这里插入图片描述

      主机接收到从机的应答信号之后,
      (1)如果第8位读写位是0,即主机向从机写数据,接下来继续由主机驱动SDA,向从机传输数据,期间主机每传送8位数据,从机就会产生一个应答信号ACK,由主机接收。
      (2)如果第8位读写位是1 ,即从机向主机写数据,接下来继续由从机驱动SDA,向主机传输数据,期间从机每传送8位数据,主机就会产生一个应答信号ACK,由从机接收。

      PS:并非每传输8位数据,都会产生ACK信号,以下3中情况例外;
      (1)从机不能响应主机发送的从机地址。例如从机正忙而无法响应IIC总线的操作,或者这个地址没有对应的从机,那么在第9个SCL周期内SDA线就没有被拉低,即没有ACK信号。这时,由主机发送一个停止信号终止传输,或者重新发送一个START信号开始新的传输。
      (2)如果从机无法接收更多的数据,即主机发送的数据超过从机的数据接收能力时,从机不会发出ACK信号,这时,由主机发出一个停止信号终止传输或者重新发送一个START信号开始新的传输。
      (3)主机接收器接收到最后一个字节后,也不会发出ACK信号。于是从机发送器释放SDA线,以允许主机发出停止信号结束传输。

    5、停止信号

      数据传输完毕之后,以SCL为高电平时,SDA由低电平拉为高电平作为停止信号,来结束本次数据传输。
                        在这里插入图片描述

    PS:
      每次向SDA发送一位数据,都需要在SCL高电平时保持,所以SDA上所传输每一位数据都会占用一个时钟周期

  • 相关阅读:
    使用单调栈来解决的一些问题
    优思学院|六西格玛绿带和黑带的年薪收入有多少?
    jdk8u201版本cpu.load过高问题的排查和解决
    解决rsyslog服务占用内存过高
    形参与实参
    2006-2021年上市公司社会责任报告基本信息数据
    简历里写了会代码,却依然过不了面试这一关
    Stable Diffusion:最先进的文本生成图像模型
    学习笔记——路由网络基础——路由优先级(preference)
    华为机试真题专栏订阅指引
  • 原文地址:https://blog.csdn.net/anmo_moan/article/details/126673647