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