Raspberry Pi 4: Python3 smbus2 在所有 I2C 数据写入前加上 0x00

Raspberry Pi 4: Python3 smbus2 prepends 0x00 to all I2C data writes

我有工作的 C 和 Python3 代码,基于互联网上的简单示例,我可以在其中正确地将数据从我的 Raspberry Pi4 发送到 Atmel SAM-E70 开发套件板。我连接了一个逻辑分析仪来查看正在发送的数据,对于我的 Python3 代码中的每个 i2c_write_data_block(),smbus2 代码发送 7 位地址,然后是 0x00,然后是我要发送的字节流。我的 C 代码,发送相同的字节流,地址和数据之间没有 0x00。最后,使用 shell 中的 i2ctransfer() 发送字节流也按预期工作:没有额外的字节。

假设,可能是 smbus2 包试图使用 10 位地址,但我找不到任何支持该假设的文档。事实上,我发现 I2C 总线配置是通过配置文件执行的,这让我相信用于在 I2C 总线上通信的语言无关紧要——它应该具有相同的配置.

有其他人遇到过这个吗?

我在使用 smbus2 i2c_write_data_block() 函数时注意到了同样的事情。 要避免发送 0x00 起始字节,请使用 i2c_rdwr() 函数。

示例:

bus = SMBus(1)
address = 4
data = 'Some message'.encode()
msg = i2c_msg.write(address, data)
bus.i2c_rdwr(msg)