技術頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術頻道 > 應用方案 > AT91SAM7Sxx系列MCU Boot-Loader的設計

AT91SAM7Sxx系列MCU Boot-Loader的設計

時間:2011-02-28 09:27:04來源:boulifairy

導語:?AT91SAM7xx 系列是Atmel 公司推出的基于ARM7內(nèi)核的32位MCU。用戶代碼編譯在Thumb 模式下可獲得16位指令寬度,從而節(jié)約內(nèi)部程序空間。

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

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

1 Boot-loader 在Flash中的位置

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

      Boot-loader 的鏈接控制文件中需要修改的項目有:

-DROMSTART1=00 中斷向量表起始位置

-DROMEND1=3F 中斷向量表結束位置

-DROMSTART2=800 目標程序起始位置

-DROMEND2=15FF 目標程序結束位置

CODE, ICODE CONST 的定位同樣需要相應的修改。

      Boot-loader 啟動文件為Atmel提供(Cstartup.s79),但需要作一定修改:

      RSEG ICODE:CODE:ROOT(2) 改為RSEG INTVEC:CODE:ROOT(2) 把異常向量表定位在0x00至0x3f.

      異常向量表的末端添加語句RSEG ICODE:CODE:ROOT(2) 把啟動代碼定位在CODE段.

 用戶應用項目需要修改at91SAM7S256_NoRemap.xcl文件中

-DROMSTART1=00 中斷向量表及啟動代碼起始位置

-DROMEND1=7FF 中斷向量表及啟動代碼結束位置

-DROMSTART2=1600 目標程序起始位置

-DROMEND2=3FFFF 目標程序結束位置

CODE, ICODE CONST 的定位同樣需要相應的修改。以避免和Boot-Loader 地址重疊。

2 Boot-Loader 的實現(xiàn)

2.1 Boot-Loader 的啟動

      上電復位后,PC指針首先指向Boot-Loader,Boot-Loader首先初始化IO口,然后判斷用戶有無按下啟動Boot-Loader的按鍵。如果該鍵沒有被按下,同時Flash內(nèi)有用戶代碼,則跳到用戶程序入口。下面代碼是用匯編寫用戶入口子程序。

PUBLIC EnterUser

CODE16

EnterUser:

ldr r1, = 0x15fc ; 0x15fc 保存用戶入口地址

ldr r0, [r1,#0]

bx r0

      如果用戶在上電時有按下該鍵,則運行Boot-Loader 的主循環(huán)。

2.2 USB 驅(qū)動

      USB驅(qū)動采用HID類以省下開發(fā)驅(qū)動程序的需要.HID的報表采用如下結構:

const char LoaderDescriptor[] = {

0x06, 0xA0, 0xFF, // 廠家定義用途

0x09, 0x01, // 廠家定義用途

0xA1, 0x01, // 報表集合:應用

// The Input report

0x09, 0x03, // 廠家定義的報表ID

0x15, 0x00, // 邏輯最小值 (0)

0x26, 0xFF, 0x00, // 邏輯最大值(255)

0x75, 0x08, // 報表位寬(8 位)

0x95, 0x03, // 報表長度(3 )

0x81, 0x02, // 輸入報表

// The Output report

0x09, 0x04, // 廠家定義的報表ID

0x15, 0x00, // 邏輯最小值 (0)

0x26, 0xFF, 0x00, // 邏輯最大值 (255)

0x75, 0x08, // 報表位寬

0x96, 0x04, 0x01, // 報表長度(260 字節(jié))

0x91, 0x02, // 輸出報表

0xC0}; // 集合結束

      這樣PC下傳的數(shù)據(jù)報大小是260B,其中第一字節(jié)為寫命令,第二,第三字節(jié)是用戶固件的頁地址(用戶固件需編譯為二進制文件*.bin).接下來是256字節(jié)的固件數(shù)據(jù)。

2.3 Flash 的操作

      把所有操作Flash的函數(shù)定義在RAM空間,例如:

__ramfunc int CFlash::Erase_All(void)

      因為SAM7Sxx系列的Flash采用單層結構,不允許程序在Flash上運行的同時改寫Flash的內(nèi)容, 所以要將操作Flash的程序放在RAM中運行.

2.4 數(shù)據(jù)包的處理

      第一個數(shù)據(jù)包包含用戶啟動代碼和異常向量表。Boot-Loader需要修改復位向量,并保存用戶入口地址(偽代碼如下)

if (Page == 0) {

Get User Entrance Address

Replace User Entrance Address with Boot-Loader Entrance Address

Program first page into Flash

Set flag to indicate an unfinished task

Calculate checksum and return to PC

}

收到結束指令后需要設置完成標志(偽代碼如下):

if (Command == END_OF_TASK) {

Write last page into Flash

Reset unfinished flag

Calculate checksum and return to PC

}

如果頁地址與boot-loader 重疊,則不進行寫操作,僅返成功標志給PC:

if ( (Page >= BL_START_PAGE) && (Page <= BL_END_PAGE) ) {

ret = true ;

break ;

}

3 PC端下載軟件的實現(xiàn)簡介

下面是標準的PC端操作流程:

- 獲得USB HID 類GUID

- 獲得所有HID設備結構數(shù)組

- 根據(jù)VID PID 獲得設備信息

- 打開設備句柄

- 與Boot-Loader 進行通訊

      以上操作步驟在Windows, MacOS, Linux 中都是通用的,讀者可以在參考文獻3找到關于PC端程序?qū)崿F(xiàn)的具體方法。

4 結論

      本文介紹的實現(xiàn)方法簡化了AT91SAM7Sxx系列用戶程序升級過程。HID類的USB接口增加了產(chǎn)品跨平臺應用的靈活性。筆者測試下載25K代碼約2秒鐘,具有一定實用價值。

參考文獻

[1] at91sam7s_full.pdf. Http://www.at91.com

[2] HID1_11.pdf. Http://www.usb.org

[3] Stuart Allman Using the HID class eases the job of writing USB device drivers. Http://www.edn.com

李隆慶

希爾思儀表(深圳)有限公司

標簽:

點贊

分享到:

上一篇:基于CPLD的編碼器解碼接口、P...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(wǎng)(www.wangxinlc.cn)獨家所有。如需轉載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。

本網(wǎng)轉載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

相關資訊

網(wǎng)站簡介|會員服務|聯(lián)系方式|幫助信息|版權信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務平臺

網(wǎng)站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號