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)
我有工作的 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)