一種嵌入式系統bootrom自動(dòng)備份及切換技術(shù)
引言
隨著(zhù)物聯(lián)網(wǎng)概念的興起,嵌入式系統在社會(huì )各個(gè)領(lǐng)域的應用越來(lái)越廣泛。由于產(chǎn)品應用的場(chǎng)合越來(lái)越復雜,對于嵌入式產(chǎn)品開(kāi)發(fā)就提出了新的要求,其中最明顯的表現就是嵌入式系統軟件的維護變得日益重要。嵌入式系統投入實(shí)際環(huán)境中運行后,一部分在軟件開(kāi)發(fā)過(guò)程中無(wú)法充分測試的錯誤便會(huì )暴露出來(lái);在嵌入式系統的運行期內,用戶(hù)也往往會(huì )對嵌入式軟件提出新的功能要求和性能要求。因此,嵌入式軟件的更新逐漸成為嵌入式系統實(shí)際應用的一個(gè)重要問(wèn)題。在嵌入式系統安裝數量較多,或安裝位置不方便的情況下,采用人工更新方式會(huì )花費較大的人力和物力。這時(shí)候就需要實(shí)現軟件的遠程自動(dòng)更新,通過(guò)在系統中設計一個(gè)有線(xiàn)或無(wú)線(xiàn)的通信接口,在異地采用遠程通信的方式實(shí)現嵌入式軟件的自動(dòng)更新。
實(shí)現自動(dòng)更新能有效地降低嵌入式軟件的更新和維護成本,因此得到了廣泛的應用。但是,在實(shí)際的應用過(guò)程中也發(fā)現了一些問(wèn)題。由于更新過(guò)程中發(fā)生的一些異常操作(比如突然斷電、更新數據傳輸錯誤等),會(huì )導致產(chǎn)品軟件損壞,用戶(hù)無(wú)法維修,必須發(fā)回產(chǎn)品生產(chǎn)廠(chǎng)家進(jìn)行維修,這給產(chǎn)品使用造成了很大的不便。
分析這種問(wèn)題發(fā)生的原因,當采用嵌入式Linux、Windows CE等較為復雜的操作系統時(shí),一般設計一個(gè)獨立的bootrom程序,對系統進(jìn)行初始化并引導嵌入式操作系統。而系統的更新僅僅考慮備份了應用層程序或是嵌入式操作系統,沒(méi)有對bootrom進(jìn)行備份,所以當升級boot rom出現異常后,系統將無(wú)法再次啟動(dòng)。同時(shí),由于bootrom的加載必須通過(guò)燒片機或專(zhuān)用JTAG仿真器進(jìn)行,而這些工具一般無(wú)法在現場(chǎng)使用,用戶(hù)也不具備這種條件,因此必須返回廠(chǎng)家進(jìn)行維修。本文針對這種問(wèn)題,提出一種bootrom自動(dòng)備份及切換技術(shù),當系統更新出錯后,產(chǎn)品能自動(dòng)切換從備份bootrom啟動(dòng),啟動(dòng)后再恢復已寫(xiě)壞的主bootrom。
1 系統設計
1.1 設計思想
對于嵌入式系統,基于A(yíng)RM、Power PC或MIPS架構,以及基于Linux、VxWorks等操作系統,其啟動(dòng)原理都是一樣的。首先,系統上電后復位電路復位整個(gè)系統;在復位過(guò)程中,CPU讀取外部配置(這個(gè)配置一般由CPU引腳通過(guò)上下拉電阻確定);復位結束后,CPU根據配置從相應的外部程序存儲器的特定地址讀取bootrom代碼,大多數嵌入式系統一般采用的是NOR Flash,也有部分采用NAND Flash或CF卡等存儲器;然后執行bootrom代碼,初始化CPU各個(gè)部分,最后引導操作系統及應用軟件啟動(dòng)。
對于一個(gè)確定的嵌入式系統,其CPU讀取第一條指令的地址和片選是一定的。下面就以MPC5200B系統為例,說(shuō)明實(shí)現bootrom自備份及自切換系統的實(shí)現方法。
MPC5200B支持的bootrom地址為0x00000000或是0xfff00000,由復位配置確定從哪一個(gè)地址讀取,支持的bootrom空間為512 KB。要實(shí)現bootrom自動(dòng)備份及自動(dòng)切換有兩種方案:
①采用2片NOR Flash,同時(shí)掛在MPC5200B的本地總線(xiàn)上,通過(guò)一個(gè)CPLD提供2個(gè)Flash的片選信號,由軟件和CPLD根據boot啟動(dòng)狀態(tài)確定把boot_cs輸出給哪一片Flash。
②采用1片NOR Flash,劃分兩個(gè)區域,每個(gè)區域為512 KB,通過(guò)CPLD去切換地址實(shí)現。
本文采用方案一實(shí)現bootrom切換功能。
1.2 總體設計
如圖1所示,CPU輸出兩個(gè)片選信號(boot_cs和CSD給CPLD,同時(shí)CPU Local bus的其他信號分別連接到FlashA、FlashB以及CPLD上,CPLD輸出一個(gè)復位信號給CPU,復位電路和時(shí)鐘電路給CPLD和CPU提供復位和時(shí)鐘信號。
要實(shí)現bootrom自動(dòng)切換及備份,需要CPLD和軟件共同進(jìn)行處理。默認主Flash為FlashA,備份Flash為FlashB。具體步驟如下:
①啟動(dòng)時(shí),CPU發(fā)出boot_cs信號,從Local bus的0x00000000地址開(kāi)始讀取軟件,CPLD默認把boot_cs信號送給FlashA。如果CPU正常啟動(dòng),等CPU啟動(dòng)完成后,軟件向CPLD的bootrom啟動(dòng)寄存器中寫(xiě)入值A。
②CPLD延時(shí)5 s后讀取bootrom啟動(dòng)寄存器,當發(fā)現這個(gè)寄存器值為A時(shí),代表bootrom已經(jīng)成功啟動(dòng),CPLD鎖定輸出boot_cs給第一片Flash。同時(shí),輸出CS1給FlashB,軟件檢測FlashB中代碼的完整性。如果完整,則不處理;如果發(fā)現FlashB中代碼不完整,重新往FlashB中寫(xiě)入代碼。
評論