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