當前位置: 華文世界 > 數位

FLASH 模擬 EEPROM

2024-03-08數位

1. 簡介

FLASH 和 EEPROM 都是非揮發性儲存器,在掉電後數據還會保留。FLASH 和 EEPROM 最 大的區別是擦除方式不同,EEPROM 可以按字節進行擦除,但 FLASH 最小擦除單位是頁,一 頁通常包含多個字節甚至幾 K 字節。FLASH 和 EEPROM 擦寫內容決定了 EEPROM 容量小 但擦寫壽命比較高,而 FLASH 容量非常大,但擦寫壽命短。 在 MCU 主頻高的情況下,可以采用 FLASH 模擬 EEPROM 來降低成本。

本文介紹了一種采 用 FLASH 模擬 EEPROM 的方法,實作了 EEPROM 按字節進行數據修改,可防止復位或掉 電產生的數據遺失,當采用的 FLASH 儲存空間越大,EEPROM 效能越好。

2. EEPROM 備份區結構

本文以63頁DATA FLASH模擬2K字節EEPROM來介紹FLASH模擬EEPROM的方法。

2.1. GD32A50x FLASH 簡介

GD32A50x提供高達384KB片上FLASH,其中bank0 256KB,bank1 128KB。基地址和大小如 表2-1. 384KB快閃記憶體基地址和大小所示。

表 2-1. 384KB 快閃記憶體基地址和大小

2.2. EEPROM 數據備份結構

表 2-2. FLASH 頁數據備份儲存結構1

表 2-2. FLASH 頁數據備份儲存結構2

3. FLASH 模擬 EEPROM

方案 3.1. 演算法實作

3.1.1. 參數宏

表 3-1. 參數宏

3.1.2. API 函式

函式 eeprom_init 函式 eeprom_init 用於初始化 EEPROM 備份區,並獲取當前正在用於 EEPROM 備份的 FLASH 頁相對編號。

表 3-2. EEPROM 初始化1

表 3-2. EEPROM 初始化2

表 3-2. EEPROM 初始化3

函式 eeprom_write

函式 eeprom_write 用於索引當前可寫的地址,並將數據寫到對應 FLASH 地址。註意該函式 的入參 ee_addr 是模擬 EEPROM 地址,範圍為 0-135。

表 3-3. EEPROM 寫函式

表 3-3. EEPROM 寫函式1

表 3-3. EEPROM 寫函式2

表 3-3. EEPROM 寫函式3

3.1.3. 測試結果

測試在 EEPROM 中覆寫第一個字節共 16 次。寫入數據如圖 3-1. 讀寫數據所示。

圖 3-1. 讀寫數據

程式碼如表 3-5. 測試 demo 所示。

表 3-5. 測試 demo

表 3-5. 測試 demo2

測試結果如圖 3-2. EEPROM 備份區數據所示

圖 3-2. EEPROM 備份區數據 圖 3-2. EEPROM 備份區數據