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位(存儲在一個或兩個寄存器中)。 –