ATMega48的Bootloader的軟件實(shí)用方法_第1頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、atmega48的bootloader的軟件實(shí)用方法是公司推出的第一款真正意義上的risc結(jié)構(gòu)8位,具有先進(jìn)的命令集及單時(shí)鐘周期命令執(zhí)行時(shí)光,數(shù)據(jù)吞吐率可高達(dá)1,其性能顯然優(yōu)于其他類型8位單片機(jī)。作為avr主流產(chǎn)品,mega系列的無(wú)數(shù)產(chǎn)品(mega8megal6mega32mega8535等)在硬件上都支持boot-loader功能。這樣可靈便運(yùn)行boot區(qū)程序,實(shí)現(xiàn)在應(yīng)用編程(iap)及一些高級(jí)應(yīng)用,如系統(tǒng)智能升級(jí),密碼校驗(yàn)自庇護(hù),遠(yuǎn)程系統(tǒng)更新等。但有很高性價(jià)比的mega48在硬件上卻不支持bootloader功能。因此,本文針對(duì)mega48首次提出兩種軟件實(shí)現(xiàn)bootloader的辦法:跳

2、轉(zhuǎn)保存法和倒置法。1 atmega48 bootloader的軟件實(shí)現(xiàn)辦法mega48在硬件上不支持bootloader功能,不能像其他產(chǎn)品那樣通過(guò)編程來(lái)設(shè)置相應(yīng)的熔絲位以實(shí)現(xiàn)bootloader,只能通過(guò)軟件來(lái)實(shí)現(xiàn)。在mega48上實(shí)現(xiàn)bootloader的關(guān)鍵在于通過(guò)軟件實(shí)現(xiàn)程序存儲(chǔ)器空間劃分。復(fù)位后,boot區(qū)獲得mcu控制權(quán),自編程結(jié)束后mcu控制權(quán)返還給app區(qū).以下將具體介紹本文提出的兩種新辦法。1.1 跳轉(zhuǎn)保存法本辦法的核心在于跳轉(zhuǎn)和保存,因此命名為跳轉(zhuǎn)保存法。跳轉(zhuǎn)指上電后mcu跳轉(zhuǎn)至boot區(qū),mcu控制權(quán)被boot區(qū)獲得。保存指對(duì)app區(qū)程序復(fù)位地址的保存,惟獨(dú)保存了該地址才

3、干保證mcu控制權(quán)正常返還給app區(qū)。跳轉(zhuǎn)保存法采納普通分區(qū)方式,即app區(qū)位于程序存儲(chǔ)器空間的低地址處,boot區(qū)在高地址處。因本文用法的上位機(jī)軟件為avrosp,boot區(qū)需占用1 kb。此外,因?yàn)閍tmega48不支持通過(guò)熔絲位修改程序的復(fù)位向量,故需多劃分給boot區(qū)4個(gè)頁(yè)面大小的空間。為提高程序的可移植性,可用法預(yù)定義語(yǔ)句來(lái)劃分boot區(qū)大小,詳細(xì)實(shí)現(xiàn)如下:define pagesize 64每個(gè)頁(yè)面由64個(gè)字節(jié)組成define app_pages (4*1024pagesize) - (1*1024+256)pagesize)app區(qū)的頁(yè)面數(shù)define app_end app_p

4、ages*pagesizeapp區(qū)共占用的字節(jié)數(shù)在編譯過(guò)程中,因?yàn)閕ccavr編譯器只支持標(biāo)準(zhǔn)的boo了區(qū)大小設(shè)置,即25651210242048 kb。故用法下面辦法定義boot區(qū)大??;pragma text:mytextvoidboot()pragma text;text編譯過(guò)程中,在projectoptionstarget的other options中,添加“-bmytext;0x?”,其中0x?為boot區(qū)開頭的地址。這樣就可以按照實(shí)際需要設(shè)定boo了區(qū)大小。這對(duì)于囫圇程序空間惟獨(dú)4 kb的atmcga48來(lái)說(shuō),是十分適合的。程序詳細(xì)流程1所示。1所示,boot區(qū)程序塊的第一步就是讀取

5、eeprom中的app區(qū)原復(fù)位地址,以便單片機(jī)在執(zhí)行boot區(qū)程序條件不成立時(shí),跳轉(zhuǎn)到app區(qū)執(zhí)行程序。eeprom_read(0xfe,appreset);當(dāng)執(zhí)行boot區(qū)程序條件成立時(shí),單片機(jī)將執(zhí)行boot區(qū)程序來(lái)更新app區(qū)中的內(nèi)容。這里特殊要注重對(duì)即將更新到app區(qū)內(nèi)程序復(fù)位地址的處理:保存該程序中復(fù)位地址到ram中,并修改該地址為boot區(qū)人口地址。這個(gè)工作必需在頁(yè)面填充前完成,否則在更新后,單片機(jī)復(fù)位運(yùn)行不會(huì)首先跳轉(zhuǎn)到boot區(qū)。if(address=o)appreset=data;data=bootreset; boot區(qū)的入口bootreset=0x1300boot區(qū)程序塊最后

6、一步是對(duì)app區(qū)程序復(fù)位地址的保存。惟獨(dú)通過(guò)上電復(fù)位才干移交mcu控制權(quán)給app區(qū),這將導(dǎo)致ram被清零。為了保存ram中的原app區(qū)程序復(fù)位地址,需上電復(fù)位前,將這個(gè)地址保存到eeprom中。eeprom_write(oxfe,appreset);值得一提的是,在第一次運(yùn)行時(shí),程序并不能挺直跳轉(zhuǎn)到boot區(qū)首地址,所以第一次運(yùn)行時(shí),app區(qū)內(nèi)容應(yīng)為空。這樣,當(dāng)單片機(jī)上電運(yùn)行時(shí),程序指針(pc)會(huì)自增向下運(yùn)行到第一句可執(zhí)行代碼,即boot區(qū)中的首行代碼。同樣,第一次運(yùn)行時(shí)也不行能讀取出正確的返回app區(qū)的入口地址(取出值為0xff),所以第一次運(yùn)行時(shí)必需保證執(zhí)行boot區(qū)程序條件成立,否則將無(wú)

7、法正確跳回到app區(qū)。惟獨(dú)執(zhí)行了boot區(qū)程序,才干寫入正確的app返回地址到eeprom中,從而為以后的運(yùn)行做好預(yù)備。跳轉(zhuǎn)保存法遵循了bootloader的常規(guī)實(shí)現(xiàn)流程,但它的mcu控制權(quán)交接處理比較復(fù)雜,下文將提到的倒置法就很好地解決了這個(gè)問(wèn)題。1.2 倒置法普通來(lái)說(shuō),程序存儲(chǔ)區(qū)的上部為npp區(qū),下部為boot區(qū),這也是常規(guī)辦法所實(shí)行的分區(qū)辦法。這種分區(qū)辦法由支持bootloader功能的芯片程序存儲(chǔ)區(qū)中rww和nrww的劃分方式所打算的。針對(duì)mega48,它的程序存儲(chǔ)區(qū)沒有rww區(qū)和nrww區(qū)之分,spm命令可以在囫圇flash區(qū)中執(zhí)行,所以大可不必拘泥于普通邏輯,徹低可以把a(bǔ)pp區(qū)和b

8、oot區(qū)倒置,即把程序存儲(chǔ)區(qū)的上部劃分為boot區(qū),下部劃分為app區(qū)。本文中將這種分區(qū)辦法稱為倒置分區(qū)辦法。倒置法背棄了常規(guī)分區(qū)形式,創(chuàng)新地采納倒置分區(qū)法對(duì)程序存儲(chǔ)區(qū)舉行分區(qū)。這樣,在每次上電后,boot區(qū)自動(dòng)獲得mcu控制權(quán),而不需修改和保存用戶程序復(fù)位向量,這比跳轉(zhuǎn)保存法簡(jiǎn)便。boot區(qū)大小劃分仍用法預(yù)定義語(yǔ)句,詳細(xì)實(shí)現(xiàn)如下:define pagesize 64define app_pages(4096pagesize)-(1024pagesize)define app_end app_pages*pagesize在對(duì)app區(qū)程序編譯時(shí),編譯器的配置辦法類似于常規(guī)辦法中對(duì)boot區(qū)程序編

9、譯時(shí)的配置倒置法流程2所示。2所示,當(dāng)執(zhí)行boot區(qū)程序條件不成立時(shí),程序跳轉(zhuǎn)至app區(qū)入口處,該地址是固定的(4096"1024)。詳細(xì)實(shí)現(xiàn)如下:asm(“jmp 0x0c00n”);跳轉(zhuǎn)到app區(qū)開頭執(zhí)行需要注重的是,中斷向量空間在程序存儲(chǔ)器的低地址上,這正巧位于boot區(qū)中,故為了增強(qiáng)app區(qū)和b00t區(qū)兩部分程序的自立性,可在app區(qū)中人為構(gòu)建除復(fù)位向量以外的其他中斷向量空間。在自編程過(guò)程中,實(shí)施頁(yè)寫入時(shí),不是按常規(guī)辦法的挨次從第一個(gè)頁(yè)開頭更新,由于需更新的是app區(qū)所在的頁(yè)面,而不是boot區(qū)所在的,所以要從app區(qū)所在的頁(yè)面處開頭更新。倒置法打破了常規(guī)的分區(qū)模式,大大簡(jiǎn)化了對(duì)mcu控制權(quán)的處理,但其頁(yè)面更新處理較為繁瑣。跳轉(zhuǎn)保存法則因沿襲了常規(guī)處理方式,所以頁(yè)面更新無(wú)需做特殊處理,并能很好地兼容硬件實(shí)現(xiàn)bootloader的程序。用戶可以按照實(shí)際需要來(lái)挑選辦法。2 硬件測(cè)試原理圖及結(jié)果調(diào)試硬件原理圖3所示。圖3中的isp接口是用來(lái)完成第一次非bootloadcr的編程方式,從而建立bootloader的應(yīng)用環(huán)境。這以后的每次編程均可以通過(guò)串口挺直完成,不需要任何其他設(shè)備。在本文中用法的編譯環(huán)境為iccavr demo版,通過(guò)用法avr單片機(jī)的井口下載線完成b

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論