一些注意事項:
1.熔絲位的燒寫:BOOTRST要進行編程,這樣單片機在復位后自動跳轉到bootloader區執行bootloader的代碼,然后要根據自己bootloader的大小設置boot區的的熔絲位:具體設置如下圖,這里我選擇的是1024大小(注意1代表為編程,0代表已編程):
2.設置引導區鎖定位:為了保護bootloader不被應用程序修改或者擦除,所以要對其進行保護,Atmega提供了熔絲位的保護方式,具體設置如下圖(我設置的為BLB0為11,BLB1為00):
3.Flash頁的設定:因flash的擦除和寫入是按照頁來操作的,看手冊上說是1頁有128個字節,但實際調試時候發現需要一次寫入256個字節才有效的,如果按照128來寫入,會將第二個128的內容覆蓋掉第一個128字節的內容,那就按照實際為準了。
4.Xmodem協議的注意事項:具體的xmodem不在本文敘述了,只說一下要注意的地方,校驗和是可以選擇的,我使用的是checksum(就是單純的累加),也可以選擇16為的CRC,這個是根據單片機第一次返回的響應字節來確定的,另外當包的序列號超過255時會重新從0開始而不是從1開始,首次傳輸是從1開始編號的,這個要注意一下。
5.文件格式文件:和網上好多人一樣,遇到同樣的文件,在bootloader將應用程序燒寫到flash中后,發現沒有執行應用程序,開始我也以為是跳轉不成成功的問題,上網查了半天都沒找到答案,都是問問題的L。沒辦法,靠自己了,一致納悶,燒寫到Flash中的程序和原始文件內容一模一樣怎么就不能執行啊,后來偶然用燒寫軟件打開要燒寫的固件,發現內容和我用16進制工具打開的并不一樣,Oh my god,豁然想到了問題的關鍵,原來用ICC生成的hex文件是intel hex形式,Intel HEX文件是由一行行符合Intel HEX文件格式的文本所構成的ASCII文本文件。在Intel HEX文件中,每一行包含一個HEX記錄。這些記錄由對應機器語言碼和/或常量數據的十六進制編碼數字組成。Intel HEX文件通常用于傳輸將被存于ROM或者EPROM中的程序和數據。大多數EPROM編程器或模擬器使用Intel HEX文件。而實際存儲到Flash中的數據是要從這個HEX文件中提取出來,然后在通過xmodem發送到單片機,不要直接發送ICC生成的HEX文件,轉換的話可以自己寫一個小工具或者上網搜類似功能的工具,為了省事,我找了一個叫hex2bin的工具做的轉換。
-
AVR
+關注
關注
11文章
1125瀏覽量
79439 -
bootloader
+關注
關注
2文章
238瀏覽量
46332
發布評論請先 登錄
相關推薦
轉:Kboot內的bootloader工程應用注意事項總結
Stm32的bootloader和App的編寫注意事項有哪些?
實現AVR的BOOTLOADER工作需要注意那些事項?
avr單片機熔絲位設置方法及步驟及設置注意事項

評論