【无标题】

发布于:2025-08-16 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、I2C

1.定义

        内部集成电路的简称,半双工串行同步通信,是芯片和芯片之间的通信方式;通常只有一个主机,多个从机,采用主从应答的方式

  • 上图所示是IIC的总线的使用场景,所有挂载在IIC总线上的设备都有两根信号线,一根是数据线SDA, 另一根是时钟线SCL。这两个信号线都是双向的。
  • 作为一种通信方式,IIC总线在某一时刻,总线只允许有一个设备处于发送状态,所发生的数据被总 线上所有的设备所接收。IIC通信协议包含有设备地址,只有发送方携带的地址与某个接收方的地址 相同时,接收方才真正执行相关的指令。
  • 主从应答:命令总是由主机发起,从机应答,如果主机只有一个,叫单主机,两个或两个以上,是多主机,通常情况下为单主机;主机再发命令的时候,所有从机都能收到,从机的回答所有也都能收到;
  • 时钟信号线永远只有主机发;

2.释放总线:

  • 整根线为高电平
  • 释放总线的权利(1)应该由接收方来,谁要接收数据,谁要提前释放总线

3.上拉电阻

  •  IIC总线规定,设备在空闲时,两根总线都处于高电平状态。为保证这种状态,数据线SDA和时钟线SCL都 要外接上拉电阻。对于I.MX来说,这个上拉电阻也可以在引脚电器配置中设置。
  • 上拉电阻的作用就是当双方在发1的时候,保证最后线上是1,防止内阻拉低,看过原理图10k

4.I2C时序图:

  • 空闲时,两根线均处于高电平;
  • 每次通信前,发送方首先发送一个“起始”信号,其实信号就是在SCL为高电平 时,SDA发送一个低电平。时钟信号是由主机来控制和发送;
  • 时钟信号线为低电平时,数据信号线可以发生改变,当为高电平时,数据信号线必须保持稳定,接收方要在高电平阶段来采样。
  • 高位先行原则
  • 当发完信号时,接收方需要应答,应答为ACK(0)或者NACK(1)(芯片手册写);
  • 如果后续还有发送数据,就接着应答后面,继续发,依旧遵循上述原则
  • 如果后续没有发送数据,在时钟信号线为高电平时,把数据信号线拉为高电平,从此置空闲状态

每一个从机都有占有一个字节的地址值,而主机发完一个起始信号后,先发从机的地址,地址占7位;最后一个bit,是数据流向位。0:主机发从机收;1:从机发主机收,

5.I.MA6ULL

       I.MX6U 提供了 4 个 I2C 外设,通过这四个 I2C 外设即可完成与 I2C 从器件进行通信I.MX6U
的 I2C 支持两种模式:标准模式和快速模式,标准模式下 I2C 数据传输速率最高是 100Kbits/s,在快速模式下数据传输速率最高为 400Kbits/s。

6.寄存器I2C_I2CR

  • IEN(bit7):I2C 使能位,为 1 的时候使能 I2C,为 0 的时候关闭 I2C;
  • IIEN(bit6):I2C 中断使能位,为 1 的时候使能 I2C 中断,为 0 的时候关闭 I2C 中断;
  • MSTA(bit5):主从模式选择位,设置 IIC 工作在主模式还是从模式,为 1 的时候工作在主模式,为 0的时候工作在从模式;
  • MTX(bit4):传输方向选择位,用来设置是进行发送还是接收,为 0 的时候是接收,为 1 的是发送;
  • TXAK(bit3):传输应答位使能,为 0 的话发送 ACK 信号,为 1 的话发送 NO ACK 信号;
  • RSTA(bit2):重复开始信号,为 1 的话产生一个重新开始信号。

7.寄存器 I2Cx_I2SR 

  • ICF(bit7):数据传输状态位,为 0 的时候表示数据正在传输,为 1 的时候表示数据传输完成;
  • IAAS(bit6):当为 1 的时候表示 I2Cx_IADR 寄存器中的地址是从设备地址。为0表示I2Cx_IADR是自己的地址;
  • IBB(bit5):I2C 总线忙标志位,当为 0 的时候表示 I2C 总线空闲,为 1 的时候表示 I2C 总线忙;
  • IAL(bit4):仲裁丢失位,为 1 的时候表示发生仲裁丢失。仲裁丢失在手册第1455页有说明,如果多个设备同时尝试连接总线,则其中一个成为主设备。硬件会立即将仲裁失败的设备切换到Slave
  • Receive模式 。那么仲裁失败的设备就会产生仲裁丢失,导致此位置位。需要理解的是这种情况一定发生在发送起始位的时候,也就是说在发送完起始位之后应该判断此位是否为1;
  • SRW(bit2):从机读写状态位,当 I2C 作为从机的时候使用,此位用来表明主机发送给从机的是读还是写命令。为 0 的时候表示主机要向从机写数据,为 1 的时候表示主机要从从机读取数据;
  • IIF(bit1):I2C 中断挂起标志位,当为 1 的时候表示有中断挂起,此位需要软件清零;
  • RXAK(bit0):应答信号标志位,无论作为主机还是从机,为 0 的时候表示接收到 ACK 应答信号,为1 的话表示检测到 NO ACK 信号。

8.寄存器I2Cx_I2DR

        这是 I2C 的数据寄存器,此寄存器只有低 8 位有效,当要发送数据的时候将要发送的数据写入到此寄存器
注意:此时LSB代表的是数据流向,需要按照实际情况设置为1或者0;如果要接收数据的话
          直接读取此寄存器即可得到接收到的数据

二、电可擦存储器

1.时序图

(1)写8个bit数据

(2)连续写数据

(3)当前位置发数据给主机

(3)主机从指定位读

  • 如果最后主机回应NACK是从机不发了,如果主机发ACK的话,就继续发

三、I2C原理

1.总原理图

  • 作为发送方,是否要检测对面回应的ACK;
  • 作为接收方,回应的是ACK/NACK;

  • 一般用于停止位是否发送并且置1成功

四、I2C操作流程

1.初始化的流程图、写设备、读设备流程图

五、逻辑分析仪


网站公告

今日签到

点亮在社区的每一天
去签到