I2C操作筆記——以 AT24C04爲例

   轉載於:http://blog.csdn.net/xukai871105/article/details/15028117

   1.前言

    對於大多數工程師而言,I2C永遠是一個頭疼的問題。相比UART和SPI而言,I2C的時序要複雜一些,I2C組合變化也豐富一些。在這裏以AT24C04爲例說明I2C使用過程中的一些注意點。

2.AT24C04操作示意圖


圖 AT24C04操作示意圖
示意圖說明:示意圖分闡述了4種不同的操作方式,例如寫單個存儲單元,寫多個存儲單元,讀單個存儲單元和寫單個存儲單元。對於單個操作而言,上部爲MCU通過I2C輸出的相關指令,下部爲I2C設備的響應。例如寫單個存儲單元操作時,MCU發出I2C啓動,設備地址,寫標誌位等,而I2C設備輸出多個ACK。

3.若干說明

3.1 基本操作方式

I2C設備的操作可分爲寫單個存儲字節,寫多個存儲字節,讀單個存儲字節和讀多個存儲字節。相對於AT24C04而言,這些讀寫動作相對於內部的存儲單元而言,對於其他的具備I2C接口的AD或傳感器而言,存儲單元變成了寄存器單元。雖然存在概念上的差別,但是其操作原理確實一樣的。

3.2 無應答

在以上4種情況中,無應答爲MCU發出,無應答意爲MCU不需要從機輸出數據,MCU將會停止本次I2C操作。需要說明的是,無應答並不是一種異常情況。

3.3 I2C設備並不只有一個設備地址

這一點往往被忽略,一般情況下認爲在I2C啓動信號之後的字節爲I2C從機地址(7位)。對於AT24C04而言,內部具有4Kb存儲位,合計512字節。若需要訪問512字節內容,總共需要9根地址線(8位寬度),那麼上圖中的存儲地址(8位長度)顯然還差了一位,那麼就需要從設備地址中“借”1位,這就使得AT24C04具有兩個I2C地址,例如0x50和0x51。

3.4 存儲地址

相對於AT24C04而言,存儲地址佔1個字節。若換成其他I2C設備,例如ADXL345,存儲地址被寄存器地址替代即可,其他操作方式相似。但是像AT24C32或AT24C64這樣的大容量EEPROM,則存儲地址需要2字節描述,也就意味着需要連續發送兩個字節地址信息且高字節在前。其他像BH1750這樣的光照芯片,存儲地址被具體的操作命令替代,使用I2C設備時需要因地制宜,切不可照搬教條。

3.5 連續讀和連續寫限制

AT24C04中存在頁的概念,一頁的大小爲8字節,若果在單頁的範圍內,存儲地址累加,若超過該頁的最大地址,存儲地址回到頁開始處。所以對於連續讀和連續寫而言,最大的操作字節數爲8。若需要操作的字節內容超過8字節,則需要進行翻頁操作,即寫入下一頁的起始存儲地址。
發佈了13 篇原創文章 · 獲贊 79 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章