没有合适的资源?快使用搜索试试~ 我知道了~
最详细smbus命令解析
3星 · 超过75%的资源 需积分: 50 176 下载量 156 浏览量
2017-11-06
11:07:18
上传
评论 12
收藏 330KB PDF 举报
温馨提示
试读
11页
文档对smbus的单字,单字节,块读写,地址解析命令有详尽的介绍,给不熟悉smbus协议的朋友提供方便
资源推荐
资源详情
资源评论
SMBus 协议总结
1
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 适配器支持改处理。具体详见<文件:Documentation/i2c/functionality>。
各个字符的描述
标识
位数(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_SMBUS_READ_BYTE
SMBus 协议总结
2
SMBus 发送一个字节(i2c_smbus_write_byte())
该函数与读取一个字节的函数功能相反:它向设备发送一个字节。具体参见“读取一个
字节”函数。
S
Addr
Wr
[A]
Data
[A]
P
功能标识:I2C_FUNC_SMBUS_WRITE_BYTE
SMBus 读取字节寄存器(i2c_smbus_read_byte_data())
该函数从设备读取指定了地址的寄存器。Comm 字节指定寄存器地址。
S
Addr
Wr
[A]
Comm
[A]
S
Addr
Rd
[A]
[Data]
NA
P
功能标识:I2C_FUNC_SMBUS_READ_BYTE_DATA
SMBus 读取字寄存器(i2c_smbus_read_word_data())
该函数与读取字节寄存器函数类似,只是读的是 16 位的字。Comm 依旧为指定的字寄
存器地址。
S
Addr
Wr
[A]
Comm
[A]
S
Addr
Rd
[A]
[DataLow]
A
[DataHigh]
NA
P
功能标识:I2C_FUNC_SMBUS_READ_WORD_DATA
注意:还有一个读取字寄存器的函数 i2c_smbus_read_word_swapped,使用于当寄存器
两个字节排列方式不同时的情况。虽然与 SMBus 不兼容,但使用得十分普遍。
SMBus 写字节寄存器(i2c_smbus_write_byte_data())
向指定的字节寄存器写数据,寄存器地址由 Comm 指定。该函数与“读字节寄存器”
函数正好相反。
S
Addr
Wr
[A]
Comm
[A]
Data
[A]
P
功能标识:I2C_FUNC_SMBUS_WRITE_BYTE_DATA
SMBus 写字寄存器(i2c_smbus_write_word_data())
该函数与“读取字寄存器”函数正好相反。
S
Addr
Wr
[A]
Comm
[A]
[DataLow]
A
[DataHigh]
A
P
功能标识:I2C_FUNC_SMBUS_WRITE_WORD_DATA
注意:还有一个写字寄存器的函数 i2c_smbus_write_word_swapped,使用于当寄存器两
个字节排列方式不同时的情况。虽然与 SMBus 不兼容,但使用得十分普遍。
SMBus 字读取写入调用(SMBus Process Call)
向设备寄存器(由 Comm 指定)发送 16 位数据,之后读取其返回值。
S
Addr
[A]
Wr
Comm
[A]
DataLow
[A]
DataHigh
[A]
S
Addr
Rd
[A]
[DataLow]
A
[DataHigh]
NA
P
SMBus 协议总结
3
功能标识:flag: I2C_FUNC_SMBUS_PROC_CALL
SMBus 块读取(i2c_smbus_read_block_data())
该函数向设备读取多于 32 字节的块数据。由 Comm 指定寄存器地址,设备通过 Count
说明要读取的字节数。
S
Addr
Wr
[A]
Comm
[A]
S
Addr
Rd
[A]
[Count]
A
[Data]
A
[Data]
A
...
A
[Data]
NA
P
功能标识:I2C_FUNC_SMBUS_READ_BLOCK_DATA
SMBus 块写入(i2c_smbus_write_block_data())
与“块读取”函数功能相反,Comm 指定需要写入的寄存器地址,Count 说明写入的字
节数。
S
Addr
Wr
[A]
Comm
[A]
Count
[A]
Data
[A]
Data
[A]
...
[A]
Data
[A]
P
功能标识:I2C_FUNC_SMBUS_WRITE_BLOCK_DATA
SMBus 块读写处理调用(SMBus Block Write - Block Read Process Call)
该函数包含于修订版 2.0 中。
该函数通过 Comm 指定寄存器地址,向设备写入 1 到 31 个字节,之后返回 1 到 31 个
字节。
S
Addr
Wr
[A]
Comm
[A]
Count
[A]
Data
[A]
...
S
Addr
Rd
[A]
[Count]
A
[Data]
...
A
P
功能标识:I2C_FUNC_SMBUS_BLOCK_PROC_CALL
SMBus 主机转变通知(SMBus Host Notify)
该函数由设备发送,通知主机即将转变主从角色。设备成为主机,主机成为设备。该函
数与“写 16 位字”函数类似,只是将命令码替换为设备地址。
[S]
[HostAddr]
[Wr]
A
[DevAddr]
A
[DataLow]
A
[DataHigh]
A
[P]
包错误校验(Packet Error Checking (PEC))
包错误校验包含于修订版 1.1 中。该功能在传完数据之后,结束位之前添加 CRC-8 校验
码。
地址解析协议(ARP)
ARP 由修订版 2.0 引入。它是更高一层的协议。ARP 向协议添加了设备枚举及动态地址
剩余10页未读,继续阅读
资源评论
- 悦语2020-07-14垃圾资源,骗积分的,只是很普通的,网上一搜一大把!xtuwz2021-03-02这是用于多个SMBUS设备通讯的,无代码,属于协议格式解析
- easyge2019-06-26骗分,简单的概念介绍而已。xtuwz2019-07-01兄弟,我初学嵌入式时,看着这个把SMBUS协议全部写出来的,怎么会骗你!
- 来自开普勒22b2018-07-25下载学习了
xtuwz
- 粉丝: 8
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功