微控制器 I2C操作筆記 以 AT24C04為例

2021-07-23 14:46:17 字數 1030 閱讀 8520



對於大多數工程師而言,i2c永遠是乙個頭疼的問題。相比uart和spi而言,i2c的時序要複雜一些,i2c組合變化也豐富一些。在這裡以at24c04為例說明i2c使用過程中的一些注意點。

圖 at24c04操作示意圖

示意圖說明:示意圖分闡述了4種不同的操作方式,例如寫單個儲存單元,寫多個儲存單元,讀單個儲存單元和寫單個儲存單元。對於單個操作而言,上部為mcu通過i2c輸出的相關指令,下部為i2c裝置的響應。例如寫單個儲存單元操作時,mcu發出i2c啟動,裝置位址,寫標誌位等,而i2c裝置輸出多個ack。

i2c裝置的操作可分為寫單個儲存位元組,寫多個儲存位元組,讀單個儲存位元組和讀多個儲存位元組。相對於at24c04而言,這些讀寫動作相對於內部的儲存單元而言,對於其他的具備i2c介面的ad或感測器而言,儲存單元變成了暫存器單元。雖然存在概念上的差別,但是其操作原理確實一樣的。

在以上4種情況中,無應答為mcu發出,無應答意為mcu不需要從機輸出資料,mcu將會停止本次i2c操作。需要說明的是,無應答並不是一種異常情況。

這一點往往被忽略,一般情況下認為在i2c啟動訊號之後的位元組為i2c從機位址(7位)。對於at24c04而言,內部具有4kb儲存位,合計512位元組。若需要訪問512位元組內容,總共需要9根位址線(8位寬度),那麼上圖中的儲存位址(8位長度)顯然還差了一位,那麼就需要從裝置位址中「借」1位,這就使得at24c04具有兩個i2c位址,例如0x50和0x51。

相對於at24c04而言,儲存位址佔1個位元組。若換成其他i2c裝置,例如adxl345,儲存位址被暫存器位址替代即可,其他操作方式相似。但是像at24c32或at24c64這樣的大容量eeprom,則儲存位址需要2位元組描述,也就意味著需要連續傳送兩個位元組位址資訊且高位元組在前。其他像bh1750這樣的光照晶元,儲存位址被具體的操作命令替代,使用i2c裝置時需要因地制宜,切不可照搬教條。

i2c裝置有很多種,若掌握基本原理,便可見招拆招,那是i2c匯流排就不那麼難了。 【

維基百科i2c】

微控制器的I2C常規知識

i2c有8位資料,為7位選址 r w。當scl為高電平時,sda從高電平向低電平切換,為i2c的起始條件。當scl為低電平時,sda由低電平向高電平切換,為i2c的停止條件。scl保持低電平,主機則處於等待狀態。ack為響應,傳送完乙個資料後等待響應。從i2c接收乙個位元組 1 初始化 i2c st...

微控制器之I2C匯流排原理

採用序列匯流排技術可以大大簡化硬體的設計,體積減少,可靠性高。常見的匯流排,i2c inter ic bus 單匯流排,spi匯流排。i2c序列匯流排 1 進行多主機通訊 2 兩根雙線訊號線,一根資料線sda,另外一根時鐘線scl,接上拉電阻,匯流排空閒為高電平。只要有低電平,匯流排就會被拉低電平。...

微控制器 I2C匯流排通訊程式

為保證資料的可靠性,i2c匯流排的資料傳送有嚴格的時序要求。i2c匯流排的起始訊號 終止訊號 傳送 0 及傳送 i2c匯流排寫操作,待寫入位元組dat,返回值為應答狀態 i2c sda 1 8位資料傳送完後,主機釋放sda,以檢測從機應答 i2cdelay i2c scl 1 拉高scl ack i...