• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 一種嵌入式系統bootrom自動備份及切換技術

    一種嵌入式系統bootrom自動備份及切換技術

    作者: 時間:2012-03-13 來源:網絡 收藏

    引言
    隨著物聯網概念的興起,在社會各個領域的應用越來越廣泛。由于產品應用的場合越來越復雜,對于產品開發就提出了新的要求,其中最明顯的表現就是軟件的維護變得日益重要。嵌入式投入實際環境中運行后,一部分在軟件開發過程中無法充分測試的錯誤便會暴露出來;在嵌入式系統的運行期內,用戶也往往會對嵌入式軟件提出新的功能要求和性能要求。因此,嵌入式軟件的更新逐漸成為嵌入式系統實際應用的一個重要問題。在嵌入式系統安裝數量較多,或安裝位置不方便的情況下,采用人工更新方式會花費較大的人力和物力。這時候就需要實現軟件的遠程更新,通過在系統中設計一個有線或無線的通信接口,在異地采用遠程通信的方式實現嵌入式軟件的更新。
    實現更新能有效地降低嵌入式軟件的更新和維護成本,因此得到了廣泛的應用。但是,在實際的應用過程中也發現了一些問題。由于更新過程中發生的一些異常操作(比如突然斷電、更新數據傳輸錯誤等),會導致產品軟件損壞,用戶無法維修,必須發回產品生產廠家進行維修,這給產品使用造成了很大的不便。
    分析這種問題發生的原因,當采用嵌入式Linux、Windows CE等較為復雜的操作系統時,一般設計一個獨立的程序,對系統進行初始化并引導嵌入式操作系統。而系統的更新僅僅考慮了應用層程序或是嵌入式操作系統,沒有對進行,所以當升級boot rom出現異常后,系統將無法再次啟動。同時,由于的加載必須通過燒片機或專用JTAG仿真器進行,而這些工具一般無法在現場使用,用戶也不具備這種條件,因此必須返回廠家進行維修。本文針對這種問題,提出一種bootrom自動,當系統更新出錯后,產品能自動從備份bootrom啟動,啟動后再恢復已寫壞的主bootrom。

    1 系統設計
    1.1 設計思想
    對于嵌入式系統,基于ARM、Power PC或MIPS架構,以及基于Linux、VxWorks等操作系統,其啟動原理都是一樣的。首先,系統上電后復位電路復位整個系統;在復位過程中,CPU讀取外部配置(這個配置一般由CPU引腳通過上下拉電阻確定);復位結束后,CPU根據配置從相應的外部程序存儲器的特定地址讀取bootrom代碼,大多數嵌入式系統一般采用的是NOR Flash,也有部分采用NAND Flash或CF卡等存儲器;然后執行bootrom代碼,初始化CPU各個部分,最后引導操作系統及應用軟件啟動。
    對于一個確定的嵌入式系統,其CPU讀取第一條指令的地址和片選是一定的。下面就以MPC5200B系統為例,說明實現bootrom自備份及自系統的實現方法。
    MPC5200B支持的bootrom地址為0x00000000或是0xfff00000,由復位配置確定從哪一個地址讀取,支持的bootrom空間為512 KB。要實現bootrom自動備份及自動切換有兩種方案:
    ①采用2片NOR Flash,同時掛在MPC5200B的本地總線上,通過一個CPLD提供2個Flash的片選信號,由軟件和CPLD根據boot啟動狀態確定把boot_cs輸出給哪一片Flash。
    ②采用1片NOR Flash,劃分兩個區域,每個區域為512 KB,通過CPLD去切換地址實現。
    本文采用方案一實現bootrom切換功能。
    1.2 總體設計
    如圖1所示,CPU輸出兩個片選信號(boot_cs和CSD給CPLD,同時CPU Local bus的其他信號分別連接到FlashA、FlashB以及CPLD上,CPLD輸出一個復位信號給CPU,復位電路和時鐘電路給CPLD和CPU提供復位和時鐘信號。

    本文引用地址:http://www.czjhyjcfj.com/article/149452.htm

    a.jpg


    要實現bootrom自動切換及備份,需要CPLD和軟件共同進行處理。默認主Flash為FlashA,備份Flash為FlashB。具體步驟如下:
    ①啟動時,CPU發出boot_cs信號,從Local bus的0x00000000地址開始讀取軟件,CPLD默認把boot_cs信號送給FlashA。如果CPU正常啟動,等CPU啟動完成后,軟件向CPLD的bootrom啟動寄存器中寫入值A。
    ②CPLD延時5 s后讀取bootrom啟動寄存器,當發現這個寄存器值為A時,代表bootrom已經成功啟動,CPLD鎖定輸出boot_cs給第一片Flash。同時,輸出CS1給FlashB,軟件檢測FlashB中代碼的完整性。如果完整,則不處理;如果發現FlashB中代碼不完整,重新往FlashB中寫入代碼。

    linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 桃江县| 阳山县| 南投市| 长治县| 嵩明县| 深圳市| 宿松县| 铜梁县| 永寿县| 东山县| 高青县| 梅州市| 阜城县| 台北市| 绥芬河市| 行唐县| 陕西省| 裕民县| 岫岩| 涞水县| 寿阳县| 吉木乃县| 十堰市| 尉犁县| 巨鹿县| 新营市| 依安县| 余江县| 北碚区| 沈丘县| 河东区| 长宁区| 镇雄县| 宁都县| 祁东县| 台中县| 江华| 涞水县| 视频| 娄底市| 福州市|