<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > AVR之BOOTLOADER技術(shù)詳解

AVR之BOOTLOADER技術(shù)詳解

作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò ) 收藏
ATmega128具備引導加載支持的用戶(hù)程序自編程功能(In-System Programming by On-chipBoot Program),它提供了一個(gè)真正的由MCU本身自動(dòng)下載和更新(采用讀/寫(xiě)同時(shí)"Read-While-Write"進(jìn)行的方式)程序代碼的系統程序 自編程更新的機制。利用AVR的這個(gè)功能,可以實(shí)現在應用編程(IAP)以及實(shí)現系統程序的遠程自動(dòng)更新的應用。
IAP的本質(zhì)就是,MCU可以靈活地運行一個(gè)常駐Flash的引導加載程序(Boot Loader Program),實(shí)現對用戶(hù)應用程序的在線(xiàn)自編程更新。引導加載程序的設計可以使用任何的可用的數據接口和相關(guān)的協(xié)議讀取代碼,或者從程序存儲器中讀取 代碼,然后將代碼寫(xiě)入(編程)到Flash存儲器中。
引導加載程序有能力讀寫(xiě)整個(gè)Flash存儲器,包括引導加載程序所在的引導加載區本身。引導加載程序還可以對自身進(jìn)行更新修改,甚至可以將自身刪除,使系 統的自編程能力消失。引導加載程序區的大小可以由芯片的熔絲位設置,該段程序區還提供兩組鎖定位,以便用戶(hù)選擇對該段程序區的不同級別的保護。
本節將給出一個(gè)實(shí)際的的Boot Loader程序,它可以配合Windows中的超級終端程序,采用Xmodem傳輸協(xié)議,通過(guò)RS232接口下載更新用戶(hù)的應用程序。
5.2.1 基本設計思想
1. Boot Loader程序的設計要點(diǎn)
Boot Loader程序的設計是實(shí)現IAP的關(guān)鍵,它必須能過(guò)通過(guò)一個(gè)通信接口,采用某種協(xié)議正確的接收數據,再將完整的數據寫(xiě)入到用戶(hù)程序區中。本例Boot Loader程序的設計要點(diǎn)有:
(1)采用ATmega128的USART口實(shí)現與PC之間的簡(jiǎn)易RS232三線(xiàn)通信;
(2) 采用Xmodem通信協(xié)議完成與PC機之間的數據交換;
(3)用戶(hù)程序更新完成后自動(dòng)轉入用戶(hù)程序執行;
(4) Boot Loader程序采用C語(yǔ)言?xún)惹禔VR匯編方式編寫(xiě),閱讀理解方便,可移植性強,代碼小于1K字。
2. Xmodem通信協(xié)議
Xmodem協(xié)議是一種使用撥號調制解調器的個(gè)人計算機通信中廣泛使用的異步文件運輸協(xié)議。這種協(xié)議以128字節塊的形式傳輸數據,并且每個(gè)塊都使用一個(gè) 校驗和過(guò)程來(lái)進(jìn)行錯誤檢測。如果接收方關(guān)于一個(gè)塊的校驗和與它在發(fā)送方的校驗和相同時(shí),接收方就向發(fā)送方發(fā)送一個(gè)認可字節。為了便于讀者閱讀程序,下面簡(jiǎn) 要說(shuō)明該協(xié)議的主要特點(diǎn),有關(guān)Xmoden的完整的協(xié)議請參考其它相關(guān)的資料。
(1) Xmodem的控制字符: 01H、 04H、 06H、 15H、 18H、 1AH。
(2) Xmodem傳輸數據塊格式:"
個(gè)字節的數據塊...> "。其中為起始字節;
為數據塊編號字節,每次加一;是前一字節的反碼;接下來(lái)是長(cháng)度為128字節的數據塊;最后的是128字節數據的CRC校驗碼,長(cháng)度為2個(gè)字節。
(3)接收端收到一個(gè)數據塊并校驗正確時(shí),回送;接收錯誤回送;而回送表示要發(fā)送端停止發(fā)送。
(4) 發(fā)送端收到后,可繼續發(fā)送下一個(gè)數據塊(packNO+1);而收到則可再次重發(fā)上一個(gè)數據塊。
(5)發(fā)送端發(fā)送表示全部數據發(fā)送完成。如果最后需要發(fā)送的數據不足128個(gè)字節,用填滿(mǎn)一個(gè)數據塊。
(6) 控制字符"C"有特殊的作用,當發(fā)送端收到"C"控制字符時(shí),它回重新開(kāi)始以CRC校驗方式發(fā)送數據塊(packNO = 1)。
(7) 每發(fā)送一個(gè)新的數據塊
加1,加到OxFF后下一個(gè)數據塊的
為零。
(8) 校驗方式采用16位CRC校驗(X^16 + X^12 + X^5 + 1)。
5.2.2 源程序代碼
下面給出的源程序是在ICCAVR中實(shí)現的。
/*****************************************************
采用串行接口實(shí)現Boot_load應用的實(shí)例
華東師大電子系 馬 潮 2004.07
Compiler: ICC-AVR 6.31
Target: Mega128
Crystal: 16Mhz
Used: T/C0,USART0
*****************************************************/
#include
#define SPM_PAGESIZE 256 //M128的一個(gè)Flash頁(yè)為256字節(128字)
#define BAUD 38400 //波特率采用38400bps
#define CRYSTAL 16000000 //系統時(shí)鐘16MHz
//計算和定義M128的波特率設置參數
#define BAUD_SETTING (unsigned char)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)
#define BAUD_H (unsigned char)(BAUD_SETTING>>8)
#define BAUD_L (unsigned char)BAUD_SETTING
#define DATA_BUFFER_SIZE SPM_PAGESIZE //定義接收緩沖區長(cháng)度
//定義Xmoden控制字符
#define XMODEM_NUL 0x00
#define XMODEM_SOH 0x01
#define XMODEM_STX 0x02
#define XMODEM_EOT 0x04
#define XMODEM_ACK 0x06
#define XMODEM_NAK 0x15
#define XMODEM_CAN 0x18
#define XMODEM_EOF 0x1A
#define XMODEM_RECIEVING_WAIT_CHAR C
//定義全局變量
const char startupString[]="Type d download, Others run app.nr国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>