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

