0

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

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

有人遇到过这种情况么?

4

1 回答 1

1

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

例子:

bus = SMBus(1)
address = 4
data = 'Some message'.encode()
msg = i2c_msg.write(address, data)
bus.i2c_rdwr(msg)
于 2021-12-03T11:56:53.093 回答