avrEEPROM數(shù)據(jù)丟失問題原因與解決方案_第1頁
avrEEPROM數(shù)據(jù)丟失問題原因與解決方案_第2頁
avrEEPROM數(shù)據(jù)丟失問題原因與解決方案_第3頁
avrEEPROM數(shù)據(jù)丟失問題原因與解決方案_第4頁
avrEEPROM數(shù)據(jù)丟失問題原因與解決方案_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、avr EEPROM數(shù)據(jù)丟失問題 原因與解決方案總結一下引起 AVR內部EEPRO數(shù)據(jù)丟失的原因:1. 程序問題;2. 程序跑飛;3. EEPROM 相關寄存器因強磁場、高壓靜電等外部干 擾出錯所產(chǎn)生的寫入動作;4. 系統(tǒng)有很大的感性負載,在斷電的時候會產(chǎn)生一個反向高壓,EEPRO有可能會自擦除。…… (還有什么原因,歡迎大家繼續(xù)列 舉,以便完善及想辦法解決)針對問題 1,程序問題不再該文討論范圍內。針對問題2,程序跑飛,這個因該是引起 EEPROI數(shù)據(jù)丟失的主要原因。但是引起程序跑飛的原因卻是多方面的第一. 電壓不正常,工作不穩(wěn)定,程序跑飛。針對這

2、 個問題,可以開啟內部 BOD或者外加復位芯片解決, 在低功耗場合,外部復位是有必 要的,畢竟BOD功耗太高。第二,晶體振蕩受干擾,頻率不穩(wěn)定,程序跑飛。 針對這個問題,建議晶體使用全幅振蕩,并且走線的時 候盡量短,并且使用地線隔離。第三系統(tǒng)受外界環(huán)境干擾,修改了PC等寄存器,程序跑飛。針對這個干擾問題,這個引起程序跑飛的可能 性應該不大,如果環(huán)境實在惡劣,那么就應該想到做電磁屏蔽,ESD保護等,如果還不行,那么只能建議換換別的單片機試試看了。針對問題 3,我們只能優(yōu)化電路設置,盡量避免,比如加屏蔽罩,加 ESD保護,力口 TVS保護,電源加電容退 耦等等。針對問題 4, 如果系統(tǒng)真的具有很大

3、的感性負載,那么請注意加續(xù)流二極管、濾波電容等做保護,不要讓這種反向高壓產(chǎn)生,無論如何,這 種因為感性負載突然斷電自激產(chǎn)生的高壓,不僅僅會對EEPRO有影響,而是對整個系統(tǒng)都存在威脅。經(jīng)過上面硬件上的一些處理,雖然EEPRO數(shù)據(jù)丟失的可能已經(jīng)很小了,但是我們仍然不能保證EEPRO數(shù)據(jù)就不會丟失了。這時 EEPRO數(shù)據(jù)的可*性,那就得從 軟件上去考慮了,接著我們從 軟件的方面繼續(xù)討論。我的做法是,數(shù)據(jù)分塊,分區(qū),校驗,備份。當然 這里講的處理方法,僅僅是提供一種想法,你可以做不 同數(shù)據(jù)長度的分塊,不同大小的 分區(qū),采用不同的地址映射方法,以及采用更多次的數(shù) 據(jù)備份。下面以 Mega168為例繼續(xù)

4、討論。1. Mega168EEPROM51字節(jié),把 EEPRO分為兩個區(qū),每個區(qū) 256 個字節(jié),然后以 8個字節(jié)為一個段,那么每個區(qū)就 有 32 段。數(shù)據(jù)區(qū):0x000-0x0FF0 段: 0x000-0x0071 段: 0x008-0x00F……31 段: 0x0F8-0x0FF備份區(qū):0x100-0x1FF每個段 8 個字節(jié),其中前 6 個字節(jié)為有效數(shù)據(jù),后 2個字節(jié)為CRC16校驗,數(shù)據(jù)格式下圖所示:0x000-0x007Ox008 OxOCF0x010-0x0170x018-0x01?0x020-0x0270x040-0x0470x060-

5、0x0670x080-0x087OxOAO-OxOA?OxOCO-OxOCZ0xQEd-0x0E7備份區(qū)0x100-0x10Oxl08-0xl0F0x110-0x1170xll8-CxllF0x120-0x1270k140-0x1470x160-0x1670x180-0x187OxlAO-OxlA7OxlCO-OxlC7OxlEO-OxlEZ數(shù)據(jù)區(qū)CRC16校驗ByteOByt dlByte 2Byt &3ByteiCKC1CRC22. EEPR0M讀寫操作EEPROM的操作以段為單位,段寫入函數(shù):寫數(shù)據(jù)到數(shù)據(jù)區(qū)時,先計算數(shù)據(jù)CRC16校驗,然后同時把數(shù)據(jù)寫入到數(shù)據(jù)區(qū)和備份區(qū);段讀取函

6、數(shù):讀取數(shù)據(jù)時,同時讀取數(shù)據(jù)區(qū)以及備 份區(qū),如果數(shù)據(jù)區(qū)校驗有誤,備份區(qū)數(shù)據(jù)校驗正確,就 用備份區(qū)數(shù)據(jù)恢復數(shù)據(jù)區(qū)數(shù)據(jù);如果備份區(qū)數(shù)據(jù)有誤,數(shù)據(jù)區(qū)數(shù)據(jù)正確,那么數(shù)據(jù) 寫入備份區(qū)重新備份;如果數(shù)據(jù)區(qū)備份區(qū)數(shù)據(jù)都有誤, 那么返回讀取失敗。3. 數(shù)據(jù)區(qū)與備份區(qū)的對應關系數(shù)據(jù)讀寫操作以段進行,內部的數(shù)據(jù)區(qū)與備份區(qū)怎 么映射呢?為了防治數(shù)據(jù)與備份同時被意外修改,那么 數(shù)據(jù)與備份地址空間相隔不能太 近,并且數(shù)據(jù)與備份的地址,應該盡量不同。假設數(shù)據(jù) 地址為 Data_Addr ,備份地址為 Bakup_Addr ,我使用下 面的函數(shù)映射地址:Bakup_Addr=(Data_Addr+0x100)Sx03F加

7、0x100 是把地址定義到備份區(qū),與 0x03F 異或,是 把低 6bits 取反,這樣處理,數(shù)據(jù)與備份的地址空間較 遠,并且地址有 7bits 的不同。例如,第 3 段的地址 :0x018-0x01F ,對應的備份區(qū)為:0x127-0x120如下圖所示:數(shù)據(jù)區(qū)0x000-0x0070xC080x00F0x010-0x017 |0x018-0x0IF0x020-0x0271 /00400x047z0x060-0x0670x080-0x087OxOAOHOxOAZOxDCO-OxOC7OxDEO-OxOE?/備份區(qū)0x100-0x107OxlOF0x110-0x1170x118-0x11?10x120-0x12710x140-0x1470x160-0x1670x180-0x1870xlA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論