簡 介:本文通過實驗探究INA226芯片I2C地址的動態(tài)配置機制。測試表明,INA226并非在I2C起始信號后立即鎖定地址,而是在完整通信周期內持續(xù)采樣地址線狀態(tài)。通過設計帶模擬開關的測試電路,動態(tài)切換A0/A1引腳連接(GND/VCC/SDA/SCL),發(fā)現(xiàn)地址最終由通信過程中的電平狀態(tài)決定。實驗顯示,若在通信中改變地址線連接,可能導致地址誤判為0x4F(對應SCL連接),說明INA226的地址采樣過程貫穿整個通信周期。該發(fā)現(xiàn)為多設備系統(tǒng)中動態(tài)配置INA226地址提供了重要參考。
關鍵詞:INA226,I2C
??對于電源檢測芯片 INA226 它的 I2C總線地址是由 A0,A1兩個管腳的連接狀態(tài)決定的。總共有16個可以配置的地址。它的數(shù)據(jù)手冊中說明,它是在每一次 I2C 通訊開始之后就根據(jù) A0,A1連接狀況來確定這次 I2C總線的地址。那么問題來了,究竟它是在哪一個時間片段之內最終完成了 I2C地址的確定呢。下面通過設計一個模擬門開關來動態(tài)的切換 A0,A1的配置,然后檢測 INA226 的實際的 I2C 地址,最終查看一下,INA226 的 I2C 地址究竟是在什么時間階段確定的。

??首先設計檢測電路板。將 INA226的設置管腳 A0、A1,以及I2C總線引至外部端口,由控制端口進行電子切換。增加一個局部的 OLED 顯示檢測 I2C 地址。電路板上的 INA226作為地址檢測對象。通過外部控制電路板來確定究竟 INA226 地址確定時間階段。

??鋪設單面PCB,適合一分鐘制板。一分鐘之后得到測試電路板。焊接電路板,清洗之后進行測試。相應的 INA226 訪問子程序昨天已經測試完畢。重新抑制 OLED 子程序。這樣可以顯示 INA226 檢測到的 I2C 地址。首先將 A0、A1與SDA連接。在 OLED上顯示檢測到的 I2C地址。接下來,設計模擬門切換開關。通過另外一個單片機通過控制電子模擬門來設置A0,A1的連接關系。這樣便可以測試不同的時序對應的 I2C地址了。

??切換 A0,A1使用到了另外一個單片機電路板。它使用兩片 CD4051來切換A0,A1,通過這個模擬開關,分別選擇 +5V, GND,SDA,以及 SCL。這個選擇過程可以精確控制在 I2C總線通訊的幾個階段。使用原邊的 UART端口控制模擬門切換過程,只不過將這兩個通訊端口當做 IO 來使用,這樣可以利用測試電路板來控制 A0,A1的設置。鋪設單面PCB,一分鐘之后得到測試電路板。焊接之后進行測試。

??測試程序比較簡單。首先讓A0,A1分別選擇 GND,+5V, SDA,SCL四種情況。根據(jù) INA226的數(shù)據(jù)手冊可以知道,這四種情況分別對應的 I2C 地址為 0x40, 0x45, 0x4a, 0x4f。通過測試可以驗證這些都正常。由此說明通過外部的模擬開關來設置 INA226 的地址是可以的。也就是現(xiàn)在靜態(tài)的設置能夠使得 INA226 被正確的識別。

??現(xiàn)在到了激動人心的測試階段了。在 I2C開始之前,設置 A0,A1都連接到SDA,對應的I2C地址為 0x4a。當 I2C 總線發(fā)送了 開始條件之后,將 A0,A1 都切換到GND,對應地址為 0x40。查看一下在這種情況下,究竟檢測到的 INA226 的地址是多少?設置控制選擇兩個IO口都是高電平,啟動 I2C總線。接下來是將兩個IO口都置為低電平。現(xiàn)在是將這兩個語句都注釋掉,可以看到檢測到的 INA226 都是 0x4a,對應對應著 A0,A1都連接到 SDA。將兩個IO置為低電平的語句打開。也就是在I2C總線啟動之后,將 A0,A1 都連接到 GND。現(xiàn)在看來,檢測的結果出現(xiàn)了變化。檢測到 INA226 的 I2C地址為 0x4f,意味著 對應 A0,A1都等效連接在 SCL上,并不是 SDA上。特別是,有的時候檢測不到 INA226。由此可以知道INA226 的 I2C地址并不是在 I2C 啟動條件之后就確定下來的。



??如果在將 A0,A1的設置改變拖延到發(fā)送結束,在停止通訊之間,這樣實際上就對 I2C通訊就沒有影響了。INA226可以正確檢測到正確的地址。

??下面仍然在開始的時候,設置A0,A1都連接在 SDA,對應的地址為 0x4A,在發(fā)送地址碼的過程中,將 A0,A1 都連接在GND,此時檢測到的地址穩(wěn)定在 0x4F,對應 A0,A1都連接在SCL。如果在開始的時候將A0,A1 都連接在 VCC,對應的地址為 0x45。在發(fā)送 開始條件之后,將 A0,A1都連接在 GND,此時對應的地址為 0x40。似乎說明此時 INA226 是按照開始之后的狀態(tài)來設置后面的 地址的。但是,如果開始之后將 A0,A1連接到 SDA,但實際上檢測到的地址為 0x4F,對應A0,A1都連接到SCL。

本文討論了 INA226 這個芯片的 I2C 地址形成的機制。按照 INA226 數(shù)據(jù)手冊介紹,它是在每一次通訊的時候都會檢測 A0,A1管腳連接的狀態(tài),從而確定這一次通訊的地址。按理說,I2C通訊每一次都是有 開始條件來說明通訊的開始。那么是否在 I2C 總線開始之后修改 A0,A1的狀態(tài),就可以改變對應的地址了呢??但是實際發(fā)現(xiàn),情況并不是這么簡單。到現(xiàn)在為止,還無法確定究竟 INA226 在哪個時間片段內確定了最終的通訊地址。

INA226測量 ADC 性能測試: https://zhuoqing.blog.csdn.net/article/details/158069119?spm=1011.2415.3001.5331
[2]測試 INA226的 I2C 地址問題:如何只使用兩個地址線設定 16個不同的I2C地址?: https://zhuoqing.blog.csdn.net/article/details/158041571?spm=1011.2415.3001.5331
[3]INA226 36V,16-BIT, Ultra-Precise I2C Output Current Voltage and Power Monitor with Alert: https://www.ti.com/lit/ds/symlink/ina226.pdf?ts=1770876134950&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FINA226%253Flitpdf%253Dsboa167