基于PIC18單片機的新穎Bootloader設計
圖1 主程序流程
圖2 更新系統映象系統流程
1.4 PC端操作界面的設計
PC端操作界面主要用來(lái)實(shí)現以下幾個(gè)功能:
?、俅趨翟O置。設置串口通道號、數據位數、波特率等參數。
?、谟脩?hù)登錄。輸入用戶(hù)名、密碼,與下位機進(jìn)行驗證。
?、圻x擇系統映像文件。選擇系統映像HEX文件,逐行讀入并通過(guò)串口發(fā)送給下位機,如有錯誤重新選擇。
?、芴崾居脩?hù)系統更新完成(或失?。?。顯示系統更新進(jìn)度,提示用戶(hù)系統更新結果。
2 設計中的幾項關(guān)鍵技術(shù)及注意事項
?、偃绻淮涡詫EX文件中全部數據通過(guò)串口發(fā)送給目標芯片,則在通信過(guò)程中發(fā)生一字節的錯誤傳輸,就將導致全部數據需要重新發(fā)送;并且還要考慮到芯片的寫(xiě)Flash處理速度與串口速率的大小關(guān)系,否則將導致接收數據的丟失。為加強通信的可靠性與串口速率的可變性,本文所設計的Bootloader采用半雙工的通信模式與上位機進(jìn)行通信:以HEX文件的一行作為一幀數據,每幀數據校驗結束后向上位機發(fā)送回復數據,上位機根據回復數據判斷發(fā)送數據幀的正誤來(lái)選擇重發(fā)或繼續發(fā)送下一幀;并且在進(jìn)行升級之前與上位機通信進(jìn)行用戶(hù)名和密碼的核對,以確保當前的升級操作不是誤操作。
?、趯IC18系列的程序存儲器的寫(xiě)操作每次寫(xiě)入8字節的塊,并且程序Flash單位寫(xiě)入只能由1變?yōu)?。但是HEX文件的內容并不是按照需要生成的,每幀的數據長(cháng)度可以不同,相鄰幀的地址域的內容也可以不同。為此,在對程序存儲器進(jìn)行寫(xiě)操作時(shí),需要根據地址域內容將數據域內容以8字節為單位合并成數據塊,不足8字節的要填充0xFF。本文所設計的Bootloader程序采用一個(gè)環(huán)形Buffer的結構體來(lái)實(shí)現這一操作:
?、坌酒哪J中斷向量的起始是0x08和0x18,這是不能改變的,要想改變中斷向量入口地址就要在這兩個(gè)地址位置添加跳轉指令,以跳轉到用戶(hù)程序的中斷向量入口地址。PIC18系列的程序存儲器的部分地址區域具有寫(xiě)保護性,為防止此區域之外的Bootloader程序被擦除或改寫(xiě),需要對接收數據的地址域內容進(jìn)行判斷。如果小于用戶(hù)程序起始地址,則需要向上位機回復“寫(xiě)地址錯誤”,并丟棄當前數據幀。
3.結語(yǔ)
實(shí)驗證明,本文設計的Bootloader功能穩定,且控制方便,可根據用戶(hù)的需要靈活改變。譬如,在用戶(hù)程序中添加系統復位機制即可實(shí)現在線(xiàn)升級,為PC端操作界面添加網(wǎng)絡(luò )下載模塊即可實(shí)現遠程控制系統升級,這對于嵌入式產(chǎn)品的發(fā)布和軟件升級極其重要。
參考文獻:
[1].Microchipdatasheethttp://www.dzsc.com/datasheet/Microchip_1097736.html.
評論