• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > AT91SAM7Sxx系列MCU Boot-Loader的設計

    AT91SAM7Sxx系列MCU Boot-Loader的設計

    作者: 時間:2011-08-27 來源:網絡 收藏

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

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

    1 Boot-loader 在中的位置

    為了在整個SAM7Sxx系列中通用同一個Boot-Loader程序,我們把它定位在Flash的低端位置偏移量為0x800至0x15ff位置,共占用3584個字節空間。相應的用戶程序在鏈接時要避開使用這段地址。筆者采用的是IAR編譯環境,需要修改鏈接目標定位控制文件達到定位目標文件的目的。以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 的實現

    2.1 Boot-Loader 的啟動
    上電復位后,PC指針首先指向Boot-Loader,Boot-Loader首先初始化IO口,然后判斷用戶有無按下啟動Boot-Loader的按鍵。如果該鍵沒有被按下,同時Flash內有用戶代碼,則跳到用戶程序入口。下面代碼是用匯編寫用戶入口子程序。
    PUBLIC EnterUser
    CODE16
    EnterUser:
    ldr r1, = 0x15fc ; 0x15fc 保存用戶入口地址
    ldr r0, [r1,#0]
    bx r0
    如果用戶在上電時有按下該鍵,則運行Boot-Loader 的主循環。
    2.2 USB 驅動
    USB驅動采用HID類以省下開發驅動程序的需要.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 字節)
    0x91, 0x02, // 輸出報表
    0xC0}; // 集合結束
    這樣PC下傳的數據報大小是260B,其中第一字節為寫命令,第二,第三字節是用戶固件的頁地址(用戶固件需編譯為二進制文件*.bin).接下來是256字節的固件數據。


    上一頁 1 2 下一頁

    關鍵詞: AT91SAM7Sxx VID Flash

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 和硕县| 太康县| 于田县| 玉林市| 惠东县| 宜阳县| 滁州市| 九龙坡区| 都江堰市| 沂源县| 琼结县| 金堂县| 礼泉县| 乌鲁木齐市| 西畴县| 应用必备| 芜湖县| 修水县| 来安县| 凤城市| 富宁县| 石门县| 二连浩特市| 依安县| 平塘县| 文安县| 西乌珠穆沁旗| 六盘水市| 米林县| 高州市| 石景山区| 拜城县| 城固县| 桃园市| 大足县| 定南县| 山阴县| 乐亭县| 益阳市| 防城港市| 五河县|