當單片機已經(jīng)焊接到電路板上時,如何更簡單更便捷的為單片機升級固件便成了一件值得深思的問題。縱觀市面上現(xiàn)有的大多數(shù)升級方式,不僅需要硬件支持,還需要專用的燒寫工具或軟件來升級固件,升級過程較為復雜。本文介紹了一種更簡單更便捷的固件升級方式,不需要任何專用工具,只是簡單的一個刪除粘貼操作,便可實現(xiàn)固件更新。
當程序運行時,按住指定的按鍵后按一下復位按鍵。就啟動了升級程序,此時將單片機的USB從機端口連接電腦。在電腦中可以發(fā)現(xiàn)一個U盤設備,如圖1和圖2所示。
圖1 U盤顯示
圖2 U盤文件
將原文件刪除,然后將最新固件的bin文件復制到此U盤中,此時U盤中只有用戶用于升級的bin文件。然后拔下USB線,復位重啟,便可運行最新固件。
以上就是詳細的升級步驟,相比其他方法更便捷也更簡單。接下來以NXP公司的LPC54608單片機為例來介紹這種升級方法的制作流程。
1.硬件基礎
此升級方法的制作至少需要單片機有一個硬件的USB從機。和足夠的flash用來存放一段bootloade的代碼。
2.編寫USB驅(qū)動程序
首先要寫好USB驅(qū)動程序,將片內(nèi)FLASH的前半段用作代碼空間,后半段用作存儲空間。使電腦能將其識別為一個U盤,并能夠進行讀寫操作。USB驅(qū)動的編寫可參考官方例程。
3.對存儲空間進行修改
在步驟2中,我們已經(jīng)將FLASH的后半段用作U盤的存儲空間,在LPC54608中,片內(nèi)flash是512K,存儲起始地址是0x40000;結(jié)束地址是0x80000。根據(jù)FAT文件系統(tǒng)的存儲協(xié)議,存儲起始地址開始的前幾個扇區(qū)存放的是引導部分,F(xiàn)AT表項部分和根目錄部分。數(shù)據(jù)是從根目錄結(jié)束扇區(qū)的下一個扇區(qū)的開始存儲。
在本步驟中,對程序的改進就是將數(shù)據(jù)扇區(qū)之前的幾個扇區(qū),放在RAM中,使0x40000地址開始存放的即為bin文件的數(shù)據(jù)。框圖如圖3所示。
圖3 存儲模型
4.對存儲內(nèi)容進行修改
完成步驟3之后。每次接上USB線,電腦都要對u盤進行格式化,因為RAM區(qū)的數(shù)據(jù)為0,電腦需要從新格式化建立FAT文件系統(tǒng)并將存儲的相關信息寫到RAM中對應的區(qū)域。在window10的電腦中,格式化之后電腦還會在U盤中增加幾個必要文件使我們寫入的bin文件數(shù)據(jù)并不是從0x40000開始,因此要進行優(yōu)化。
在程序初始化的時候。根據(jù)FAT的協(xié)議填充RAM區(qū)域數(shù)據(jù)。包括引導扇區(qū),F(xiàn)AT表項和根目錄。可以在引導扇區(qū)中優(yōu)化FAT表個數(shù)和根目錄大小來節(jié)省RAM空間。并在根目錄中放入一個大小為整個U盤大小的bin文件,之后在FAT表項中填充所有可用的簇,使USB線連接上之后,電腦端不需要再格式化并如圖1和圖2所示。
5.編寫bootloader
完成步驟4之后,大部分工作已經(jīng)完成。接下來就要編寫跳轉(zhuǎn)函數(shù)來實現(xiàn)向用戶程序的跳轉(zhuǎn)。在LPC54608中,我們以flash的前32K用作升級程序的bootloader區(qū)域,就是0x0~0x8000之間。32K之后用作用戶代碼區(qū)域。
對于我們制作的U盤存儲空間來說,0x8000處開始存放的就是用戶bin文件。因此,我們只要在更新完固件后跳轉(zhuǎn)到0x8000處執(zhí)行程序就行了。跳轉(zhuǎn)代碼要包括SP指針的重新賦值,中斷向量表的重映射。
6.增加按鍵判斷
程序在上電之后,從0x0地址處取址,此處運行的是bootloader程序,程序在開始的時候判斷按鍵是否按下,如果按下,就進入bootloader程序,如果沒有按下,就跳轉(zhuǎn)到用戶代碼。
至此,整個升級方法的時間就完成了!現(xiàn)在開始體驗便捷的升級方式吧。
-
單片機固件更新
+關注
關注
0文章
1瀏覽量
1065
原文標題:如何更簡單的給單片機更新固件
文章出處:【微信號:Zlgmcu7890,微信公眾號:周立功單片機】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論