一、 題目:
AVR單片機BootLoader功能應用
二、 特色芯片技術介紹、使用說明:
AVR單片機中多數Mega系列單片機具有片內引導程序自編程功能即BootLoader功能。MCU 通過運行一個常駐FLASH的BootLoader 程序,利用任何可用的數據接口讀取代碼后寫入自身的FLASH存儲器中,實現自編程目的。
BootLoader功能將FLASH程序存儲器其分為應用程序區和引導加載區,通過設置熔絲位BOOTSZ0和BOOTSZ1可以配置不同大小的引導加載區空間;通過設置熔絲位BOOTRST用于設置復位向量,當BOOTRST未被編程時器件復位后從應用程序區首地址開始執行,當BOOTRST被編程時器件復位后從引導區首地址開始執行。在設置好BOOTSZ0、BOOTSZ1和BOOTRST熔絲位后,需要把BootLoader程序定位并寫入到引導區中,其首地址由熔絲位ROOTSZ0和BOOTSZ1的編程狀態決定。在單片機上電復位后BootLoader程序開始執行,BootLoader程序可以通過USART、TWI或其它方式從計算機或其它數據源讀取應用程序代碼并寫入到應用區中。
avr-libc提供一組C程序接口API來支持BootLoader功能,包含在<avr/boot.h>中,主要幾個宏有:
boot_page_erase ( address ):擦除FLASH指定頁,address是以字節為單位的FLASH地址。
boot_page_fill ( address, data ):填充BootLoader 緩沖頁,address為以字節為單位的緩沖頁地址(對mega8:0~64),而data是長度為兩個字節的字數據,因此調用前address 的增量應為2。此時data的高字節寫入到高地址,低字節寫入到低地址。
boot_page_write ( address ):boot_page_write執行一次的SPM指令,將緩沖頁數據寫入到FLASH指定頁。
boot_rww_enable ( ):RWW區讀使能,根據自編程的同時是否允許讀FLASH存儲器。RWW(Read-While-Write)可同時讀寫區,在對RWW 區自編程即頁寫入或頁擦除時,由硬件鎖定RWW區,RWW區的讀操作被禁止,在對RWW區的編程結束后應當調用boot_rww_enable()使RWW區開放。
三、 驅動程序的流程圖
本應用以實際使用的Mega系列單片機Mega168為例,說明AVR單片機BootLoader的功能應用。BootLoader程序通過串口與計算機進行通信,執行讀、寫以及跳轉到FLASH應用區的操作。單片機與計算機通信使用Xmodem通信協議,Xmodem通信協議見相關文檔。其程序流程如下圖。(可見附件中“流程圖.vsd”文件)
四、 驅動程序的源程序
對應Mega168的BootLoader程序包括bootloader.c和bootloader.h。
源程序清單如下:(可見附件中“bootloader.c”和“bootloader.h”文件)
五、 設計及調試技巧
BootLoader程序不使用中斷,以查詢的方式讀寫UART數據。退出BootLoader程序后程序指針跳轉到應用程序區首地址,如果要重新執行BootLoader程序以加載應用區程序,必須使用硬件復位。
六、 典型問題及解決辦法
在程序升級過程中遇到多個模塊通過485總線連接在一起時,引起多個模塊響應,造成誤擦除,升級不能成功,在硬件及Bootloader程序中設置升級條件,條件滿足時升級模塊程序,否則跳轉到應用程序區。
單片機源程序如下:
0.png (48.38 KB, 下載次數: 138)
下載附件
2018-8-2 15:30 上傳
所有資料51hei提供下載:
AVR單片機BootLoader功能應用.rar
(88 KB, 下載次數: 144)
2018-8-2 09:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|