2013-07-16 79 views
3

最初,我使用了支持I2C的8位寄存器的eBus SDK。該SDK不支持I2C的16位寄存器地址。這個sdk是否有其他支持I2C的16位寄存器地址?支持16位地址的I2c

最良好的祝願,並感謝您提前

+3

I2C是嵌入式總線,可以在許多不同的芯片上找到。它甚至沒有8位尋址(最後一位不是地址位,而是R/W位)。我很困惑你的問題實際上是什麼。 – MSalters

+3

如果我理解正確,您想通過I2C讀取16位數據?通常設備將只使用2個寄存器來存儲16位。 I.E.寄存器0x00將是Data的最低有效位(LSB)。寄存器0x01將是Data的最高有效位(MSB)。您可以將這些附加在一起以獲得完整的16位寄存器。你與哪個設備進行通信,並且我理解正確嗎? – MrHappyAsthma

+0

@ MSalters:對不起,我很抱歉。我有一個設備,我需要通過I2C總線讀取它的寄存器。這些寄存器具有由16位表示的地址(例如0x1234)。這些寄存器的值是8位或16位(存儲在一個或兩個寄存器中)。 –

回答

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來強制執行此類傳輸,則可以欺騙該設備以向您提供所需的內容。