接口协议(5) - SMBus
SMBus(System Management Bus),系统管理总线,是一种双线总线,它源自I2C总线,属于I2C总线的子集,用于主板上的低带宽设备进行通信,尤其是与电源相关的芯片,像可充电电源子子系统、温度、风扇、翻盖开关、时钟发生器、RGB照明等。MSB大端通信。
1. 接口
(1).SMBCLK:时钟线,由HOST端主机提供;
(2).SMBDAT:数据线,双向通信线;
2. 通信速率
10KHz~100KHz,SMBus 3.0将其扩展到400KHz和1MHz。
3. 从机地址
3.1 7bit
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | r/w |
3.2 10bit
start | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
x | 1 | 1 | 1 | 1 | 0 | bit9 | bit8 | r/w | ack | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | ack |
4. 起始信号
SCL高电平,SDA电平由高到低。
5. 结束信号
SCL高电平,SDA电平由低到高。
6. 应答
第9个脉冲带来之前将SDA设置低电平,并且在时钟线为高电平期间保持SDA为低电平。
7. 非应答
第9个脉冲带来之前将SDA设置高电平,并且在时钟线为高电平期间保持SDA为高电平。
8. 写时许
9. 读时许
10. SMBus与I2C的区别
10.1 输入电压
混合器件时,I²C规范将输入电平定义为电源电压VDD的30%和70%,可以是5 V、3.3 V或其他值。SMBus不是将总线输入电平与VDD相关联,而是将它们定义为固定在0.8和2.1V. SMBus 2.0支持3至5V的VDD。SMBus 3.0支持1.8至5V的VDD。
10.2 频率
SMBus时钟的定义范围为10–100kHz,而I²C可为0–100kHz、0–400kHz、0–1MHz和0–3.4 MHz,具体取决于模式。这意味着运行频率低于10kHz的I²C总线不符合SMBus标准,因为SMBus器件可能会超时。但是,许多SMBus设备将支持较低的频率。
SMBus 3.0增加了400kHz和1MHz总线速度。
10.3 时间
- SMBus定义时钟低超时,超时为35毫秒。I²C未指定任何超时限制。
- SMBus指定TLOW:SEXT作为从设备的累积时钟低扩展时间。I²C没有类似的规格。
- SMBus指定TLOW:MEXT作为主设备的累积时钟低扩展时间。同样,I²C没有类似的规格。
- SMBus定义总线信号的上升和下降时间。I²C没有。
- SMBus超时规范并不排除I²C器件在SMBus上可靠协作。设计人员有责任确保I²C器件不会违反这些总线时序参数。
10.4 ACK和NACK的使用
NACK总线信令的使用存在以下差异:在I²C中,允许从接收方不确认从地址,例如,如果它因为执行某些实时任务而无法接收。SMBus要求设备始终确认自己的地址,作为检测总线上是否存在可移动设备(电池、扩展坞等)的机制。
I²C指定从设备虽然可以确认自己的地址,但可能会在传输的某个时间决定它不能再接收任何数据字节。I²C指定器件可以通过在后面的第一个字节上生成不确认来指示这一点。
除了指示从站的设备繁忙状态外,SMBus还使用NACK机制来指示接收无效命令或数据。由于这种情况可能发生在传输的最后一个字节上,因此要求SMBus设备能够在每个字节传输之后和事务完成之前生成未确认。这很重要,因为SMBus不提供任何其他重新发送信令。NACK 信令使用的这种差异对SMBus端口的特定实现有影响,尤其是在处理关键系统数据(如SMBus主机和SBS组件)的设备中。
10.5 SMBus协议
SMBus上的每个消息事务都遵循定义的SMBus协议之一的格式。SMBus协议是I²C规范中定义的数据传输格式的子集。可通过SMBus协议之一访问的I²C设备与SMBus规范兼容。不符合这些协议的I²C设备无法通过SMBus和高级配置和电源接口(ACPI)规范中定义的标准方法访问。
10.6 地址解析协议
SMBus使用I²C硬件和I²C硬件寻址,但增加了用于构建特殊系统的二级软件。特别是其规范包括可以进行动态地址分配的地址解析协议。 硬件和软件的动态重新配置允许总线设备“热插拔”并立即使用,无需重新启动系统。设备会自动识别并分配唯一地址。这一优势实现了即插即用的用户界面。在这两种协议中,系统主机和系统中可以具有主站或从站名称和功能的所有其他设备之间都进行了非常有用的区分。
10.7 超时功能
SMBus具有超时功能,如果通信时间过长,该功能将重置设备。 这解释了10 kHz的最小时钟频率,以防止锁定总线。I²C可以是“DC”总线,这意味着从器件在主器件访问时执行某些例程时会延长主时钟。这将通知主站从站正忙,但不想失去通信。从设备将允许在其任务完成后继续。I²C总线协议对延迟时间没有限制,而对于SMBus系统,延迟限制为35ms。SMBus协议只是假设如果某些时间过长,则意味着总线上存在问题,并且所有设备都必须重置才能清除此模式。然后不允许从设备将时钟保持低电平太久。
10.8 数据包错误检查(PEC)
SMBus 1.1及更高版本定义可选的数据包错误检查(Packet Error Checking, PEC)。在该模式下,在每个事务的末尾附加一个PEC(数据包错误代码)字节。字节计算为CRC-8校验和,计算整个消息,包括地址和读/写位。使用的多项式是x^8+x^2+x+1(CRC-8-ATM HEC 算法,初始化为零)。
10.9 SMBALERT#
SMBus有一个额外的可选共享中断信号,称为SMBALERT#,从站可以使用它来告诉主机向其从站询问感兴趣的事件。 SMBus还定义了不太常见的“主机通知协议”,提供类似的通知,但传递更多数据并构建在I²C多主站模式之上。
11. 读写示例