最初,我使用的eBus SDK支持I2C的8位寄存器。该SDK不支持I2C的16位寄存器地址。有没有替代这个支持I2C的16位寄存器地址的sdk?
祝福并提前感谢
答案 0 :(得分:4)
根据其他评论,有一些概念要清理。所有I2C器件仅支持7位(8位具有读/写)和10位从器件寻址。然而,这不是该主题中提到的概念。
I2C,根据协议规范,以8位的集合进行读/写,然后从接收数据的设备进行确认(ACK / NACK)。设备如何解释读/写的位可能因设备而异。
根据我的个人经验,我发现通常更大的寄存器地址 - 例如0x1234 - 只是意味着您需要从寄存器0x12和0x34读/写。两个寄存器将保存8位信息,这些信息一起构成十六进制0x1234引用的实际16位字。
正如我所提到的,这可能因设备而异。您可能需要阅读特定I2C器件的数据表/手册,以获取有关其寄存器寻址的更多信息,以确保您从正确的寄存器进行读/写,并将各个8位组合成正确的顺序以提取相应的16位。位字。
答案 1 :(得分:3)
由于MrHappyAsthma完美地指出I2C是以8位传输方式组织的。您必须学习设备的文档。通过写入两个字节来搜索设置内部16位地址,然后再进行读取(如前所述,提到一个或两个字节)。它看起来像这样:
// register read scenario (first 0x12 will be your 8-bit API address, and you attach the 0x34 to the data part of your API)
DO WRITE: |S| slave address |W| write 0x12 | write 0x34 |S| (be careful with ordering)
DO READ: |S| slave address |R| read 1'st byte | read 2'st byte |S| (if 16-bit data)
// register write scenario (first 0x12 will be your 8-bit API address, and send 3-bytes of data, where first byte is your LSB address)
DO WRITE: |S| slave address |W| write 0x12 | write 0x34 | write data 1'st byte | write data 2'st byte |S| (if 16-bit data)
检查您的从属设备的文档。如果您能够使用您的API强制进行此类转移,您可以欺骗设备以满足您的需求。