由于FLASH的擦除和寫入的特性,如果在擦除中掉電或者寫入時掉電,,有可能會出現(xiàn)失敗的情況,,下次再上電讀取就會出錯。
擦除的時候掉電,,不能保證擦除完全,,已經(jīng)擦除的部分,肯定是0xff了,。
寫的時候掉電,,已經(jīng)寫入的就是正確的,電平掉到極限工作電壓附近時,,寫入的就無法保證了,,地址無法保證,寫入的值也無法保證,。沒有寫到的,,肯定還是 0xFF。??
2,、解決方式
2.1,、硬件方式解決 — 掉電保護(hù)機(jī)制?
必須硬件電路上有相應(yīng)的掉電警告中斷,必須有足夠的時間供軟件響應(yīng),。??
掉電保存和上電恢復(fù),,需要以下:?
1) 快速檢測掉電信號;
2) 要有足夠的時間讓你停下來保存現(xiàn)場;
3) 上電后可靠的復(fù)位;?
這些的關(guān)鍵是掉電信號\電源\復(fù)位信號三個怎么配合的事;
???
掉電保護(hù)不是重新擦寫那么簡單,要有一個機(jī)制能知道發(fā)生了掉電事件,,還要知道什么地方的數(shù)據(jù)是可能出錯的,,如果是新建文件還好一點(diǎn),一般就是數(shù)據(jù)作廢,,如果是改寫一個文件時發(fā)生掉電事故的話,,還要有恢復(fù)機(jī)制,將數(shù)據(jù)恢復(fù)成改寫以前的數(shù)據(jù),。
由于 flash 的先擦后寫的特性,,不會在原來位置重新寫數(shù)據(jù),一般都是把原位置的數(shù)據(jù)標(biāo)記為無效,,再在新位置寫入數(shù)據(jù),,對于文件來說有一個存儲位置的關(guān)系,這不同于文件系統(tǒng)的邏輯地址,每個邏輯地址要有對應(yīng)的物理地址,,要有一套邏輯-物理地址的轉(zhuǎn)換映射關(guān)系在里面,。

