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