目录
1. 概述
系统管理总线(SMBus)是一个双线接口,通过它,各种系统组件芯片和设备可以相互通信,也可以与系统的其余部分进行通信。它基于I2C总线的工作原理。
SMBus为系统和电源管理相关任务提供控制总线。系统可以使用SMBus将消息传递到设备和设备之间,而不使用单独的控制线。可减少引脚数。
本文档描述了SMBus设备使用的电气特性、网络控制约定和通信协议。这些可以被认为存在于七层OSI网络模型的前三层,即物理层、数据链路层和网络层。通常在OSI模型的更高层实现的功能超出了本文档的范围。
SMBus的最初目的是定义智能电池、电池充电器和与系统其余部分通信的微控制器之间的通信链路。然而,SMBus也可以用于连接各种各样的设备,包括电源相关设备、系统传感器、eeprom、通信设备等等。
2. SMBus拓扑图
2.1 SMBus 与 I2C 的相似之处
● 双线制总线协议( 1 个时钟总线, 1 个数据总线) + 可选 SMBus 报警线
● 主从通信,主器件提供时钟
● 多主器件功能
●SMBus 数据格式与 I2C 7 位地址格式相似
2.2 SMBus 与 I2C 之间的差异
3. 报错误检查
SMBus 1.1版本引入了数据包错误检查机制,以提高通信的可靠性和健壮性。SMBus设备可选配置报文错误检测功能,但参与ARP进程的设备必须配置。实现包错误检查机制的设备必须能够与主机和其他不实现包错误检查机制的设备进行通信。数据包错误检查(Packet Error Checking),无论何时适用,都是通过附加一个消息传输结束时的包错误码(PEC)。大多数命令协议有两种变体:一种带有PEC字节,另一种没有。PEC是一个CRC-8错误检查字节,它是在所有消息字节上计算的。
4. SMBus协议分析
SMBus采用固定电压电平,分别在总线上定义逻辑0(最大0.8V)和逻辑1(最小2.1V)。出现在SMBDAT线上的数据在时钟的“高”周期必须是稳定的,而数据只能在时钟的“低”周期改变状态。
4.1 Quick command
在快速命令中,这条命令本身并不发送或者接收数据。图中的R/W本意是读或者写,但R/W位实际可用于简单地打开或关闭设备功能,或者启用或禁止低功耗待机模式。
4.2 Send byte
向从设备发送一个字节,从设备地址通过7bit 的address体现,Wr为写数据,A为ack响应位,响应位通过从设备回复。接着是8bit数据信息,最后是停止位。
4.3 Receive byte
接收一个字节数据 。接收字节数据和发送类似,唯一区别就是数据方向。灰色的8bit data byte为从机返回主机需要的数据信息
4.4 Write byte/word
与发送一个字节数据不同,中间会先发送8bit的command code,然后再发送一个字节的数据。这里的command code通常为芯片内部的寄存器地址。
4.5 Read byte/word
主机首先向从设备写入命令,然后立即在该命令之后使用重复的START条件表示从该设备的地址读取。然后从服务器返回一个或两个字节的数据。
4.6 Block Read/Block Write
块读或块写以从地址开头,然后是R/W条件。在命令代码之后,主机发出一个数据字节,该字节描述消息中接下来还有多少字节。块读与块写的不同之处在于,为了改变传输方向的需要,存在一个重复的START。