EEPROM(AT24C16)頁寫演算法

2021-08-10 21:05:17 字數 897 閱讀 9584

學習微控制器或者從事嵌入式開發的,對於eeprom絕不會陌生,尤其的24系列的eeprom很是經典,或者與此相容的fram系列,如at24c02、at24c16、fm24c16等。 驅動起這個系列的eeprom,可以說是沒有任何難點,各類教程、原始碼、驅動都可以輕鬆找到並作稍微改動即可使用。但是,對於使用技巧方面,大多的教程並不會提及,而只是作為學習「入門」的乙個途徑,真正在實際產品中使用,還需自身的經驗去摸索改善。

驅動起一片eeprom,實現的功能不外乎就是讀、寫。在寫過程中,有乙個「頁寫」功能,如果是大量資料寫入,採用「頁寫」功能會大大提高效率。記得以前學習微控制器的時候,遵循的是某開發板的教程,其中的「頁寫」演算法過於複雜,包括現在看來依然是比較累贅,所以已經把好多人搞懵逼。而且網路上大部分的原始碼幾乎都是大同小異,質量不算高。大體思路是這樣的:用邏輯語句實現,首先檢查寫入總資料位元組數是否大於一頁,然後進行下一步檢查,開始位址是否為頁的開始,剩下未滿一頁的資料怎樣處理等等。邏輯上來說,只要多閱讀、畫個邏輯流程圖分析,這樣處理還是非常好理解的,但顯得過於累贅。邏輯用數學語句描述,則是演算法,下面則是這樣的實現。

工作後,從linux系統的驅動原始碼中發現了eeprom的「頁寫」新方法,幾句**即把前面一堆邏輯描述清楚,第一次體會到演算法的神奇之處。作了一些修改,關鍵**如下。

eeprom頁寫時序圖:

修改後的頁寫演算法:

uint16_t ee_24clxx_writebytes(uint16_t write_addr, const char* pwrite_buff, uint16_t writebytes)

}return temp;

}

[1]  

[2]

EEPROM AT24C16讀寫注意事項

at24c16每頁有16個位元組,128頁,共2048位元組。128頁分成8塊,每塊256位元組。i2c開始訊號後,第乙個位元組為器件位址,由1010 3位塊位址 1位讀寫標誌組成,3位塊位址剛好可以表示8個塊,8塊的器件位址分別為 0xa0 0xa2 0xa4 0xa6 0xa8 0xaa 0xa...

24C02 24C16進行位元組 頁讀取 頁訪問操作

以下這篇文章是自己折騰了三天儲存晶元後,並且能夠成功進行位元組操作 頁操作的一篇應用型文章,不太想研究原理的可以直接採用本文的 和注意事項。在對24c02或者24c16進行位元組 頁讀取 頁訪問前,我們需要弄清楚i c協議 24c02 24c16儲存空間 位元組操作和頁操作的時序 void i2cs...

16 頁快取記憶體和頁回寫

頁快取記憶體有什麼作用?主要實現linux的磁碟快取,用來減少磁碟的io操作,具體講就是把磁碟中資料快取到物理記憶體,把對磁碟的訪問轉換為對物理記憶體的訪問。磁碟快取記憶體為什麼這麼重要?什麼是臨時區域性原理?在短期內訪問同一片資料區的原理稱為臨時區域性原理 頁快取記憶體有什麼特點?頁快取記憶體的大...