0

我正在尝试通过 Linux 上的 SMBus ioctls 访问基于 I2C 的设备。我需要写超过 32 个字节。I2C_SMBUS ioctl 将大小限制为 32 字节。底层驱动程序不支持 I2C_RDWR ioctl 和直接 read()/write() 调用。我也尝试过逐字节读/写,但它对我不起作用。

4

1 回答 1

0

您将需要使用I2C_RDWR. smbus 函数具有硬编码的大小。不仅在用户空间 i2c-dev 驱动程序中,而且在内核函数i2c_smbus_xfer()中,它以union i2c_smbus_data.

SMBUS 规范限制为 32 个字节。因此,如果您的主控器仅设计为支持 SMBUS,则可能不支持一次写入超过 32 个字节。

您需要做的是查看主硬件的规格,看看它是否可以支持 > 32 字节。如果是这样,您可以扩展驱动程序以支持通用 I2C 消息,然后您可以使用 I2C_RDRW。

仅当驱动程序没有特定于 smbus 的操作方法时,才使用通用 I2C xfer 方法(algo->master_xfer()用于 I2C vs algo->smbus_xfer()),因此您可以添加通用 I2C xfer 函数作为尚未实现的操作的后备。通用 I2C xfer 方法不必支持所有可能的 I2C 事务。只支持你需要的那个。

于 2019-12-27T03:49:57.943 回答