EEPROM的幾種保護(hù)方法
串行EEPROM 應(yīng)該是一種很可靠的設(shè)備,但在我的使用中,經(jīng)常會出現(xiàn)數(shù)據(jù)出錯的情況,毛主席老人家說:知己知比,方能百戰(zhàn)不敗!是什么原因呢?其實這種情況多發(fā)生在插拔電的情況下。讓我們來瞧瞧:
1. EEPROM 讀寫的時序可能有小小的不對
2. 是在掉電時,在電壓降低到一定程度后到完全沒電之間的一段時間內(nèi),在MCU與EEPROM 的讀寫信號線上出現(xiàn)非控制的快速隨機(jī)電平,這些電平可能會組合出一些被EEPROM 認(rèn)為合法的寫命令,結(jié)果將EEPROM 中的值修改掉了;
3. 在上電的復(fù)位期間,I/O 腳上電平未定,也可能隨機(jī)組合出一些寫命令;
4. 在讀EEPROM 操作過程中,出現(xiàn)了復(fù)位(如充電復(fù)位)等,形成類似于(二)的情況;
5. 在電壓降低后,可能會出現(xiàn)MCU 跑飛了,結(jié)果運行到了寫EEPROM 的底層驅(qū)動程序中,強(qiáng)來將數(shù)據(jù)寫入了進(jìn)去!嘿嘿!讓我們嘗嘗強(qiáng)扭的瓜不甜!
對待敵人可不能手軟,怎樣扼殺他們在萌芽狀態(tài)!看我的絕招:
1. 擺闊氣:按Datasheet 上的時序,發(fā)現(xiàn)多數(shù)時候讀寫正確,但有時偶爾不對,這時可以降低讀寫的速度,多幾個NOP,不要太小氣嗎?咱們度量(ROM)還是能容的下的!
2. 避風(fēng)頭:為防止讀EEPROM 的過程中出現(xiàn)復(fù)位,我們可以在MCU 復(fù)位后200ms 內(nèi)禁止讀寫EEPROM,因充電引起的復(fù)位抖動,一般在數(shù)十毫秒內(nèi),過了這段時間,再出現(xiàn)復(fù)位的可能性不大,
3. 查證件:在寫EEPROM 的底層驅(qū)動程序中,在執(zhí)行寫動作時,判斷一下某些標(biāo)志,有良名證的才能通過,否則,只好打回原籍(跳到復(fù)位地址)
4. 多買保險(3份最佳)以自救:對于重要的數(shù)據(jù)(如通信密碼、參數(shù)設(shè)置等,這些部分信息量不大,我們要采用三次備份的手段。這些信息存放在三個不同的PAGE 內(nèi),最好PAGE 內(nèi)的地址也不一樣。在我們寫這些數(shù)據(jù)時,要針對不同的地址寫三次,而讀時,對于三處讀來的數(shù)據(jù),如果全相同,沒什么可說的了,如果有兩個相同,一個不同,則使用大數(shù)判決,使用相同的那個值,并將這個數(shù)值寫到不同的那個地址去。當(dāng)然,如果三個值全不同,只好隨便取一個(如第一個),再將其寫入另兩個地址中去。這種方法非常有效,因為一般誤擦除不會是全部數(shù)據(jù),而只是某一處而已,我們可以允許EEPROM 某單元被誤擦除,只要讀了一次,就恢復(fù)了。
評論