I2C总线协议理解

i2c总线协议理解

I2C,即Inter-Integrated Circuit,是一种常用的串行通信协议,用于在器件之间——特别是两个或两个以上不同电路之间建立通信。I2C Primer是最常用的I2C。本文将介绍I2C Primer的基本特性和标准,并重点说明在通信实现过程中如何正确使用该协议。从I2C的基本原理出发,我们将介绍其变体子集——系统管理总线(SMBus)和电源管理总线(PMBus)——的可用性及二者的区别,三种协议各有专门的功能。

I2C Primer

使用一条串行数据(SDA)线、一条串行时钟(SCL)线和一个公共接地来承载所有通信,最大程度地减少连接。硬件最重要的注意是在SDA和SCL上加入上拉电阻。I2C器件通过开集或开漏引脚连接到总线,将线路拉低。当没有数据传输时,I2C总线处于高电平空闲状态;线路被被动拉高。要传输数据,须切换线路,即先拉低再释放(又变为高电平)。数据位在时钟下降沿传输。
开漏输出需要一个上拉电阻才能正确输出高电平。上拉电阻连接在输出引脚和高电平所需的输出电压之间。
对于VCC和VDD (5 V)的典型值,4700 Ω是最常用的上拉电阻值。
作为参考,屏蔽2 AWG双绞线电缆的电容范围为100 pF⁄m至240pF⁄m。因此,I2C链路的最大总线长度约为1米(100 kBaud时)或10米(10 kBaud时)。非屏蔽电缆的电容通常要小得多,但只能用在以其他方式加以屏蔽的外壳内。

特性规格
导线2
最大速度标准模式 = 100kbps 快速模式 = 400kbps 高速模式 = 3.4Mbps 超快速模式 = 5Mbps
同步异步并行串行?同步串行
最大节点数1008 有16个保留节点
时序规格表
符号参数单位
fSCLSCL 时钟频率kHz
tHD(STA)(重复)起始条件的保持时间µs
tLOW引脚的低电平周期µs
tHIGH引脚的高电平周期µs
tSU(STA)重复起始条件的建立时间µs
tHD(DAT)数据保持时间µs
tSU(DAT)数据建立时间ns
trSDA 信号的上升时间ns
tfSDA 信号的下降时间ns
tSU(STO)停止条件的建立时间µs

帧格式

开始地址可读写ADKData frameACK

单个主器件和多个节点

I2C使用寻址,所以单个主器件可以控制多个节点。使用7位地址可提供128 (27)个唯一地址。使用10位地址很罕见,但可提供1024 (210)个唯一地址。要将多个节点连接到单个主器件,请使用4.7 kΩ上拉电阻连接这些节点,并将SDA和SCL线连接到VCC。

多个主器件和多个节点

多个主器件可以连接到单个节点或多个节点。如果同一系统中有多个主器件,那么当两个主器件争着在同一时间通过SDA线发送或接收数据时,就会出现问题。

为了解决这个问题,每个主器件在传输消息之前,需要检测SDA线是低电平还是高电平。

如果SDA线为低电平,则说明总线由另一个主器件控制,该主器件应等待。如果SDA线为高电平,则它可以安全传输消息。要将多个主器件连接到多个节点,请按照图13所示,使用4.7 kΩ上拉电阻将SDA和SCL线连接到VCC。
仲裁
若干I2C多主器件可以连接到同一I2C总线并同时运行。通过不断监视SDA和SCL有无起始和停止条件,它们可以确定总线是否空闲。如果总线正忙,主器件将延迟挂起的I2C传输,直至停止条件指示总线再次空闲。

时钟同步

也称为时钟延展。

注意:I2C规范没有为时钟延展规定任何超时条件——也就是说,任何器件都可以根据需要保持SCL。

在I2C通信协议中,时钟速度和信号始终由主器件产生。I2C主器件产生的信号提供主器件和节点连接之间的同步。

在某些情况下,节点或子节点不是以全状态工作,在接收主器件生成的时钟之前,需要减慢速度。这是通过一种称为"时钟延展"的机制来实现的。

在时钟延展期间,为了降低总线速度,允许节点压低时钟。而在主器件方面,在其变为高电平状态后,必须回读时钟信号。然后,它必须等待,直至线路达到高电平状态。

虽然时钟延展是一种常见做法,但它对带宽有影响。使用时钟延展时,共享总线的总带宽可能会显著降低。即使使用这种技术,总线性能仍然必须可靠且快速。有必要考虑使用时钟延展的估计影响,尤其是在多个器件共享I2C总线的情况下。

是否需要时钟延展取决于节点器件的功能。这里有两个例子:

  • 处理器件(如微处理器或微控制器)可能需要额外的时间来处理中断,接收和管理数据,以及执行适当的功能。
  • 较简单的器件(如EEPROM)不在内部处理数据,因此不需要时钟延展来执行任何功能。

SMBus

众所周知,SMBus可用于需要对参数进行关键监控的应用。它最常见的应用是计算机主板和嵌入式系统。对于温度、电源电压、风扇监控和⁄或控制集成芯片,它有额外的监控规范。

SMBus是一种2线总线,类似于飞利浦公司于1980年代开发的I2C总线。两个主要信号是时钟(SMBCLK)和数据(SMBDAT)。I2C Primer和SMBus相互兼容,但存在明显差异,例如:

  • SMBus逻辑电平阈值是固定的,与器件的电源电压不成比例。因此,具有不同电源电压的器件可以在同一Primer上运行。例如,一个SMBus可能具有多个由1.8 V、3.3 V和5 V电源供电的器件。
  • 它们都以最高100 kHz的相同速度运行,但I2C Primer有400 kHz和2 MHz两个版本。
  • SMBus规定了最低时钟速度,并限制了时钟在一个事务中可以延展的量。违反超时限制会导致所有SMBus器件复位其I⁄O逻辑以允许总线重启。这种设计增强了总线的鲁棒性。
  • 二者的超时也不同。I2C Primer没有超时,而SMBus有超时——对于10 kHz最低时钟速度,可以考虑35 ms的超时。
  • 分组差错校验(PEC)最初是为SMBus定义的。在每个事务的末尾添加一个分组错误码字节。
  • 其余的一些差异涉及传输类型、警报线、暂停线、关断或上电。

SMBus器件每次收到其自己的地址时,无论在做什么,它都必须应答(ACK),这是一个明确要求,目的是确保主器件可以准确地判断总线上哪些器件处于活动状态。

所有SMBus事务都通过指定的SMBus协议之一执行。

SMBus还有一个可选信号SMBALERT#,节点器件可以使用该信号快速通知主器件或系统主机,它有主器件需要的信息,例如报告故障情况。

SMBus地址有7个二进制位,通常表示为前4位、后3位以及最后一个字母b,例如0001 110b。这些地址占据总线上一个8位字段的高7位。然而,该字段的最低位另有含义,不属于SMBus地址的范围。

PMBus

除了SMBus之外,还有一个变体PMBus,它是一种开放标准电源管理协议。这种灵活且高度通用的标准允许基于模拟和数字技术的器件之间进行通信,并提供真正的互操作性,由此将能降低电源系统设计的复杂性并缩短产品上市时间。

PMBus用于带有电源控制和管理器件的电源的数字管理。它具有支持电源管理要求的命令和结构。这意味着I2C Primer和PMBus在电气要求和命令语义上是兼容和可互操作的。

电源管理的基本参数之一是过压电平监控,PMBus提供了设置和读取该值的命令。PMBus可以附加在I2C Primer和SMBus的已有特性上,充当现有标准(尤其是SMBus)之上的协议层。

I2C 规范仅描述了2线总线的物理层、时序和流控制。I2C规范没有(像SMBus协议那样)描述消息的格式,也没有描述消息的内容。

PMBus规范是一个完整的电源管理协议。它说明了如何将比特和字节从一个器件传送到另一个器件(即传输)。它还描述了一种命令语言,赋予这些比特和字节以意义。

对于冗余系统,一旦电源安装到系统中,最多有三个信号来设置电源的地址位置:地址2、地址1和地址0。对于非冗余系统,电源器件地址位置应为B0h。

硬件

针对基于I2C VDD的电源和驱动(对于VDD = 3.3 V),电源中的器件应与SMBus 2.0高功率规范兼容。该总线应以3.3 V运行。

电源

电源内部的电路应从备用输出获得电源。对于冗余电源,器件应从"逻辑或"器件的系统侧供电。只要系统中的电源或并联冗余电源接通交流电源,PMBus器件就应处于开启状态。

上拉电阻

电源内部的SCL或SDA线上只能使用弱上拉电阻。主要上拉电阻由系统提供,可以连接到3.3 V或5 V。对于系统设计,主要上拉电阻应位于电源外部,并从备用电源轨获取电源。

数据速度

电源中的PMBus器件应以100 kbps SMBus全速运行,并尽可能避免使用时钟延展,因为它会减慢总线速度。

I2C Primer、SMBus和PMBus有何关系?

SMBus最初开发用于协助电池管理系统,使用I2C硬件,但增加了第二级软件,最终允许器件热插拔,而无需重新启动系统。PMBus扩展了SMBus,定义了一组专门用于管理功率转换器的器件命令,暴露了器件的测量电压、电流、温度等属性。一般而言,I2C Primer、SMBus和PMBus器件可以共享总线而不会发生什么大问题。

I2C、SMB、PMB的优势

  • 仅使用两条线
  • 具有ACK⁄NACK位
  • 广为人知的协议
  • 支持多个主器件和多个节点
  • 硬件不如UART复杂
  • 广泛使用的方法

缺点

  • 数据传输速率比SPI慢
  • 数据帧的大小限制为8位
  • 实现所需的硬件比SPI复杂
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值