锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【数字IC】深入浅出理解I2C协议

时间:2023-11-16 08:37:02 高速双二极管high

通俗易懂I2C协议

    • 一、什么是I2C协议
    • 二、I2C,SPI,UART协议的区别
    • 三、I2C的信号线
    • 四、I2C的连接方式
      • 4.1 单主设备,单从设备
      • 4.2 单主设备,多从设备
      • 4.3 多主设备,多从设备
    • 五、I2C数据传输格式
      • 5.1 空闲位
      • 5.2 起始位
      • 5.3 地址位置和读写控制
      • 5.4 应答位(ACK/NACK)
        • 5.4.1 正确接收数据(ACK)
        • 5.4.2 未正确接收数据(NACK)
      • 5.5 数据位
      • 5.6 停止位
      • 5.7 总结
    • 六、I2C可配置变量
      • 6.1 传输模式
      • 6.2 地址位宽
      • 6.3 设备地址
    • 七、I2C的仲裁机制
      • 7.1 SCL同步问题
      • 7.2 SDA仲裁问题
    • 八、写在最后
    • 九、其它数字IC解释基本协议
      • 9.1 UART协议
      • 9.2 SPI协议
      • 9.3 I2C协议
      • 9.4 AXI协议

一、什么是I2C协议

I2C是由Philips简单的开发双向两线总线,通俗易懂SPI我们区分了协议单工,半双工,全双工根据特点,协议数据流的差异,I2C协议属于半双工协议(即同时,数据单向流动)。I2C也是以多主设备,多从设备总线协议,通过地址索引,I2C可以所需的能量来自设备,I2C主要用于实现不同集成电路组件之间的控制功能,比如通过I2C协议,连接MCU与LCD驱动器,远程I/O口,RAM,EEPROM或数据转换器

二、I2C,SPI,UART协议的区别

作者按顺序依次完成UART,SPI,I2C协议,因为这三种协议都属于低速通用协议接口,因此,作者将这三种协议协议一起比较,诚然,经过几十年的发展,这些协议衍生出了许多新版本和许多新特征,但其基本通信方式没有改变。因此,我们只比较他们的基本版本,得到以下表格。特点太多,不一定绝对准确,仅供初学者参考

协议名称 数据流向 电气信号线 通信类型 选通方式
UART 单工/半双工/全双工 1/2条 异步
SPI 全双工 4条 同步 NSS选择
I2C 半双工 2条 同步 地址索引

重点解释UART,SPI,I2C这三个协议的选择方式,作者觉得很有意思。
对于UART一般来说,是的没有办法满足一个主设备,多个设备的通信,它的通信方式是最简单的,至少只需要一条线就可以完成通信。协议本身不允许从设备中外接多个,但我们也可以通过485转接,增加二极管多从设备选择(电路层面的设计内容不是数字的IC需要考虑的内容)。
其次是SPI协议,它有一个特殊的NSS端口,默认降低选择所需的设备。
最后是I2C协议,每个主设备和每个从设备对应一个地址,通信的时候先发送地址信号,若一致,则选择。

三、I2C的信号线

I2C仅需要两根信号线即可完成通信,如下图所示。除此之外,I2C的信号线上拉电路需要连接,上拉电阻的大小是电路设计工程师需要担心,不归Digital IC Design Engineer这里就不赘述了。
在这里插入图片描述
SDA(Serial Data) :串行数据线用于传输数据信号
SCL(Serial Clock):传输串行时钟线时钟信号,主设备一般提供给从设备。

四、I2C的连接方式

I2C连接形式非常灵活,可以单主设备,单从设备,也可以是单主设备,多从设备,还可以是多主设备,多从设备。

4.1 单主设备,单从设备

4.2 单主设备,多从设备

4.3 多主设备,多从设备

五、I2C数据传输格式

5.1 空闲位

空闲时SDA与SCL默认为高电平,对应主设备状态机IDLE(默认态)输出高

5.2 起始位

SCL高电平时 ,主设备控制SDA从1到0,开始,进入起始位后,SCL按照一贯的要求翻转
从设备接收起始位信息,状态机跳转,等待输入地址信号


从设备到下降沿检测电路,作为状态跳变的控制信号,详情请参考作者之前的文章。IC手撕代码】Verilog边缘检测电路

5.3 地址位置和读写控制

主设备按照从高到低的顺序,依次发送地址位,接收设备,通常,地址位置为7bit,读写选择为1bit。每个从设备只有一个地址号,依靠这个数字来确定主要设备具体与哪个从设备通信

同时,为了确保采样保信号稳定,我们在主设备上当下降边缘放置信号时,将信号放置在下降边缘SDA上,我们在设备方面上升沿采样时
读写控制位若需要主设备将数据发送数据,该位置设置为 若需要主设备通常从设备中接收数据,则将其设置为 1 。写0,读1

5.4 应答位(ACK/NACK)

发送了标题为5.3的8bit后,主机释放对SDA的控制权,由于上拉电阻的作用这个时候SDA默认为高电平从机接管SDA的控制权,假如从机正确的接收了数据,会将SDA拉低,假如没有正确的接收数据,在从设备的控制下,SDA依旧为高电平

读者在这里会发现,同一个SDA,怎么主设备也能控制,从设备也能控制呢?这里涉及到了inout双向端口的相关问题,可以参考作者的这篇文章进行解读和理解通俗易懂的带你解读inout双向端口

5.4.1 正确接收数据(ACK)

正确接收,SDA由从设备拉低

5.4.2 未正确接收数据(NACK)

未正确接收,SDA依旧为高电平

5.5 数据位

当我们成功收到ACK信号后,就可以正式传输数据位了,每一次默认传输一个字节(即8bit),每个字节的传输都需要跟一个应答位(ACK/NACK)

5.6 停止位

SCL先拉高,在SCL为高电平的时候,SDA从低到高,即为停止位,此后,I2C协议重新进入到空闲状态。这里使用了上升沿检测电路,原理同起始位的下降沿检测电路

5.7 总结


首先为起始位S(start),接着传输地址7位SLAVE ADDRESS和1位读写控制信号R/W,再往后8位8位的传输数据位,每个字节紧跟ACK信号,最后为停止位
所有的阴影部分,都是主设备在操作总线,而A对应的ACK,则为从设备在操作总线

六、I2C可配置变量

6.1 传输模式

  • 标准模式(Standard):100kbps
  • 快速模式(Fast):400kbps
  • 快速模式+(Fast-Plus):1Mbps
  • 高速模式(High-speed):3.4Mbps
  • 超快模式(Ultra-Fast):5Mbps(单向传输)

提起不同速度的传输模式,读者首先想到的可能是指SCK的频率,这没有错,但是绝不仅限于此,为了获得更高的传输速率,除开芯片设计工程师外,电路的设计人员需要认真思考诸如“负载电容,上拉电阻的大小”等更偏向于电路设计或模拟设计的内容。

6.2 地址位宽

  • 标准I2C:七位寻址
  • 扩展I2C:十位寻址

每个主设备或者从设备都能对应一个唯一的地址,大多数情况下,7位的地址,已经够用了。但是也可以对其进行扩展,转变为10位地址,多出来的3位地址相当于提供了8倍潜在设备数量,同时,按照NXP2021版的I2C协议规定,10位地址的从设备,和7位地址的从设备,都可以挂在一个总线上,彼此相互兼容,不过,客观来讲,10位寻址的I2C不常用,7位寻址的I2C协议就足够大家日常使用了。

6.3 设备地址

每个主设备与从设备需要设置互不相同的七位地址或十位地址。
等等等等

七、I2C的仲裁机制

7.1 SCL同步问题

总线天生带线与逻辑,即总线的几个输入端,任意有一个拉低,总线表现为低电平,全部位高电平时,总线才是高电平,真值表如下所示。

设备A 设备B 总线逻辑
0 0 0
0 1 0
1 0 0
1 1 1

假设有两个主设备都想拉低SCL信号,Master1先拉低 ,Master2后拉低,那么SCL会按照CLK1的时间来拉低自身(线与逻辑的应用),而假如Master1先拉高,Master2后拉高,SCL又会按照CLK2的时间来拉高自身。

因此:当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理

7.2 SDA仲裁问题

设想一种多主设备,多从设备的情况
假如在空闲状态时,两个主设备先后想要操控I2C总线(相隔时间很短),I2C岂不是会发生错误(数据紊乱等),如何解决这个问题呢?
我们可以采取仲裁机制,同样应用到总线的线与逻辑,在箭头所指的位置,SCL上升沿到来,对SDA上的数据进行采样,结果为0,与DATA2上的数据0相同,与DATA1上的数据1不同,通过这种比较 Master1退出了对总线的控制,而Master2所发送的数据都是正确的,完成仲裁。

八、写在最后

接下来的文章,我们将从零开始使用Verilog与I2C设计一个控制器出来,并进行不那么充分的验证工作,其中具体满足的参数如下

  • 单主设备,单从设备(不涉及仲裁与同步)
  • 全局时钟100Mhz
  • 标准模式(100kbps)传输速率
  • 标准I2C的七位寻址
  • 从设备为EEPROM

九、其他数字IC基础协议解读

9.1 UART协议

  • 【数字IC】深入浅出理解UART
  • 【数字IC】从零开始的Verilog UART设计

9.2 SPI协议

  • 【数字IC】深入浅出理解SPI协议
  • 【数字IC】从零开始的Verilog SPI设计

9.3 I2C协议

  • 【数字IC】深入浅出理解I2C协议

9.4 AXI协议

  • 【AXI】解读AXI协议双向握手机制的原理
  • 【AXI】解读AXI协议中的burst突发传输机制
  • 【AXI】解读AXI协议事务属性(Transaction Attributes)
  • 【AXI】解读AXI协议乱序机制
  • 【AXI】解读AXI协议原子化访问
  • 【AXI】解读AXI协议的额外信号
  • 【AXI】解读AXI协议的低功耗设计
  • 【数字IC】深入浅出理解AXI协议
  • 【数字IC】深入浅出理解AXI-lite协议
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章