




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
單片機自編程及Bootloader設計Bootloader是在單片機上電啟動時執(zhí)行的一小段程序。也稱作固件,通過這段程序,可以初始化硬件設備、建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用應用程序準備好正確的環(huán)境。Boot代碼由MCU啟動時執(zhí)行的指令組成。這里的loader指向MCU的Flash中寫入新的應用程序。因此,Bootloader是依賴于特定的硬件而實現(xiàn)的,因此,在眾多嵌入式產品中目前還不可能實現(xiàn)通用Bootloader。Bootloader的最大優(yōu)點是:在不需要外部編程器的情況下,對嵌入式產品的應用代碼進行更新升級。它使得通過局域網(wǎng)或者Intemet遠程更新程序成為可能。例如,如果有5000個基于MCU的電能表應用程序需要更新,電能表制造商的技術人員就可以避免從事對每一個電能表重新編程的巨大工作量,通過使用Bootloader的功能,由控制中心通過電能表抄表系統(tǒng)網(wǎng)絡,遠程對5000個電表重新編程??梢姡珺ootloader功能對于嵌入式系統(tǒng)的廣泛應用具有十分重要的意義。178K0/Fx2系列單片機簡介78K0/Fx2系列是帶CAN控制器的8位單片機,該系列單片機廣泛應用于汽車電子,智能儀表等領域。其內置POC(可編程上電清零電路)/LVI(可編程低電壓指示器),單電壓自編程閃存,引導交換功能(閃存安全保護),具有低功耗、寬電壓范圍、超高抗干擾等性能。78K0系列單片機支持自編程(Self-programming)。所謂自編程,是指用Flash存儲器中的駐留的軟件或程序對Flash存儲器進行擦除/編程的方法。通過單片機的自編程功能,可以設計Bootloader程序,通過串口等通信接口實現(xiàn)對產品重新編程、在線升級的功能。以μPD78F0881為例。μPD78F0881為78KO/Fx2系列中的一款44管腳單片機,內置32KBFlashROM,2KBRAM,自帶2個串行通信接口。其內部Flash結構。為了方便實現(xiàn)擦除和編程,人為地將整個Flash分成若干個block,每個block大小為1KB。block為自編程庫函數(shù)中空白檢測、擦除、校驗的最小單位。blockO從地址0000H開始,程序都從0000H開始執(zhí)行。block0~block3共4KB存儲空間為Bootloader程序存儲區(qū)域。block4~block31為應用程序存儲區(qū)域。為了防止Bootloader自身的升級失敗,設計了引導交換功能。該功能定義2個簇,即Bootcluster0和Bootcluster1。Bootclustee0為block0~block3的4KB存儲空間,Bootcluster1為block4~block7的4KB存儲空間。因此,實際運用過程中,一般把應用程序的開始定義在2000H,也就是從block8開始。Flash地址為0000H~FFFFH。7FFFFH~FFFFH存儲空間為保留區(qū)域以及特殊功能寄存器區(qū)域等,用戶無法對其進行編程。2自編程2.1自編程環(huán)境2.1.1硬件環(huán)境FLMDO引腳是78KO/Fx2系列單片機為Flash編程模式設置的,用于控制MCU進入編程模式。在通常操作情況下,F(xiàn)LMDO引腳下拉到地。要進入自編程模式,必須使FLMDO引腳置成高電平。因此,通過一個普通I/O接口控制FLMD0引腳的電平。。2.1.2軟件環(huán)境1)使用通用寄存器bank3,自編程庫函數(shù),需要調用通用寄存器bank3。因此,在自編程時,不能對通用寄存器bank3操作。2)使用100BRAM(入口RAM)作為隱藏ROM中函數(shù)的工作區(qū),入口RAM,是Flash存儲器自編程樣例庫所使用的RAM區(qū)域。用戶程序需要保留著塊區(qū)域,當調用庫時,需要指定這片區(qū)域的起始地址。入口RAM地址可以指定在FB00h~FE20h之間。3)4~256BRAM作為數(shù)據(jù)緩沖區(qū),必須是FE20H~FE83H以外的內部高速RAM區(qū)域。4)最大39BRAM作為隱藏ROM函數(shù)的堆棧。5)隱藏ROM中的函數(shù)被0000H~7FFFH中的應用程序調用。2.2自編程流程自編程功能利用自編程軟件庫完成用戶程序對Flash內容的重新編程。如果在自編程的過程中有中斷發(fā)生,那么自編程將暫停來響應中斷。中斷結束,自編程模式恢復后,自編程過程將繼續(xù)進行。采用匯編語言編寫78K0/Fx2自編程軟件庫,如表1所示。自編程操作流程,當單片機收到自編程執(zhí)行信號時,開始進入自編程模式。將FLMDO引腳設置成高電平,初始化入口RAM,為自編程庫函數(shù)開辟空間。當確認FLMD0為自編程狀態(tài)時,開始檢查需要編程區(qū)域是否為空白區(qū)域。當被編程區(qū)域不是空白區(qū)域時,先將其擦除,然后在此區(qū)域進行編程。編程結束后進行校驗。若校驗無誤,則將FLMDO引腳設置成低電平,退出自編程模式。3引導交換(bootswap)產品程序的升級包括應用程序的升級和引導程序(Bootloader自身)的升級。為了防止引導程序在升級的過程中發(fā)生錯誤,從而導致MCU無法啟動,設計了引導交換功能。以圖4說明引導交換的實現(xiàn)過程。1)舊的Boot程序首先將新的Boot程序編程到交換引導簇1(Bootcluster1),然后設置啟動交換標志位,并強迫看門狗復位。2)復位啟動后,MCU看到交換標志位,便從交換引導簇1處開始啟動。交換引導簇1處的新Boot程序將檢查交換標志位。如果交換標志位被置1,則新的Boot程序將擦除交換引導簇0(Bootcluster0)區(qū)域,并將自身復制到交換引導簇O,然后將交換標志位清零,強迫看門狗復位。3)復位啟動后,MCU看到交換標志位被清零。又從交換引導簇0處開始執(zhí)行。這樣就完成了boot程序自身的升級。即使在升級過程中遇到斷電等異常情況,在重新上電后也能重新完成Boot程序升級。有效地防止在升級過程中出現(xiàn)斷電等等異常情況而導致升級失敗,MCU無法啟動的問題,使Boot程序的升級變得安全可靠。Bootloader是在單片機上電啟動時執(zhí)行的一小段程序。也稱作固件,通過這段程序,可以初始化硬件設備、建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用應用程序準備好正確的環(huán)境。Boot代碼由MCU啟動時執(zhí)行的指令組成。這里的loader指向MCU的Flash中寫入新的應用程序。因此,Bootloader是依賴于特定的硬件而實現(xiàn)的,因此,在眾多嵌入式產品中目前還不可能實現(xiàn)通用Bootloader。Bootloader的最大優(yōu)點是:在不需要外部編程器的情況下,對嵌入式產品的應用代碼進行更新升級。它使得通過局域網(wǎng)或者Intemet遠程更新程序成為可能。例如,如果有5000個基于MCU的電能表應用程序需要更新,電能表制造商的技術人員就可以避免從事對每一個電能表重新編程的巨大工作量,通過使用Bootloader的功能,由控制中心通過電能表抄表系統(tǒng)網(wǎng)絡,遠程對5000個電表重新編程??梢?,Bootloader功能對于嵌入式系統(tǒng)的廣泛應用具有十分重要的意義。178K0/Fx2系列單片機簡介78K0/Fx2系列是帶CAN控制器的8位單片機,該系列單片機廣泛應用于汽車電子,智能儀表等領域。其內置POC(可編程上電清零電路)/LVI(可編程低電壓指示器),單電壓自編程閃存,引導交換功能(閃存安全保護),具有低功耗、寬電壓范圍、超高抗干擾等性能。78K0系列單片機支持自編程(Self-programming)。所謂自編程,是指用Flash存儲器中的駐留的軟件或程序對Flash存儲器進行擦除/編程的方法。通過單片機的自編程功能,可以設計Bootloader程序,通過串口等通信接口實現(xiàn)對產品重新編程、在線升級的功能。以μPD78F0881為例。μPD78F0881為78KO/Fx2系列中的一款44管腳單片機,內置32KBFlashROM,2KBRAM,自帶2個串行通信接口。其內部Flash結構。為了方便實現(xiàn)擦除和編程,人為地將整個Flash分成若干個block,每個block大小為1KB。block為自編程庫函數(shù)中空白檢測、擦除、校驗的最小單位。blockO從地址0000H開始,程序都從0000H開始執(zhí)行。block0~block3共4KB存儲空間為Bootloader程序存儲區(qū)域。block4~block31為應用程序存儲區(qū)域。為了防止Bootloader自身的升級失敗,設計了引導交換功能。該功能定義2個簇,即Bootcluster0和Bootcluster1。Bootclustee0為block0~block3的4KB存儲空間,Bootcluster1為block4~block7的4KB存儲空間。因此,實際運用過程中,一般把應用程序的開始定義在2000H,也就是從block8開始。Flash地址為0000H~FFFFH。7FFFFH~FFFFH存儲空間為保留區(qū)域以及特殊功能寄存器區(qū)域等,用戶無法對其進行編程。2自編程2.1自編程環(huán)境2.1.1硬件環(huán)境FLMDO引腳是78KO/Fx2系列單片機為Flash編程模式設置的,用于控制MCU進入編程模式。在通常操作情況下,F(xiàn)LMDO引腳下拉到地。要進入自編程模式,必須使FLMDO引腳置成高電平。因此,通過一個普通I/O接口控制FLMD0引腳的電平。。2.1.2軟件環(huán)境1)使用通用寄存器bank3,自編程庫函數(shù),需要調用通用寄存器bank3。因此,在自編程時,不能對通用寄存器bank3操作。2)使用100BRAM(入口RAM)作為隱藏ROM中函數(shù)的工作區(qū),入口RAM,是Flash存儲器自編程樣例庫所使用的RAM區(qū)域。用戶程序需要保留著塊區(qū)域,當調用庫時,需要指定這片區(qū)域的起始地址。入口RAM地址可以指定在FB00h~FE20h之間。3)4~256BRAM作為數(shù)據(jù)緩沖區(qū),必須是FE20H~FE83H以外的內部高速RAM區(qū)域。4)最大39BRAM作為隱藏ROM函數(shù)的堆棧。5)隱藏ROM中的函數(shù)被0000H~7FFFH中的應用程序調用。2.2自編程流程自編程功能利用自編程軟件庫完成用戶程序對Flash內容的重新編程。如果在自編程的過程中有中斷發(fā)生,那么自編程將暫停來響應中斷。中斷結束,自編程模式恢復后,自編程過程將繼續(xù)進行。采用匯編語言編寫78K0/Fx2自編程軟件庫,如表1所示。自編程操作流程,當單片機收到自編程執(zhí)行信號時,開始進入自編程模式。將FLMDO引腳設置成高電平,初始化入口RAM,為自編程庫函數(shù)開辟空間。當確認FLMD0為自編程狀態(tài)時,開始檢查需要編程區(qū)域是否為空白區(qū)域。當被編程區(qū)域不是空白區(qū)域時,先將其擦除,然后在此區(qū)域進行編程。編程結束后進行校驗。若校驗無誤,則將FLMDO引腳設置成低電平,退出自編程模式。3引導交換(bootswap)產品程序的升級包括應用程序的升級和引導程序(Bootloader自身)的升級。為了防止引導程序在升級的過程中發(fā)生錯誤,從而導致MCU無法啟動,設計了引導交換功能。以圖4說明引導交換的實現(xiàn)過程。1)舊的Boot程序首先將新的Boot程序編程到交換引導簇1(Bootcluster1),然后設置啟動交換標志位,并強迫看門狗復位。2)復位啟動后,MCU看到交換標志位,便從交換引導簇1處開始啟動。交換引導簇1處的新Boot程序將檢查交換標志位。如果交換標志位被置1,則新的Boot程序將擦除交換引導簇0(Bootcluster0)區(qū)域,并將自身復制到交換引導簇O,然后將交換標志位清零,強迫看門狗復位。3)復位啟動后,MCU看到交換標志位被清零。又從交換引導簇0處開始執(zhí)行。這樣就完成了boot程序自身的升級。即使在升級過程中遇到斷電等異常情況,在重新上電后也能重新完成Boot程序升級。有效地防止在升級過程中出現(xiàn)斷電等等異常情況而導致升級失敗,MCU無法啟動的問題,使Boot程序的升級變得安全可靠。4Bootloadler設計4.1簡單的Bootloader一個簡單的Bootload包括5個元素。1)啟動Bootloader的信號Bootloader程序是在執(zhí)行應用程序之前所執(zhí)行的一小段程序,當Bootloader程序把控制權轉交給應用程序后,在MCU復位前,Bootloader程序將不再執(zhí)行。因此,需要產生一個信號觸發(fā)MCU開始Bootloader程序。該信號可以是中斷,也可以通過串口傳送的一條指令,或者是別的程序觸發(fā)的信號。2)執(zhí)行Bootloader的信號單片機程序啟動時,MCU是裝載新的應用程序還是執(zhí)行已經(jīng)存在的程序取決于外部信號。該信號可以是上電時的一個端口信號,用來控制MCU裝載新程序還是執(zhí)行舊程序,也可以是從串口接收到的指令等。3)將新的代碼傳送給MCU通過RS485、I2C、CAN或者USB傳送新的應用程序數(shù)據(jù)。因為要傳送的代碼一般會超過MCU的RAM容量,因此需要一些控制數(shù)據(jù)流量的措施。一般使用XON/XOFF軟件握手協(xié)議,傳送代碼的格式一般選擇Intelhex格式。4)Flash新代碼的自動編程每次MCU接收到一批新的數(shù)據(jù),就要將其編程到正確的Flash地址。如果該地址非空白,MCU在編程前必須先擦除。一般在編程中或者編程后還需要檢查存儲器的內容。5)將控制權轉移給有效的應用程序在接收和編程了新的代碼后,Bootloader寫一個校驗和或者其他唯一字節(jié)序列到一個固定的存儲單元。Bootloader檢測該值,如果該值存在,Bootloader就將控制權傳給應用程序。4.2Intelhex格式在線升級的程序代碼采用編譯器輸出的Intelhex格式文件。Intelhex文件常用來保存單片機或其他微處理器的程序代碼。它保存物理程序存儲區(qū)中的目標代碼映象。一般的編程器都支持這種格式。Intelhex文件記錄中的數(shù)字都是十六進制格式。在InteIhex文件中,每一行包含一個HEX記錄。Intelhex文件通常用于傳輸將被存于Flash或者EEPROM中的程序和數(shù)據(jù)。Intelhex由任意數(shù)量的十六進制記錄組成。每個記錄包含5個域,它們按照圖5所示格式排列。每一個部分至少由2個十六進制編碼字符組成。它們構成1個字節(jié)。每一個部分的意義如下所述:1)每個Intelhex記錄都由冒號開頭,自編程的過程中以此判斷一個Intelhex記錄的開始。2)數(shù)據(jù)長度代表當前記錄中數(shù)據(jù)字節(jié)的數(shù)量。3)地址代表當前記錄中數(shù)據(jù)在存儲區(qū)域中的起始地址。4)HEX記錄類型有如下4種:00-數(shù)據(jù)記錄;01-文件結束記錄;02-擴展段地址記錄;03-轉移地址記錄。NEC編譯器輸出的Intelhex文件中。只包含數(shù)據(jù)類型00和01。其中O1作為自編程過程中數(shù)據(jù)結束的判定標志。5)數(shù)據(jù)域分用于存儲需要寫入Flash中的內容,一個記錄可以有許多數(shù)據(jù)字節(jié)。記錄中的數(shù)據(jù)字節(jié)數(shù)量必須與數(shù)據(jù)長度中的值相符。6)校驗和是取記錄中從數(shù)據(jù)長度到數(shù)據(jù)域最后一個字節(jié)的所有字節(jié)總和的2的補碼。根據(jù)以上說明,必
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南省2025年高三3月份模擬考試化學試題含解析
- 陜西省西安市一中年2025屆高考仿真卷化學試卷含解析
- 太空旅游資源
- 河北省卓恒教育集團2024-2025學年高二下學期3月聯(lián)考生物學試題(含答案)
- 2025屆天津南大附中高一3月月考-英語試卷
- 2025屆湖南省衡陽市重點中學高考全國統(tǒng)考預測密卷化學試卷含解析
- 家庭網(wǎng)絡安全教育手冊
- 中考數(shù)學高頻考點專項練習:專題15 圓綜合訓練 (3)及答案
- 成品收發(fā)工作總結
- 2025年煤制乙二醇合作協(xié)議書
- 全國第三屆職業(yè)技能大賽(無人機駕駛(植保)項目)選拔賽理論考試題庫(含答案)
- 危險化學品目錄(2024版)
- 建筑注漿加固法規(guī)范
- JHA工作危險性分析(全)
- 雙臺110kV主變短路電流計算書
- 載荷試驗方案
- 壓力容器設計審核人員答辯考試標準要點歸納及特殊材料特殊工況的設計注意事項
- 小學四年級下冊美術課件-5.14成群的動物-嶺南版(25張)ppt課件
- 北京市土地一級開發(fā)項目管理工作流程圖
- 安全工器具及設施發(fā)放登記臺賬(共3頁)
- 小學生安全教育研究課題結題報告
評論
0/150
提交評論