【发布时间】:2021-05-14 17:16:54
【问题描述】:
我有工作的 C 和 Python3 代码,基于互联网上的简单示例,我可以正确地将数据从我的 Raspberry Pi4 发送到 Atmel SAM-E70 开发套件板。我连接了一个逻辑分析仪来查看正在发送的数据,对于我的 Python3 代码中的每个i2c_write_data_block(),smbus2 代码都会发送 7 位地址,然后是 0x00,然后是我想要的字节流发送。我的 C 代码发送相同的字节流,地址和数据之间没有 0x00。最后,使用 i2ctransfer() 从 shell 发送字节流也可以正常工作:没有额外的字节。
假设,可能是 smbus2 包正在尝试使用 10 位地址,但我找不到任何支持此假设的文档。事实上,我的发现表明 I2C 总线配置是通过配置文件执行的,这使我相信用于在 I2C 总线上进行通信的语言应该无关紧要——它具有相同的配置.
有没有其他人遇到过这种情况?
【问题讨论】:
-
这是 I²C 和 SMBus 协议 AFAIR 之间的区别。但是在 10 位地址的情况下,您应该在某处设置或重置一些位来触发它。我建议阅读文档。
-
据我所知,这些设备都设置为 7 位寻址。但这可能是 I2C 和 SMBUS 的差异。我将尝试使用不同的 I2C 封装。
标签: i2c raspberry-pi4 smbus