首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux SMBus块事务类型

Linux SMBus块事务类型
EN

Stack Overflow用户
提问于 2020-05-05 00:55:58
回答 1查看 555关注 0票数 0

最新的SMBus规范2014年12月20日只显示了一种块写/读类型(不包括块进程调用):

代码语言:javascript
复制
6.5.7 Block Write/Read
Write: Address(Wr), Command, Count = N, Byte 1, Byte 2, ..., Byte N [, PEC]
Read:  Address(Wr), Command, Address(Rd), Count = N, Byte 1, Byte 2, ..., Byte N [, PEC]

但是,查看Linux用户空间界面,有3种块事务类型可用于来自uapi/linux/i2c.h的ioctl uapi/linux/i2c.h

代码语言:javascript
复制
#define I2C_SMBUS_BLOCK_DATA        5
#define I2C_SMBUS_I2C_BLOCK_BROKEN  6
#define I2C_SMBUS_I2C_BLOCK_DATA    8

按照*下的代码,它将委托给i2c_algorithm中的smbus_xfer/master_xfer(如果模拟的话),这是特定于适配器/设备的。

1.所有这些事务类型是否都遵循SMBus 3.0的块线规范?

2.我如何决定我需要使用哪一种?

我正在Raspbian /Linux 10上创建一个Java JNA接口(buster)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-16 17:16:15

  1. 所有这些事务类型是否都遵循SMBus 3.0的块线规范?

目前,我正在编写答案,Linux内核中的I2C模块仍然不支持SMBus 3.0/3.1。它实现了SMBus 2.0通信。

对于这三种类型-这是无法回答的。我想不会吧。要了解这些命令是如何工作的,请查看KMD源代码。例如,通过以下注释将I2C_SMBUS_I2C_BLOCK_BROKEN转换为I2C_SMBUS_I2C_BLOCK_DATA:

代码语言:javascript
复制
        /* Convert old I2C block commands to the new
       convention. This preserves binary compatibility. */

以及I2C_SMBUS_I2C_BLOCK_DATA是否遵循块数据协议--这取决于用户。执行协议的命令是I2C_SMBUS_BLOCK_DATA。

  1. 我该怎么决定该用哪一种呢?

如果您只想使用块协议,那么只需使用I2C_SMBUS_BLOCK_DATA。

如果您想要更多的控制,或者想要克服SMBus 2.0的限制,就必须使用I2C_SMBUS_I2C_BLOCK_DATA。尽管在这些情况下,您可能不得不手动构造SMBus消息,因为I2C_SMBUS_I2C_BLOCK_DATA仍然对您有很大的限制--您将得到一个最大消息长度的字节,但它仍远未达到255。

如果您是按照SMBus 1规范编写的,则在适当时使用I2C_SMBUS_I2C_BLOCK_BROKEN。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61604053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档