浓毛老太交欧美老妇热爱乱,蜜臀性色av免费,妺妺窝人体色www看美女,久久久久久久久久久大尺度免费视频,麻豆人妻无码性色av专区

位置:51電子網(wǎng) » 技術(shù)資料 » 顯示光電

AT91SAM7Sxx系列MCU Boot-Loader的設(shè)計(jì)

發(fā)布時(shí)間:2007/8/24 0:00:00 訪問次數(shù):431

引言


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


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


1 Boot-loader 在Flash中的位置


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


Boot-loader 的鏈接控制文件中需要修改的項(xiàng)目有:


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


-DROMEND1=3F 中斷向量表結(jié)束位置


-DROMSTART2=800 目標(biāo)程序起始位置


-DROMEND2=15FF 目標(biāo)程序結(jié)束位置


CODE, ICODE CONST 的定位同樣需要相應(yīng)的修改。


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


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


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


用戶應(yīng)用項(xiàng)目需要修改at91SAM7S256_NoRemap.xcl文件中


-DROMSTART1=00 中斷向量表及啟動(dòng)代碼起始位置


-DROMEND1=7FF 中斷向量表及啟動(dòng)代碼結(jié)束位置


-DROMSTART2=1600 目標(biāo)程序起始位置


-DROMEND2=3FFFF 目標(biāo)程序結(jié)束位置


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


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


2.1 Boot-Loader 的啟動(dòng)


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


PUBLIC EnterUser


CODE16


EnterUser:


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


ldr r0, [r1,#0]


bx r0


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


2.2 USB 驅(qū)動(dòng)


USB驅(qū)動(dòng)采用HID類以省下開發(fā)驅(qū)動(dòng)程序的需要.HID的報(bào)表采用如下結(jié)構(gòu):


const char LoaderDescriptor[] = {


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


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


0xA1, 0x01, // 報(bào)表集合:應(yīng)用


// The Input report


0x09, 0x03, // 廠家定義的報(bào)表ID


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


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


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


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


0x81, 0x02, // 輸入報(bào)表


// The Output report


0x09, 0x04, // 廠家定義的報(bào)表ID


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


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


0x75, 0x08, // 報(bào)表位寬


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


0x91, 0x02, // 輸出報(bào)表


0xC0}; // 集合結(jié)束


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


2.3 Flash 的操作


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


__ramfunc int CFlash::Erase_All(void)


因?yàn)镾AM7Sxx系列的Flash采用單層結(jié)構(gòu),不允許程序在Flash上運(yùn)行的同時(shí)改寫Flash的內(nèi)容, 所以要將操作Flash的程序放在RAM中運(yùn)行.


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


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


if (Page == 0) {


Get User Entrance Addre

引言


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


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


1 Boot-loader 在Flash中的位置


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


Boot-loader 的鏈接控制文件中需要修改的項(xiàng)目有:


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


-DROMEND1=3F 中斷向量表結(jié)束位置


-DROMSTART2=800 目標(biāo)程序起始位置


-DROMEND2=15FF 目標(biāo)程序結(jié)束位置


CODE, ICODE CONST 的定位同樣需要相應(yīng)的修改。


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


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


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


用戶應(yīng)用項(xiàng)目需要修改at91SAM7S256_NoRemap.xcl文件中


-DROMSTART1=00 中斷向量表及啟動(dòng)代碼起始位置


-DROMEND1=7FF 中斷向量表及啟動(dòng)代碼結(jié)束位置


-DROMSTART2=1600 目標(biāo)程序起始位置


-DROMEND2=3FFFF 目標(biāo)程序結(jié)束位置


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


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


2.1 Boot-Loader 的啟動(dòng)


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


PUBLIC EnterUser


CODE16


EnterUser:


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


ldr r0, [r1,#0]


bx r0


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


2.2 USB 驅(qū)動(dòng)


USB驅(qū)動(dòng)采用HID類以省下開發(fā)驅(qū)動(dòng)程序的需要.HID的報(bào)表采用如下結(jié)構(gòu):


const char LoaderDescriptor[] = {


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


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


0xA1, 0x01, // 報(bào)表集合:應(yīng)用


// The Input report


0x09, 0x03, // 廠家定義的報(bào)表ID


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


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


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


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


0x81, 0x02, // 輸入報(bào)表


// The Output report


0x09, 0x04, // 廠家定義的報(bào)表ID


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


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


0x75, 0x08, // 報(bào)表位寬


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


0x91, 0x02, // 輸出報(bào)表


0xC0}; // 集合結(jié)束


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


2.3 Flash 的操作


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


__ramfunc int CFlash::Erase_All(void)


因?yàn)镾AM7Sxx系列的Flash采用單層結(jié)構(gòu),不允許程序在Flash上運(yùn)行的同時(shí)改寫Flash的內(nèi)容, 所以要將操作Flash的程序放在RAM中運(yùn)行.


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


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


if (Page == 0) {


Get User Entrance Addre

相關(guān)IC型號

熱門點(diǎn)擊

 

推薦技術(shù)資料

按鈕與燈的互動(dòng)實(shí)例
    現(xiàn)在趕快去看看這個(gè)目錄卞有什么。FGA15N120AN... [詳細(xì)]
版權(quán)所有:51dzw.COM
深圳服務(wù)熱線:13692101218  13751165337
粵ICP備09112631號-6(miitbeian.gov.cn)
公網(wǎng)安備44030402000607
深圳市碧威特網(wǎng)絡(luò)技術(shù)有限公司
付款方式


 復(fù)制成功!