一、
stm32的FLASH擦除是按整頁或者整扇區(qū)擦除的,不同芯片的頁或者扇區(qū)(下邊統(tǒng)稱為頁)的大小是不一樣的,有1K,16K,64K,128K等大小。
現(xiàn)在我們想要 存3個不同16bit變量的數(shù)據(jù),1秒存一次 ,如果不做任何算法,將這3個變量存到3個不同的頁的16bit地址,每次更改變量內(nèi)容都要擦除一次整頁(但是我們只使用了16bit的空間),根據(jù)芯片數(shù)據(jù)手冊可知,保證性能的情況下flash最少擦除次數(shù)為10K,1萬次。
我們就按1萬次計算,理論上不到3小時我們使用的16bit地址就有損壞的風(fēng)險。而且要存儲的變量個數(shù)也有限,我們芯片不可能有那么多頁,H7系列也就16頁。所以需要一些算法處理,充分利用頁的空間。
二、EEPROM組件原理分析
還是上邊說的存儲情況,存3個不同16bit變量的數(shù)據(jù),1秒存一次。
先說一下其大致思路,開辟兩塊連續(xù)大小相同的頁,分別為page0,page1,假如我們選用F4的芯片,選用第2頁和第3頁,均為16K。每個變量分配一個16bit的虛擬地址,同16bit數(shù)據(jù)一起存儲,虛擬地址為了讀取數(shù)據(jù)方便。
三個變量首先在page0存儲,存滿page0之后,將這3個變量最新的數(shù)據(jù)復(fù)制到page1,然后擦除page0,接下來在page1中存儲,page1存滿之后,將3個變量最新的數(shù)據(jù)復(fù)制到page0,然后擦除page1,就這樣循環(huán)存儲。
我們粗略的計算一下保證flash的可靠性的前提下,可以使用的時間,2個頁共32K,也就是每存32K的數(shù)據(jù),page0,page1各擦除一次,我們存的是16bit數(shù)據(jù)+16bit的虛擬地址,那就是每存8K的16bit數(shù)據(jù),page0,page1各擦除一次,這是3個變量,那么每個變量平均存2730次時,擦除一次頁,flash擦除壽命按1萬次計算,16bit變量1秒存一次,可以存2730100001秒=>7583小時=>315天,這是每天不間斷的使用,如果每天只使用8小時,大概可以使用2.5年。如果每天使用8小時,變量每10秒存一次,大概可以使用25年。這樣就充分利用了頁空間。
這里需要注意變量個數(shù),和存儲周期,如果周期太快或者變量個數(shù)太多,可以增加頁,如果增加頁還是不滿足,那就只能加專用存儲芯片了。
下面看一下具體是怎么實(shí)現(xiàn)的:
每個頁都有3個狀態(tài):
- ERASED:當(dāng)期頁已擦除。
- RECEIVE_DATA:頁正在從另一個滿頁接收(復(fù)制)數(shù)據(jù)。
- VALID_PAGE:頁中包含有效數(shù)據(jù),并且在將所有有效數(shù)據(jù)完全傳輸?shù)揭巡脸撝?,此狀態(tài)不會改變。
根據(jù)官方提供的這個表,結(jié)合程序看,邏輯就很清晰了。
推薦看此表的順序:自上而下,從左到右。先看同一列,自上而下,再看不同列,從左到右。一定要結(jié)合程序?qū)嶋H過一遍,那樣更深刻。
注:page0格式化是指,將page0設(shè)置為VALID_PAGE狀態(tài)。
-
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354289 -
EEPROM
+關(guān)注
關(guān)注
9文章
1008瀏覽量
81332 -
存儲芯片
+關(guān)注
關(guān)注
11文章
881瀏覽量
43040 -
Flash存儲
+關(guān)注
關(guān)注
0文章
38瀏覽量
8275
發(fā)布評論請先 登錄
相關(guān)推薦
評論