【认识 i.MX RT】LPI2C 简析

关键字 :NXPi.MX RTMCUI2C

前面几篇博文的主题都是对系统基础软件和硬件设计的解析和说明,接下来,我会写几篇关于 i.MX RT 的基本常用外设的应用。i.MX RT 的外设资源很丰富,包括:UART、I2C、SPI、CAN、USB、I2S、SD/SDIO、Ethernet 等等。这篇博文就先从 I2C 开始吧。

 I2C(Inter-integrated Circuit)总线支持设备之间的短距离通讯,用于处理器和一些外围设备之间的接口,它只需要两根信号线来完成信息交换。

  1. I2C 硬件连接

        I2C 总线的硬件连接很简单,分别由 SDA(串行数据线)和 SCL(串行时钟线)及上拉电阻组成。这两根线都是双向 I/O 线,接口电路为开漏输出,需要接上拉电阻到电源 VDD。在总线空闲状态时,各个器件的输出级场效应管均处在截止状态,即释放总线,这两根线的电平被上拉电阻拉高,保持为高电平。连接到总线上的任意设备输出低电平都会将总线信号拉低,即各个设备的SDA 和SCL 都是线与的关系。

  1. I2C 总线特征

        (1) I2C 总线上的每一个设备都可以作为主设备(Master)或者从设备(Slave),而且每一个设备都会对应一个唯一的地址(7-bit or 10-bit),主从设备之间可以通过这个地址来确定与哪个设备通讯。支持多主控(Multi-Mastering),但同一总线上同一时刻只能有一个主控,可以有多个从设备。

        (2) 总线上设备的数量受地址唯一和总线的最大电容 400pF 的限制。

        (3) I2C 总线上的设备间以字节(8-bit)为单位进行双向的数据传输。

  1. I2C 总线协议

        I2C 协议规定,总线上的数据传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号由主设备产生。

        (1) 起始信号(S):总线在空闲状态时,SCL 和 SDA 都保持高电平,当 SCL 为高电平,SDA 由高到低跳变时,表示产生一个起始信号。在起始信号产生后,总线处于忙状态,由产生起始信号的主设备,和它要访问的从设备独占,其它 I2C 器件无法访问总线。

        (2) 结束信号(P):当 SCL 为高电平,SDA 由低跳到高时,表示产生一个结束信号。结束信号产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态。

        (3) 数据传输的格式:数据传输以字节(8-bit)为单位,高位先传(MSB)。在 SCL 线上的 Clock 信号由主设备产生,SDA 信号可由主/从设备产生。SDA 信号在 SCL 为低电平时改变状态,在 SCL 为高电平时,保持状态。

        发送器(产生 SDA 信号)每发送一个字节,就在第 9 个时钟脉冲释放数据线,由接收器反馈一个应答信号,当应答信号为低电平时,是有效应答位(ACK),表示成功接收了该字节;为高电平时,是非应答位(NACK),对于接收器是从设备的情况下表示没有成功接收到该字节,对于接收器是主设备的情况下表示这是最后一个字节,发送器将结束发送,并释放 SDA 线,以便主控发送停止信号 P。如下图所示:

        (4) 地址数据的格式:主设备在产生起始信号 S 之后,需要发送一个字节,指定从设备的地址以及后续数据的发送方向(读/写)。这个字节中,地址是7位 bit 7:1,数据方向是 1 位 bit 0 (0 表示主设备向从设备写数据,1 表示主设备向从设备读数据)。如下图所示:

  1. I2C 总线操作

        对 I2C 总线的操作实际就是主从设备之间的读写操作。大致可分为以下三种操作情况:

        (1) 主设备向从设备写数据,数据传输格式如下图所示:


        (2)主设备向从设备读数据,数据传输格式如下图所示:





        (3)主设备向从设备写数据,然后重启信号 RS,主设备又向从设备读数据;或者主设备向从设备读数据,然后重启信号 RS,主设备又向从设备写数据。数据传输格式如下图所示:


  1. I2C 总线的仲裁机制

        由于 I2C 协议支持 多主机和多从机,但是一个总线在同一时间只能有一个主机。那么如果有多个主机同时使用总线,I2C 总线将会用仲裁方式来决定哪个设备占用总线,保证总线上的数据不丢失。

        当 SCL 线是高电平时,仲裁在 SDA 线上发生。SDA 线的仲裁也是建立在总线具有线与逻辑功能的原理上的。在其它主机发送低电平时,发送高电平的主机将会断开它的数据传输,因为总线上的电平与它自己的电平不同(线与连接)。SDA 线的仲裁可以保证 I2C 总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。例如,有两个主控设备,设备 1 要发送数据 DATA1 为“10100111b”,设备 2 要发送数据 DATA2 为“10010111b”。总线被启动后,两个设备在每发送一个数据位都要对自己的输出电平进行检测,只要检测的电平与自己发出的电平一致,它们就会继续占用总线。当主控设备发送第 3 位数据“1”时,主控设备 2 发送“0”,由于“线与”的结果SDA 上的电平为 0,这样当主控 1 检测自己的输出电平时,就会测到一个与自己不相符的“0”电平。这时主控 1 只好放弃对总线的控制权,转为从机接收状态,主控 2 继续控制总线。如下图所示:

  1. 工作速率

        i.MX RT 的工作速率支持:Standard mode(100KHz)、Fast mode(400KHz)、Fast mode Plus(1000KHz)、Ultra Fast mode(5000KHz)、以及 High speed mode(3400KHz)。一般通过 I2C 总线接口可编程时钟来实现传输速率的调整。

 

     以上是我对i.MX RT 的基本常用外设 I2C 的一些理解,希望对有这方面了解需求的你有些帮助。如果要获得更详尽的信息,可以参考 NXP 官网的 RT1060 参考手册数据手册。如果您还有更多的疑问,欢迎在下面评论区评论。

    在后续的博文中,我会继续写一些关于 RT1060 的设计笔记,请多多来大大通关注我哦。

参考资料

  1. i.MX RT1060 Processor Reference Manual - https://www.nxp.com.cn/products/processors-and-microcontrollers/arm-microcontrollers/i-mx-rt-crossover-mcus/i-mx-rt1060-crossover-mcu-with-arm-cortex-m7-core:i.MX-RT1060?tab=Documentation_Tab
  2. i.MX RT1060 Processor Datasheet - https://www.nxp.com.cn/docs/en/nxp/data-sheets/IMXRT1060IEC.pdf

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论