<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è) > 嵌入式系統 > 設計應用 > AT91SAM7Sxx系列MCU Boot-Loader的設計

AT91SAM7Sxx系列MCU Boot-Loader的設計

作者: 時(shí)間:2011-08-27 來(lái)源:網(wǎng)絡(luò ) 收藏

AT91SAM7xx 系列是Atmel 公司推出的基于A(yíng)RM7內核的32位MCU。用戶(hù)代碼編譯在Thumb 模式下可獲得16位指令寬度,從而節約內部程序空間。目前這個(gè)系列芯片的內部空間范圍從32KB到256KB, RAM空間范圍是8KB 到 6?KB。除了SAM7S32外,這個(gè)系列的芯片都內嵌有USB2.0全速通訊模塊。本文介紹的就是基于USB接口的用戶(hù)程序升級工具。

我們知道 Atmel 公司為這個(gè)系列芯片提供了 SAM-BA 下載工具。這個(gè)工具在產(chǎn)品階段的應用有一定的局限,就是為了啟動(dòng)芯片內部的 SAM-BA 程序,用戶(hù)需要短接芯片的TST引腳到電源端,然后上電10秒鐘,再重新上電.本文介紹的Boot-loader 程序常駐在芯片內部空間,啟動(dòng)方法是用戶(hù)按住產(chǎn)品的一個(gè)特定的按鍵然后上電。這樣大大簡(jiǎn)化了產(chǎn)品固件的升級過(guò)程。

1 Boot-loader 在中的位置

為了在整個(gè)SAM7Sxx系列中通用同一個(gè)Boot-Loader程序,我們把它定位在Flash的低端位置偏移量為0x800至0x15ff位置,共占用3584個(gè)字節空間。相應的用戶(hù)程序在鏈接時(shí)要避開(kāi)使用這段地址。筆者采用的是IAR編譯環(huán)境,需要修改鏈接目標定位控制文件達到定位目標文件的目的。以S256為例,需要修改at91SAM7S256_NoRemap.xcl 文件

? Boot-loader 的鏈接控制文件中需要修改的項目有:
-DROMSTART1=00 中斷向量表起始位置
-DROMEND1=3F 中斷向量表結束位置
-DROMSTART2=800 目標程序起始位置
-DROMEND2=15FF 目標程序結束位置
CODE, ICODE CONST 的定位同樣需要相應的修改。
? Boot-loader 啟動(dòng)文件為Atmel提供(Cstartup.s79),但需要作一定修改:
RSEG ICODE:CODE:ROOT(2) 改為RSEG INTVEC:CODE:ROOT(2) 把異常向量表定位在0x00至0x3f.
異常向量表的末端添加語(yǔ)句RSEG ICODE:CODE:ROOT(2) 把啟動(dòng)代碼定位在CODE段.
? 用戶(hù)應用項目需要修改at91SAM7S256_NoRemap.xcl文件中
-DROMSTART1=00 中斷向量表及啟動(dòng)代碼起始位置
-DROMEND1=7FF 中斷向量表及啟動(dòng)代碼結束位置
-DROMSTART2=1600 目標程序起始位置
-DROMEND2=3FFFF 目標程序結束位置
CODE, ICODE CONST 的定位同樣需要相應的修改。以避免和Boot-Loader 地址重疊。

2 Boot-Loader 的實(shí)現

2.1 Boot-Loader 的啟動(dòng)
上電復位后,PC指針首先指向Boot-Loader,Boot-Loader首先初始化IO口,然后判斷用戶(hù)有無(wú)按下啟動(dòng)Boot-Loader的按鍵。如果該鍵沒(méi)有被按下,同時(shí)Flash內有用戶(hù)代碼,則跳到用戶(hù)程序入口。下面代碼是用匯編寫(xiě)用戶(hù)入口子程序。
PUBLIC EnterUser
CODE16
EnterUser:
ldr r1, = 0x15fc ; 0x15fc 保存用戶(hù)入口地址
ldr r0, [r1,#0]
bx r0
如果用戶(hù)在上電時(shí)有按下該鍵,則運行Boot-Loader 的主循環(huán)。
2.2 USB 驅動(dòng)
USB驅動(dòng)采用HID類(lèi)以省下開(kāi)發(fā)驅動(dòng)程序的需要.HID的報表采用如下結構:
const char LoaderDescriptor[] = {
0x06, 0xA0, 0xFF, // 廠(chǎng)家定義用途
0x09, 0x01, // 廠(chǎng)家定義用途
0xA1, 0x01, // 報表集合:應用
// The Input report
0x09, 0x03, // 廠(chǎng)家定義的報表ID
0x15, 0x00, // 邏輯最小值 (0)
0x26, 0xFF, 0x00, // 邏輯最大值(255)
0x75, 0x08, // 報表位寬(8 位)
0x95, 0x03, // 報表長(cháng)度(3 )
0x81, 0x02, // 輸入報表
// The Output report
0x09, 0x04, // 廠(chǎng)家定義的報表ID
0x15, 0x00, // 邏輯最小值 (0)
0x26, 0xFF, 0x00, // 邏輯最大值 (255)
0x75, 0x08, // 報表位寬
0x96, 0x04, 0x01, // 報表長(cháng)度(260 字節)
0x91, 0x02, // 輸出報表
0xC0}; // 集合結束
這樣PC下傳的數據報大小是260B,其中第一字節為寫(xiě)命令,第二,第三字節是用戶(hù)固件的頁(yè)地址(用戶(hù)固件需編譯為二進(jìn)制文件*.bin).接下來(lái)是256字節的固件數據。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: AT91SAM7Sxx VID Flash

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品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>