|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
急急干擾大EEPROM 誤改寫問題 |
| 作者:liguilin 欄目:單片機(jī) |
我做一款復(fù)費(fèi)率電表,我頻繁上下電,電表的表底數(shù)、脈沖常數(shù)、地址常被改寫,請問那位大蝦有高招,幫幫小弟。 謝謝! |
| 2樓: | >>參與討論 |
| 作者: imwangyi 于 2003/7/17 11:41:00 發(fā)布:
軟件要處理好 1,重要的數(shù)據(jù),不一定只放在一個地址。上電時檢查一下就知道是不是寫EEPROM時掉電了。 2,程序設(shè)置一些讀寫EEPROM的flag,也不一定就一個flag,在讀寫EEPROM時發(fā)現(xiàn)自己定義的flag不正常就退出。 3,電源好點,MCU選型也很重要。 |
|
| 3樓: | >>參與討論 |
| 作者: liguilin 于 2003/7/17 14:14:00 發(fā)布:
謝謝!imwangyi 我用的是AT24C02,1、2、3 腳接地了,WP我也使用了,進(jìn)入寫EEPROM的程序打開WP然后判斷FLAG不正常馬上關(guān)閉WP,程序內(nèi)也加了很多FLAG,程序我也加了寫EEPROM的授權(quán)如:初始化是否成功、主程序是否正常執(zhí)行、寫的數(shù)據(jù)校驗是否成功等。正常使用時很好用,我長時間的頻繁斷電上電是會現(xiàn)這種情況,也就是說在不正常的情況下程序出現(xiàn)了誤操作,寫了我不想寫的數(shù)據(jù)。這種情況是否能完全解決,我現(xiàn)在3小時內(nèi)不會改寫,3小時后不一定了。 |
|
| 4樓: | >>參與討論 |
| 作者: imwangyi 于 2003/7/17 14:38:00 發(fā)布:
一定可以解決。 AT24C02質(zhì)量還不錯。 有幾個問題需要問一下: 1,用的什么MCU。如果是TAIWAN的東西,可能我也沒什么脾氣。 2,F(xiàn)lag的設(shè)置,程序在設(shè)置標(biāo)志位前,要判斷程序狀態(tài)(比如是否是飛了)。設(shè)置好了標(biāo)志位,也要去判斷。尤其在進(jìn)入寫EEPROM的程序打開WP前。 3,數(shù)據(jù)的存放,最好將同一數(shù)據(jù)放在不同的地址,而且要加校驗,如CRC之類的東西。這樣的話,就算在寫EEPROM時掉電,也能恢復(fù)正確的數(shù)據(jù)。當(dāng)然,在寫的命令不應(yīng)該是同一個寫命令。 |
|
| 5樓: | >>參與討論 |
| 作者: liguilin 于 2003/7/17 17:38:00 發(fā)布:
我用的是:MICROCHIP的PIC16C73 1、數(shù)據(jù)我加了校驗和,我的數(shù)據(jù)最大只有4個字節(jié),加校驗和因該沒問題。但表的ID號沒加校驗。數(shù)據(jù)放在一個區(qū)ID號放在一個區(qū)。 2、FLAG我是這樣用的:如:修改ID號程序;判斷舊ID號和命令碼正確;正確后設(shè)置寫EEPROM標(biāo)志;再判斷命令碼是否正確;如正確調(diào)用寫EEPROM程序,不正確死循環(huán)等WDT復(fù)位;WP我是這樣用的;進(jìn)入寫EEPROM程序首先打開WP判斷是否有寫EEPROM 的FLAG;若有再判斷命令碼是否正確;都正確寫EEPROM,寫萬關(guān)WP;若FLAG和命令碼有一個錯關(guān)WP等WDT復(fù)位; 3、我是這樣做的試驗:把220V的插頭來回在 插空內(nèi)晃動,插頭銅片和插空銅片接觸時有火花出現(xiàn),最初我做試驗不到10分鐘必定會改寫EEPROM的內(nèi)容,現(xiàn)在我已經(jīng)控制到3小時內(nèi)不會改寫EEPROM的內(nèi)容,3小后就不一定了,我想EEPROM改寫能不能完全解決。這樣我就不擔(dān)心在現(xiàn)場回出現(xiàn)丟地址了。請多指教! |
|
| 6樓: | >>參與討論 |
| 作者: louis.liu 于 2003/7/19 11:06:00 發(fā)布:
采用數(shù)據(jù)地址冗余,寫-讀-比較-寫-讀-比較。 |
|
| 7樓: | >>參與討論 |
| 作者: eling 于 2003/7/19 15:28:00 發(fā)布:
用93LCX6可能會更好,我現(xiàn)在都很少用AT24系列了 |
|
| 8樓: | >>參與討論 |
| 作者: jtnj 于 2003/7/20 6:38:00 發(fā)布:
搞正確寫EE的時序,確認(rèn)中斷發(fā)生時的現(xiàn)場保護(hù)和恢復(fù) |
|
| 9樓: | >>參與討論 |
| 作者: liguilin 于 2003/7/20 9:02:00 發(fā)布:
謝謝。 to louis.liu :我試用數(shù)據(jù)地址冗余大有提高,但不能完全提高。對寫數(shù)據(jù)很有效 對ID 號管理不理想,因為我的表剛出廠沒有ID,沒有最初的原始數(shù)據(jù)無法做數(shù)據(jù)地址冗余。 |
|
| 10樓: | >>參與討論 |
| 作者: liguilin 于 2003/7/20 9:04:00 發(fā)布:
謝謝! to louis.liu :我試用數(shù)據(jù)地址冗余大有提高,但不能完全解決。對寫數(shù)據(jù)很有效 對ID 號管理不理想,因為我的表剛出廠沒有ID,沒有最初的原始數(shù)據(jù)無法做數(shù)據(jù)地址冗余。 |
|
| 11樓: | >>參與討論 |
| 作者: imwangyi 于 2003/7/20 10:34:00 發(fā)布:
一點建議 看你程序的流程,應(yīng)該沒什么問題.不過,電源不好的時候,MCU的內(nèi)部的RAM不是那么聽話,所以falg不一定只是一個bit. 另外,你的外圍電路,尤其是復(fù)位電路,要保證MCU電壓異常時(過低)時能立即Reset,否則,一個bit的falg很難保證工作的正確性. 同時,建議你看看MCU的I/O口上的雜訊究竟有幾大.如果有大于-1V的雜訊,估計內(nèi)部RAM有時會出點問題,需要保護(hù). |
|
| 12樓: | >>參與討論 |
| 作者: strongxg 于 2003/7/20 10:54:00 發(fā)布:
試一試改用鐵電存儲器,不過貴一些。 除了保證以上的措施外,EEPROM的長時間寫是它的弱點。鐵電存儲器存儲器讀寫速度快,耗能低,也有些寫保護(hù)措施,出錯的概率應(yīng)該小很多。而且其讀寫壽命比EEPROM長很多,對你設(shè)計應(yīng)該有幫助。只是建議,不是廣告喲! |
|
| 13樓: | >>參與討論 |
| 作者: liguilin 于 2003/7/20 15:04:00 發(fā)布:
謝謝!imwangyi 你說的很對我做實驗發(fā)現(xiàn),RAM的內(nèi)容是有問題,我也覺得一位FLAG不可靠,我都用了一位加一個字節(jié)做FLAG也不可靠,我掉電要保存參數(shù),不能復(fù)位。RAM的值如何保存,請指教。! |
|
| 14樓: | >>參與討論 |
| 作者: shifei74 于 2003/7/21 8:49:00 發(fā)布:
怎會如此呢? 我也做過類似產(chǎn)品,只是E2大些,沒任何問題啊,脈沖群輕松到4500V,所以一定可以解決。 掉電復(fù)位是否使用,有停電檢測嗎? 我認(rèn)為24CXX是唯一選擇,不要考慮更換,否則需要容量大時就麻煩了。 ID號一樣可以雙重保護(hù)! |
|
| 15樓: | >>參與討論 |
| 作者: imwangyi 于 2003/7/21 10:22:00 發(fā)布:
再說幾點,供參考 1,MCU換PIC16LC73B(工作電壓2.5-5.5),因為PIC16C73B的工作電壓4.0-5.5。 2,EEPROM用24AA02(工作電壓1.8-5.5) 掉電一定要復(fù)位,當(dāng)然指的是MCU的工作電壓低于指定數(shù)值的時候。比如PIC16LC73B工作到2.3V時,程序可以跑,但RAM是什么什么情況就不得而知了。 所以你的電源電路要保證市電掉電后50MS能提供正常的工作電壓。同時,為了對付頻繁的斷復(fù)電,你的復(fù)位電路可能要做一些修改,以保證電路工作電壓工作未穩(wěn)定的時候MCU不能工作。 如果你在深圳的話,我們可以當(dāng)面交流一些意見了;但網(wǎng)絡(luò)的世界,誰也不知道誰在哪里,靠幾個貼子,交流起來也是有限的。 |
|
| 16樓: | >>參與討論 |
| 作者: liguilin 于 2003/7/21 15:47:00 發(fā)布:
我在北京,掉電可以保證150MS的正常供電,我用示波器觀察過 |
|
| 17樓: | >>參與討論 |
| 作者: 張明峰 于 2003/7/21 16:44:00 發(fā)布:
用外部Reset芯片 確定合適的復(fù)位電壓門限,用外部復(fù)位芯片接在MCLR引腳上試試。EEPROM數(shù)據(jù)出問題主要是在上/下電過程中發(fā)生,如果MCU能可靠復(fù)位基本可以消除。 |
|
| 18樓: | >>參與討論 |
| 作者: liguilin 于 2003/7/21 17:39:00 發(fā)布:
硬件已經(jīng)不能蓋了,有軟件解決的方法嗎?謝謝!! |
|
| 19樓: | >>參與討論 |
| 作者: martin 于 2003/7/21 17:57:00 發(fā)布:
燒寫芯片時選啟動BOD EEPROM被誤改寫的現(xiàn)象一般都是發(fā)生在上掉電過程中,如果沒有內(nèi)部上掉電復(fù)位或外部上掉電復(fù)位芯片,在不足芯片工作電壓時,單片機(jī)并不是不工作,但它工作是否正常?在跑什么代碼就只有天知道,所以設(shè)計一定要避開這個危險區(qū)域。方法:燒寫芯片時選啟動內(nèi)部BOD,或者象張工說的加外部Reset芯片。如果這還不行,再在軟件上做考慮,比如:對大循環(huán)里的每一步設(shè)定順序號,如開始是00,第一個子程序是01,只有當(dāng)調(diào)用EEPROM寫時順序號是0X才真正啟動EEPROM寫,否則報錯退出。如果懷疑RAM內(nèi)容錯,考慮將重要數(shù)據(jù)多地址備份。 |
|
| 20樓: | >>參與討論 |
| 作者: shifei74 于 2003/7/21 18:27:00 發(fā)布:
對,用BOD 用BOD,如果是F73的話,4V就復(fù)位(IO口為低),不過I2C的上拉就不要用了 上電延時3S以上在進(jìn)行讀寫操作 個人認(rèn)為不要用低電壓的,就F73就可以了 不明白為什么ID就不能保護(hù)了,這跟出廠前后設(shè)置有關(guān)系嗎? 還不行,最好別自己做了,可以找北高智,利爾達(dá),HND,慶成等,只要有量都好說 發(fā)信息給我也可,也在北京 |
|
| 21樓: | >>參與討論 |
| 作者: liguilin 于 2003/7/22 14:15:00 發(fā)布:
BOD是好用,我做過實驗了,但我不能BOD,掉電保存數(shù)據(jù) |
|
| 22樓: | >>參與討論 |
| 作者: shifei74 于 2003/7/22 14:40:00 發(fā)布:
那不就清楚了嗎 那就是掉電時改寫EE, 前面做的大都沒用了! 只要檢測到停電,將SCL和SDA置零 |
|
| 23樓: | >>參與討論 |
| 作者: liguilin 于 2003/7/23 8:51:00 發(fā)布:
用BOD掉電不能保存了,所以我沒法適用BOD |
|
| 24樓: | >>參與討論 |
| 作者: liguilin 于 2003/7/24 11:08:00 發(fā)布:
不能用BOD ,用BOD 后掉電不能保存數(shù)據(jù)了 |
|
| 25樓: | >>參與討論 |
| 作者: hotpower 于 2003/7/30 0:58:00 發(fā)布:
先讀后寫會更好些 在EEPROM內(nèi)設(shè)1字(0x55aa)首次寫入標(biāo)志()和1字(0xaa55)每次成功標(biāo)志。 在寫入前先讀出首次寫入標(biāo)志(0x55aa),若正確,可暫認(rèn)為系統(tǒng)掉電后還有能量。且有EEPROM存在。 然后快速寫入信息,全部寫完后,再寫入每次成功標(biāo)志(0xaa55),然后讀出該標(biāo)志,若正確,則可肯定寫入成功。否則,做相應(yīng)處理。 注意:寫入信息塊時,最好先讀后寫,若讀出的數(shù)據(jù)與寫入的相同時,就不要再寫了,這樣可增加安全性。 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |