SMBus 协议总结
SMBus 协议总结
本文将对SMBUS 协议进行总结。本文针对该协议的所有修订版(包括1.0,1.1,2.0)。具
体的协议特性将在本文最后进行介绍。
一些I2C 适配器仅仅兼容SMBus 协议 (System Management Bus,系统管理总线)。而
SMBus 只是I2C 协议的子集。幸运的是,大部分设备都使用相同的子集,故可以将它们放置
同一个SMBus 中。
如果你为一个I2C 设备写驱动程序,而该设备仅仅使用I2C 协议的子集,那么推荐你尽
可能使用SMBus 协议的命令。这样这个驱动程序既可以在SMBus 适配器上使用,也可以在
I2C 适配器上使用(当在I2C 适配器上时,SMBus 格式会自动转换为I2C 格式,而SMBus 适
配器大多无法处理单纯的I2C 格式)。
下文将列举 SMBus 的操作时序,以及执行该时序的函数。注意,一下使用的函数名称
可能会因不同的SMBus 协议规格而不尽相同。
每个处理都对应一个标识。在调用处理函数是,驱动程序应该总要检查一次对应的标识
以确保底层的I2C 适配器支持改处理。具体详见 。
各个字符的描述
标识 位数(bit) 描述
S 1 起始位
P 1 停止位
Rd/Wr 1 读写标志位(1:读;0 :写)
A ,NA 1 响应,不响应位
Addr 7 I2C 设备地址,可能扩充为10
位
Comm 8 命令字节,通常是设备内寄存
器的地址
Data 8 数据字节,有时分为高、低两
个字节的16 位数据
Count 8 描述块操作长度的数据字节
[..] 由I2C 设备发送,主机接收的
字节
SMBus 快速命令(SMBus Quick Command )
向设备发送一个位,即读写位。
A Addr Rd/Wr [A] P
功能标识:I2C_FUNC_SMBUS_QUICK
SMBus 读取一个字节(i2c_smbus_read_byte() )
向设备读取一个字节,没有说明读取的寄存器地址。一些设备十分简单,仅通过该命令
即可实现操作,对其他设备,可以在使用SMBus 指定了寄存器地址后使用该函数实现对同
一个寄存器的重复读取。
S Addr Rd [A] [Data] NA P
功能标识:I2C_FUNC_S