一些注意事項:
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的ISP燒錄
總的電子線路如下 總電路 1.png 這裡先介紹一下這個晶元 74hc244是一款高速cmos器件,74hc244引腳相容低功耗肖特基ttl lsttl 系列。74hc244是八路正相緩衝器 線路驅動器,具有三態輸出。該三態輸出由輸出使能端1oe和2oe控制。任意noe上的高電平將使輸出端呈現高阻態...
BootLoader的基本概念
板級支援包 bsp bsp是板級支援包 board support package 的縮寫,是通常用在嵌入行業中的乙個術語,用來代表在乙個特殊硬體平台上快速構建乙個嵌入作業系統所需的原始資料或者二進位制軟體包。bsp的作用是支援作業系統,使之能夠更好的執行於硬體平台。bsp是相對於作業系統而言的,不...
bootloader的啟動流程分析
bootloader的啟動流程有兩個階段 stage1和stage2。一 stage1完成的基本工作 1 基本硬體初始化 包括遮蔽所有的中斷 設定cpu的速度和時鐘頻率 ram初始化 初始化led 關閉內部指令和資料cache燈。2 為載入stage2準備ram空間,通常為了獲得更好的執行速度,通常...