999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C8051F34x單片機的USB Bootloader設計

2011-07-28 01:32:18劉云龍張偉霞
網絡安全與數據管理 2011年23期
關鍵詞:單片機程序設計

劉云龍 ,張偉霞

(1.廣州海格通信集團股份有限公司,廣東 廣州 510663;2.廣州廣電運通金融電子股份有限公司,廣東 廣州 510663)

Bootloader(以下簡稱BL)是一段引導程序,在單片機上電或復位后在應用程序(以下簡稱APP)之前先運行,來判斷當前是否需要進入升級狀態。如果不需要升級,就直接跳轉到APP運行;如果需要升級,首先擦除舊的APP,然后通過某種通信接收APP固件程序,同時寫入Flash中。

BL固件程序能以多種方式獲取數據,包括串口、并口、I2C、SPI、USB等,但是從實際使用和成熟度來看,使用串口無疑是最方便的。如今,USB總線憑借其方便、快速、靈活、穩定、應用范圍廣等優點被廣泛地應用、發展和普及,使用USB進行數據傳輸是一種趨勢。本文設計的BL主要基于USB通信,同時考慮到模塊兼容,保留了串口通信。

一般來說,一個BL應該能夠完成以下功能:(1)通過某種通信收發數據;(2)擦除并升級APP應用固件程序;(3)判斷APP固件的完整性;(4)APP與BL的中斷跳轉問題。而基于USB通信的BL,除了要完成一般BL的功能,還需要考慮BL與APP共用除USB中斷外的USB一般處理函數等問題。下面對BL固件程序設計、APP固件程序設計以及上層軟件設計進行詳細介紹。

1 USB Bootloader設計

1.1 硬件平臺

本文設計的USB BL是基于SiliconLabs公司C8051F34x系列單片機實現的;C8051F34x器件是完全集成的混合信號片上系統型MCU,具有片內上電復位、VDD監視器、電壓調整器、看門狗定時器、時鐘丟失檢測器、時鐘振蕩器、USB、SMBus/I2C、UART、SPI、定時器、I/O、多達4 352 B片內RAM和64 KB的片內Flash存儲器,Flash存儲器還具有在系統重新編程的能力,可用于非易失性數據存儲,并允許現場更新8051固件。

C8051F34x器件集成了一個完整的全速/低速USB功能控制器,剛開始設計時采用C8051F34x自帶的USB,但是靜電測試不符合要求,最終選用了C8051F34x和PDIUSBD12組合,解決了靜電問題。

PDIUSBD12是一款性價比很高的USB器件,它符合USB1.1版規范,可與任何外部微控制器實現高速并行接口(2 Mb/s),具有良好的 EMI特性,高于 8 kV的在片靜電防護電路等,詳細資料請查詢參考文獻[3]。

1.2 BL和APP固件的地址分配

USB BL預計將占用8 KB的地址空間,從0x0000h到0x1FFFh,包括USB BL固件程序本身和用來判斷程序是運行APP還是BL的一段簽名程序。BL與APP地址空間分配如圖 1所示,APP固件程序存放的地址空間從0x2000h開始。

圖1 BL與APP地址空間分配

1.3 BL和APP的自動跳轉

在程序中,設置一個設備模式標志位,用來判斷程序是應該運行在BL中還是在APP中,此標志位存儲在RAM的一個固定地址2F7h處。本文設計的BL,DEVICE_MODE為設備模式標志位,其值等于1時為BL_MODE(BL模式),其值等于 0為 APP_MODE(APP模式)。

有兩種情況設備模式為BL模式,可以下載更新APP固件程序:一是在指定的簽名地址處沒有指定的兩字節的簽名;二是Flash寫錯誤,在C8051F34x單片機中,Flash讀地址超出了用戶代碼空間,即MOVC操作的地址大于0xFBFF,發生Flash錯誤復位后,FERROR位(RSTSRC.6)被置位。

上電后是否運行APP固件程序通過第一種情況判斷。當需要更新APP固件程序時,造成Flash寫錯誤,通過第二種情況進入BL模式,開始更新程序,如圖2所示。

圖2 BL和APP的自動跳轉

1.4 中斷重定位

一般情況下,MCU中斷向量分布在復位 (0x0000)以后,位于低地址空間。由于BL程序占據了此段空間,因此,除了 USB0中斷(中斷序列表第8號中斷)和串口中斷 (中斷序列表第5號中斷),其他所有的中斷(C8051F34x共有16個通用中斷)都需要做中斷二次映射。也就是說,需要在原中斷向量入口地址處手動添加二次跳轉函數,使新的中斷向量指向用戶的中斷程序,這樣才能保證正常運行APP固件程序的中斷程序。具體的跳轉地址由APP固件程序起始地址決定,這一部分在START51.A51中通過編寫函數來完成。假設固件的起始地址設置為0x2000H,則中斷跳轉的實現過程如下。

首先定義幾個常量:

中斷向量重映射:

1.5 中斷處理函數

8號USB中斷由于同時要被BL固件和APP固件調用,因此不能對其進行二次跳轉,而通過共享的USB庫文件中的USB_ISR主中斷處理函數進行處理,通過DEVICE_MODE判斷當前設備處于BL模式或APP模式來自動地二次跳轉到BL固件或APP固件的USB中斷處理函數處,如圖3所示。

圖3 BL中斷函數分流處理

需要注意的是,4號串口中斷同樣要被兩者所調用,因此對4號中斷的處理與8號中斷相同。先由4號中斷入口地址跳轉到原地址處,然后在此地址處根據設備模式進行中斷分流,決定是到BL還是到APP的中斷處理函數處。

1.6 USB BL命令函數

BL固件程序中的命令函數如表1所示。

(1)Erase Page:擦除APP固件程序和簽名;

(2)Write Page:將APP固件程序的HEX文件寫入Flash;

(3)Write Signature:APP固件程序寫 Flash成功后,將簽名寫入指定的地址處,表示APP固件已經存在于Flash中;

(4)Get Version:取BL程序的版本號。

表1 BL固件程序中的命令函數

2 APP固件程序設計

使用USB BL,需要對APP固件程序進行一些添加和修改。

(1)由于BL占用了 0x0000~0x1FFF的空間,APP固件程序是以0x2000h作為起始地址的,這樣就需要修改APP程序的偏移量。

①修改 STARTUP.A51文件,把“CSEG AT 0”變為“CSEG AT 2000h”;

②點擊 Porject->Options for Target‘Target1’, 點擊C51項目欄,把 Interrupt vectors address欄選中,內容改為0x2000,點擊BL51 Locate項目欄,將code項改為0x2000。

(2)APP固件程序應該具備從APP轉到BL的功能,需要增下以下代碼:

①main()主函數中增加接收更新APP固件程序的命令字以及對此命令的處理代碼,使用BOOTLOAD_REQ()命令來觸發一次Flash讀復位,使器件進入BL模式;

②在STARTUP.A51文件增加以下代碼:

//造成 Flash寫錯誤地址定義

PUBLICBOOTLOAD_REQ

BOOTLOAD_REQ EQU 0FFFFh

③在頭文件中添加函數聲明:

void BOOTLOAD_REQ(void)

(3)去掉與BL重復的USB通信函數部分,特別是要去掉Control_USB()函數(該函數主要完成設備請求處理函數),因為此函數在BL中已經實現,并且用絕對地址固定,應用程序只需跳轉到固定的絕對地址處即可,修改如下:

①在STARTUP.A51文件增加以下代碼:

//control_usb地址定義

PUBLIC Control_USB

//USB通信產生的外部中斷1在APP固件的入口地址

Control_USB EQU 1300h

②注意需要在BL中先定義Control_USB的入口地址,方法如下:在 BL工程下,Porject->Options for Target‘Target1’,點擊 BL51 Locate項目欄,將 code項修改為

?PR?VCONTROL_USB?BOOTLOADER_F340(0x1300);

(4)修改USB中斷處理函數:由于 USB控制器采用PDIUSBD12,其中斷引腳 INT_N接 C8051F34x的 P0.7引腳,且該引腳被配置為外部中斷1,電平觸發方式,低電平有效。因此應在外部中斷1中斷處理函數中獲取USB中斷源并進入相應的子程序進行處理。

(5)USB設備的枚舉過程在BL中完成,因此PID、VID是BL程序所決定的,需要在BL中改變此處的值以適應自己的模塊。

(6)保護被BL使用的位,DEVICE_MODE的位地址,在STARTUP.A51文件中,在宏定義和代碼段開始之前增加以下的代碼:

3 遠程在線下載

3.1 下載步驟

(1)從APP切換到BL。此時,程序正常運行在APP模式,發送更新程序命令,致使Flash寫錯誤進入BL模式。

(2)擦除 Flash。在 BL模式下,發送擦除 Flash命令,擦除簽名和APP固件程序,返回成功ERASE_OK。

(3)寫 Flash。擦除 Flash成功后,可以將新的 APP固件程序的HEX文件寫進Flash。校驗失敗,返回WRITE_FAILED,成功返回 WRITE_OK。

(4)寫簽名。寫Flash成功后,將2 B的簽名寫到指定的地址處,表示APP固件已經存在于Flash中。

(5)從BL切換到APP。寫簽名成功后,使程序跳轉到APP固件程序處執行。

3.2 上層軟件設計

本文使用VC++6.0開發了BL上層軟件,如圖4所示。

在線下載時,有兩種方式:(1)正常下載,這是常用的一種方式,這種下載方式在下載前和下載后會進行APP固件程序版本比較,如果是不同版本的程序,可以進行升級,如果是同一版本的程序,直接返回成功;(2)強制下載,這種下載方式不進行APP固件程序版本比較,點擊即可進行升級,一般在APP固件程序調試時多次下載使用。

在線下載使用方法:首先點擊“瀏覽”按鈕,查找到用于升級的新版本的HEX文件;再點擊“正常下載”或“強制下載”進行程序升級;然后在右邊查看返回結果,看升級是否成功。

3.3 設計注意點

在APP轉BL以及BL轉APP時,需要考慮USB枚舉時間,枚舉成功后才能正常地發送和接收。遠程下載過程中,需要考慮一些異常情況,如PC主機死機、模塊CPU死機、死循環或復位等,針對這些情況,本設計均作了冗錯處理。

一個良好的BootLoader程序應該具有良好的可維護性并可以正確處理異常情況,不會因為意外情況引起系統的損壞和崩潰。本文結合實際應用,設計了一個實用的USB Bootloader。經大量測試和實際應用,可滿足開發和維護人員的要求。

[1]Silicon Labs.USB Bootloader with shared USB[DB/OL].Xpress Library,2008.2.

[2]潘琢金,譯.C8051F340/1/2/3/4/5/6/7全速 USB FLASH微控制器數據手冊[Z].新華龍電子有限公司,2006.01.

[3]周立功.PDIUSBD12 USB固件編程與驅動開發 [M].北京:北京航空航天大學出版社,2002.

[4]王朔,李剛.USB接口器件PDIUSBD12的接口應用設計[J].單片機與嵌入式系統應用,2002(1).

[5]繆德芳,李紹勝.單片機 Bootloader設計與實現[J].中國科技論文在線.

[6]虹信公司.在 PIC18單片機中使用 BootLoader[J].單片機與嵌入式系統應用,2005(12).

猜你喜歡
單片機程序設計
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
“程序猿”的生活什么樣
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
主站蜘蛛池模板: 国产一级在线观看www色| 亚洲欧洲日韩久久狠狠爱| 国产在线欧美| 日韩黄色在线| A级毛片无码久久精品免费| 婷婷丁香在线观看| 天堂在线亚洲| 免费人成网站在线高清| 亚洲区欧美区| 国产第一页免费浮力影院| 亚洲国产成人精品青青草原| 日本午夜视频在线观看| 欧美日韩国产在线播放| 亚欧美国产综合| 无码又爽又刺激的高潮视频| 久久国产乱子| 日韩无码视频专区| 丁香亚洲综合五月天婷婷| 亚洲一区毛片| 久久久久夜色精品波多野结衣| 九九香蕉视频| 91精品网站| 国产91特黄特色A级毛片| 国产精品美女网站| 伊人久久婷婷| 毛片基地视频| 久久久久88色偷偷| 人妻21p大胆| 久久成人免费| 日本在线欧美在线| 九九视频免费在线观看| 中文精品久久久久国产网址 | 免费人成在线观看视频色| 国产精品无码在线看| 波多野结衣无码中文字幕在线观看一区二区 | 内射人妻无码色AV天堂| 国产美女人喷水在线观看| 国产欧美日韩资源在线观看| 国产人在线成免费视频| 中字无码av在线电影| 亚洲精品不卡午夜精品| 国产尤物在线播放| 久久国产精品波多野结衣| 永久免费AⅤ无码网站在线观看| 8090午夜无码专区| 毛片视频网址| 久久久久久久久久国产精品| 一级毛片在线播放免费| 欧美不卡视频在线| 香蕉国产精品视频| 97国产在线视频| 欧美三级日韩三级| 久久人妻系列无码一区| 国产精品亚洲一区二区三区在线观看| 中文字幕无码av专区久久| 亚洲男女在线| 欧美另类图片视频无弹跳第一页| 国产精品va免费视频| 亚洲综合一区国产精品| 久久这里只有精品国产99| h视频在线观看网站| 国产高清又黄又嫩的免费视频网站| 国产一区二区丝袜高跟鞋| 日韩在线网址| 国产丰满大乳无码免费播放| 丁香六月综合网| 亚洲六月丁香六月婷婷蜜芽| 国产欧美日韩综合一区在线播放| 在线免费亚洲无码视频| 99精品在线看| 狠狠操夜夜爽| 亚洲综合色区在线播放2019| 中国国产A一级毛片| 四虎永久在线| 成人欧美日韩| 亚洲国产亚洲综合在线尤物| 成人韩免费网站| 久精品色妇丰满人妻| 亚洲Aⅴ无码专区在线观看q| 日本a级免费| 成人免费视频一区二区三区 | 欧美成人免费一区在线播放|