PIC寫內(nèi)部 EEPROM 問(wèn)題探討
在做一個(gè)項(xiàng)目時(shí),需要對(duì)測(cè)試數(shù)據(jù)實(shí)時(shí)的保存,以被重新上電后讀取.采用了PIC的內(nèi)部EEPROM,正常讀取時(shí)沒(méi)有什么問(wèn)題.反復(fù)上電掉電就出現(xiàn)了EEPROM被清0(改寫).
查閱相關(guān)資料:EEROM寫過(guò)程包括兩個(gè)階段:先擦除(電壓為20V) 再寫入(電壓18V);EEPROM在寫入過(guò)程中如果電壓不穩(wěn)定,很容易導(dǎo)致錯(cuò)誤.先使用了軟件冗余法,同一個(gè)data寫在連續(xù)3個(gè)地址,使用時(shí)比較,只有2個(gè)相同時(shí)才使用.這樣做,反復(fù)上電掉電出錯(cuò)幾率小了很多,但是還是會(huì)出錯(cuò).在反復(fù)上電100多次時(shí)還是出錯(cuò).另一個(gè)解決辦法就是使能BOD,寫EEPROM時(shí),先檢測(cè)BOD.網(wǎng)上一位兄弟使用此方法反復(fù)上電2000多次才錯(cuò)誤一次.
上述方法有兩個(gè)致命缺陷:1.EEPROM壽命短,EEPROM按最低10萬(wàn)次算,我的項(xiàng)目每2s寫一次EEPROM,連續(xù)使用2周后EEPROM就可能壽命以盡.2還是有錯(cuò)誤,沒(méi)有100%正確.
解決方案:使用掉電檢測(cè),如果成本許可還可以使用法拉電容.電路圖如下:
電源電壓掉電時(shí),產(chǎn)生一個(gè)INT信號(hào),PIC進(jìn)入外部中斷程序:首先將IO清零以降低電流損耗,此時(shí)利用電容C1的放電時(shí)間將要保存的數(shù)據(jù)寫入EEPROM.470uF D型鉭電容可供PIC工作20ms左右,足夠?qū)?bety EEPROM.