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