3
A
回答
4
有几个概念基础上的其他意见清理。所有的I2C器件仅支持7位(8个具有读/写)和10位从寻址。然而,这并不是在主题中提出的概念。
I2C根据协议规范,以8位组读取/写入,然后接收来自接收数据的设备的确认(ACK/NACK)。设备如何解读读取/写入的位可能因设备而异。
根据我个人的经验,我发现通常一个较大的寄存器地址 - 例如0x1234 - 仅仅意味着您需要从寄存器0x12和0x34读/写。两个寄存器将保存8位信息,这些信息一起构成由十六进制0x1234引用的实际16位字。
正如我所提到的,每个设备可能会有所不同。您可能需要通读针对您的特定I2C器件的数据手册/手册,以获取有关其寄存器寻址的更多信息,以确保您从正确的寄存器读取/写入,并将各个8位组合成正确的顺序以提取相应的16位位字。
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来强制执行此类传输,则可以欺骗该设备以向您提供所需的内容。
相关问题
- 1. I2C地址格式
- 2. 在linux和gcc中支持16位wchar_t
- 3. Java 16位字符如何支持Unicode?
- 4. 地址簿jQuery的支持
- 5. npa201 i2c地址变化
- 6. ds1820地址,指针和I2C
- 7. 从i2c地址访问值
- 8. 以16位模式加载地址
- 9. 从16位PE读取内存地址
- 10. grep的Unicode的支持16
- 11. SNMP ping支持IPv6地址
- 12. Arduino上的不同I2C地址?
- 13. 没有I2c通信的从站地址
- 14. Android Widget Shadow支持API 16
- 15. 从C语言地址读取8位或16位或32位
- 16. 16位阵列需要5位地址(Xilinx Vivado HLS)?
- 17. 把一个16位寄存器为8位地址在装配
- 18. 绑定:协议地址族不支持
- 19. 不支持地址族异常重现
- 20. 协议不支持地址族? sendto
- 21. Jetty Webservice - 不支持https协议地址
- 22. Android Wi-Fi:“地址家族不支持”
- 23. 如何将地址解析器地址获取到支持bean?
- 24. 支持超过API 16的库吗?
- 25. 什么导致16位体系结构上的地址错误?
- 26. CA65:从16位计算的地址 '范围错误'
- 27. 如何计算16位地址指针中的页面帧
- 28. X11:如何正确支持每像素16位显示
- 29. 不支持16位应用程序使用命令提示符
- 30. 在飞PDF创建16位颜色深度PNG支持在PHP
I2C是嵌入式总线,可以在许多不同的芯片上找到。它甚至没有8位寻址(最后一位不是地址位,而是R/W位)。我很困惑你的问题实际上是什么。 – MSalters
如果我理解正确,您想通过I2C读取16位数据?通常设备将只使用2个寄存器来存储16位。 I.E.寄存器0x00将是Data的最低有效位(LSB)。寄存器0x01将是Data的最高有效位(MSB)。您可以将这些附加在一起以获得完整的16位寄存器。你与哪个设备进行通信,并且我理解正确吗? – MrHappyAsthma
@ MSalters:对不起,我很抱歉。我有一个设备,我需要通过I2C总线读取它的寄存器。这些寄存器具有由16位表示的地址(例如0x1234)。这些寄存器的值是8位或16位(存储在一个或两个寄存器中)。 –