2014 年 12 月 20 日的最新 SMBus 规范V3.0仅显示一种类型的块写入/读取(不包括块进程调用):
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 中的 ioctlI2C_SMBUS
一起使用:
#define I2C_SMBUS_BLOCK_DATA 5
#define I2C_SMBUS_I2C_BLOCK_BROKEN 6
#define I2C_SMBUS_I2C_BLOCK_DATA 8
在drivers/i2c/*下的代码之后,它委托给smbus_xfer
/ master_xfer
(如果模拟) in i2c_algorithm
,这是特定于适配器/设备的。
1. 所有这些事务类型最终都遵循 SMBus 3.0 的块连线规范吗?
2. 我将如何决定我需要使用哪一个?
我正在 Raspbian GNU/Linux 10 (buster) 上创建 Java JNA 接口