国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

ATMega48的Bootloader的軟件實用方法

發布時間:2010-11-1 14:30    發布者:eetech
關鍵詞: Atmega48 , bootloader , 軟件
AVRAtmel公司推出的第一款真正意義上的RISC結構8位單片機,具有先進的指令集及單時鐘周期指令執行時間,數據吞吐率可高達1MIPS,其性能明顯優于其他類型8位單片機。
   
作為AVR主流產品,Mega系列的很多產品(Mega8/Megal6/Mega32/Mega8535等)在硬件上都支持Boot-loader功能。這樣MCU可靈活運行BOOT區程序,實現在應用編程(IAP)及一些高級應用,如系統智能升級,密碼校驗自保護,遠程系統更新等。但有很高性價比的Mega48在硬件上卻不支持Bootloader功能。因此,本文針對Mega48首次提出兩種軟件實現Bootloader的方法:跳轉保存法和倒置法。

1 ATMega48 Bootloader的軟件實現方法
   
Mega48在硬件上不支持Bootloader功能,不能像其他產品那樣通過編程來設置相應的熔絲位以實現Bootloader,只能通過軟件來實現。在Mega48上實現Bootloader的關鍵在于通過軟件實現程序存儲器空間劃分。復位后,BOOT區獲得MCU控制權,自編程結束后MCU控制權返還給APP區.以下將詳細介紹本文提出的兩種新方法。

1.1 跳轉保存法
   
本方法的核心在于跳轉和保存,因此命名為跳轉保存法。跳轉指上電后MCU跳轉至BOOT區,MCU控制權被BOOT區獲得。保存指對APP區程序復位地址的保存,只有保存了該地址才能保證MCU控制權正常返還給APP區。

跳轉保存法采用一般分區方式,即APP區位于程序存儲器空間的低地址處,BOOT區在高地址處。因本文使用的上位機軟件為AVROSP,BOOT區需占用1 KB。此外,由于ATMega48不支持通過熔絲位修改程序的復位向量,故需多劃分給BOOT區4個頁面大小的空間。

為提高程序的可移植性,可使用預定義語句來劃分BOOT區大小,具體實現如下:

    #define PAGESIZE 64
    //每個頁面由64個字節組成
    #define APP_PAGES ((4*1024/PAGESIZE) - ((1*1024+256)/PAGESIZE))
    //APP區的頁面數
    #define APP_END APP_PAGES*PAGESIZE
    //APP區共占用的字節數
   
在編譯過程中,由于ICCAVR編譯器只支持標準的BOO了區大小設置,即256/512/1024/2048 KB。故使用下面方法定義BOOT區大小;

    #pragma text:mytext   
    voidboot()...
    #pragma text;text
   
編譯過程中,在ProjectOptions→Target的Other Options中,添加“-bmytext;0x????”,其中0x????為BOOT區開始的地址。這樣就可以根據實際需要設定BOO了區大小。這對于整個程序空間只有4 KB的ATMcga48來說,是非常適合的。程序具體流程如圖1所示。  


  
如圖1所示,BOOT區程序塊的第一步就是讀取EEPROM中的APP區原復位地址,以便單片機在執行BOOT區程序條件不成立時,跳轉到APP區執行程序。
   
EEPROM_READ(0xfe,AppReset);

當執行BOOT區程序條件成立時,單片機將執行BOOT區程序來更新APP區中的內容。這里特別要注意對即將更新到APP區內程序復位地址的處理:保存該程序中復位地址到RAM中,并修改該地址為BOOT區人口地址。這個工作必須在頁面填充前完成,否則在更新后,單片機復位運行不會首先跳轉到BOOT區。

    if(address==o){
    AppReset=data;
    data=BootReset; //BOOT區的入口
    BootReset=0x1300
    }

BOOT區程序塊最后一步是對APP區程序復位地址的保存。只有通過上電復位才能移交MCU控制權給APP區,這將導致RAM被清零。為了保存RAM中的原APP區程序復位地址,需上電復位前,將這個地址保存到EEPROM中。

    EEPROM_WRITE(Oxfe,APPReset);

值得一提的是,在第一次運行時,程序并不能直接跳轉到BOOT區首地址,所以第一次運行時,APP區內容應為空。這樣,當單片機上電運行時,程序指針(PC)會自增向下運行到第一句可執行代碼,即BOOT區中的首行代碼。同樣,第一次運行時也不可能讀取出正確的返回APP區的入口地址(取出值為0xFF),所以第一次運行時必須保證執行BOOT區程序條件成立,否則將無法正確跳回到APP區。只有執行了BOOT區程序,才能寫入正確的APP返回地址到EEPROM中,從而為以后的運行做好準備。

跳轉保存法遵循了Bootloader的常規實現流程,但它的MCU控制權交接處理比較復雜,下文將提到的倒置法就很好地解決了這個問題。

1.2 倒置法
   
一般來說,程序存儲區的上部為NPP區,下部為BOOT區,這也是常規方法所采取的分區方法。這種分區方法由支持Bootloader功能的芯片程序存儲區中RWW和NRWW的劃分方式所決定的。針對Mega48,它的程序存儲區沒有RWW區和NRWW區之分,SPM指令可以在整個Flash區中執行,所以大可不必拘泥于一般規律,完全可以把APP區和BOOT區倒置,即把程序存儲區的上部劃分為BOOT區,下部劃分為APP區。本文中將這種分區方法稱為倒置分區方法。

倒置法背棄了常規分區形式,創新地采用倒置分區法對程序存儲區進行分區。這樣,在每次上電后,BOOT區自動獲得MCU控制權,而不需修改和保存用戶程序復位向量,這比跳轉保存法簡便。BOOT區大小劃分仍使用預定義語句,具體實現如下:

    #define PAGESIZE 64
    #define APP_PAGES((4096/PAGESIZE)-(1024/PAGESIZE))
    #define APP_END APP_PAGES*PAGESIZE

在對APP區程序編譯時,編譯器的配置方法類似于常規方法中對BOOT區程序編譯時的配置.倒置法流程如圖2所示。  


  
如圖2所示,當執行BOOT區程序條件不成立時,程序跳轉至APP區入口處,該地址是固定的(4096"1024)。
   
具體實現如下:

    Asm(“jmp 0x0C00\n”);
    //跳轉到APP區開始執行

需要注意的是,中斷向量空間在程序存儲器的低地址上,這正好位于BOOT區中,故為了增加APP區和B00T區兩部分程序的獨立性,可在APP區中人為構建除復位向量以外的其他中斷向量空間。在自編程過程中,實施頁寫入時,不是按常規方法的順序從第一個頁開始更新,因為需更新的是APP區所在的頁面,而不是BOOT區所在的,所以要從APP區所在的頁面處開始更新。

倒置法打破了常規的分區模式,大大簡化了對MCU控制權的處理,但其頁面更新處理較為繁瑣。跳轉保存法則因沿襲了常規處理方式,所以頁面更新無需做特別處理,并能很好地兼容硬件實現Bootloader的程序。用戶可以根據實際需要來選擇方法。  

2 硬件測試原理圖及結果
   
調試硬件原理圖如圖3所示。圖3中的ISP接口是用來完成第一次非Bootloadcr的編程方式,從而建立Bootloader的應用環境。這以后的每次編程均可以通過串口直接完成,不需要任何其他設備。

在本文中使用的編譯環境為ICCAVR DEMO版,通過使用AVR單片機的井口下載線完成BOOT區程序的首次寫入。 自編程過程中使用的上位機軟件為AVROSP。經測試兩種方法均能可靠運行。  


  
結 語
   
綜上所述,本文研究并實現了Mega48的Bootloader功能,提出了兩種軟件實現方法,并分別在硬件上成功實現,為基于Mcga48編寫高效,專用的Bootloader程序奠定了基礎。
本文地址:http://m.qingdxww.cn/thread-35616-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕亚洲一区| 日韩精品久久久免费观看夜色| 日本一区二区三区在线 观看网站| 色的综合| 视频麻豆| 色资源网| 视频免费1区二区三区| 亚洲日韩国产有码| 99视频在线精品免费观看18| 一区不卡在线观看| 成人高清网站| 老女老肥熟国产在线视频| 午夜视频体内射.COM.COM| 亚洲欧美日韩精品| 日b视频在线观看| 亚洲欧美日韩伦中文| 亚洲精品成人久久| 99综合之综合久久伊人| 日日做夜夜欢狠狠免费软件| 欧美精品区| 欧美日韩精品在线| 天天综合久久久网| 无人区乱码1区2区3区免费| 中文字幕在线观看日剧网| 国产综合欧美区在线| 忘忧草高清| 一级毛片全部免费播放| 欧日韩在线不卡视频| 亚洲成人社| 亚洲天堂爱爱| 丁香成人网址| 三级视频黄色| 亚洲精品乱码久久久久久| 日韩亚洲一区中文字幕在线| 在线亚洲免费| 在线av色| 久久香蕉国产线看观看精品| 野花韩国高清完整版在线| 日韩亚色| 天天天天天天操| 亚洲成人精品久久|