《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于C8051F34x單片機的USB Bootloader設計
基于C8051F34x單片機的USB Bootloader設計
來源:微型機與應用2011年第23期
劉云龍1,張偉霞2
(1.廣州海格通信集團股份有限公司,廣東 廣州 510663; 2.廣州廣電運通金融電子股份有限公司
摘要: 介紹了一種在Silicon Labs公司的C8051F34x系列單片機上實現USB Bootloader的設計方法,使應用程序可以通過USB或COM通信實現遠程在線升級。首先,簡述了USB Bootloader;然后,詳細闡述了USB Bootloader程序的設計和APP固件程序的設計,以及設計中需要注意的問題;最后,用VC++開發上位機軟件來完成該Bootloader的遠程在線下載功能。該Bootloader可以很方便地在其他類似單片機上移植,通用性強。
Abstract:
Key words :

摘  要: 介紹了一種在Silicon Labs公司的C8051F34x系列單片機上實現USB Bootloader的設計方法,使應用程序可以通過USB或COM通信實現遠程在線升級。首先,簡述了USB Bootloader;然后,詳細闡述了USB Bootloader程序的設計和APP固件程序的設計,以及設計中需要注意的問題;最后,用VC++開發上位機軟件來完成該Bootloader的遠程在線下載功能。該Bootloader可以很方便地在其他類似單片機上移植,通用性強。
關鍵詞: C8051F34x;USB Bootloader;遠程升級

 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是基于Silicon Labs公司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.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所示。

1.4 中斷重定位
 一般情況下,MCU中斷向量分布在復位(0x0000)以后,位于低地址空間。由于BL程序占據了此段空間,因此,除了USB0中斷(中斷序列表第8號中斷)和串口中斷(中斷序列表第5號中斷),其他所有的中斷(C8051F34x共有16個通用中斷)都需要做中斷二次映射。也就是說,需要在原中斷向量入口地址處手動添加二次跳轉函數,使新的中斷向量指向用戶的中斷程序,這樣才能保證正常運行APP固件程序的中斷程序。具體的跳轉地址由APP固件程序起始地址決定,這一部分在START51.A51中通過編寫函數來完成。假設固件的起始地址設置為0x2000H,則中斷跳轉的實現過程如下。
 首先定義幾個常量:
HW_INTVEC_TABLE EQU 0003h
HW_INTVEC_SEPARATION EQU 8
INTVEC_TABLE EQU START_APPLICATION+3
INTVEC_SEPARATION EQU8
START_APPLICATION EQU2000h
 中斷向量重映射:
CSEG AT HW_INTVEC_TABLE +
(HW_INTVEC_SEPARATION*INT_NUM)LJMP
INTVEC_TABLE+(INTVEC_SEPARATION
*INT_NUM)
//以定時器2中斷為例(第5號中斷)
CSEG AT0003h+8h*5h=002Bh
LJMP 2000h+0003h+8h*5h=202Bh
1.5 中斷處理函數
 8號USB中斷由于同時要被BL固件和APP固件調用,因此不能對其進行二次跳轉,而通過共享的USB庫文件中的USB_ISR主中斷處理函數進行處理,通過DEVICE_MODE判斷當前設備處于BL模式或APP模式來自動地二次跳轉到BL固件或APP固件的USB中斷處理函數處,如圖3所示。

 

 

 需要注意的是,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程序的版本號。
2 APP固件程序設計
 使用USB BL,需要對APP固件程序進行一些添加和修改。
 (1) 由于BL占用了0x0000~0x1FFF的空間,APP固件程序是以0x2000h作為起始地址的,這樣就需要修改APP程序的偏移量。
?、傩薷腟TARTUP.A51文件,把“CSEG AT 0”變為“CSEG AT 2000h”;
?、邳c擊Porject->Options for Target‘Target1’,點擊C51項目欄,把Interrupt vectors address欄選中,內容改為0x2000,點擊BL51 Locate項目欄,將code項改為0x2000。
 (2)APP固件程序應該具備從APP轉到BL的功能,需要增下以下代碼:
?、賛ain()主函數中增加接收更新APP固件程序的命令字以及對此命令的處理代碼,使用BOOTLOAD_REQ()命令來觸發一次Flash讀復位,使器件進入BL模式;
?、谠赟TARTUP.A51文件增加以下代碼:
 //造成Flash寫錯誤地址定義
 PUBLICBOOTLOAD_REQ
 BOOTLOAD_REQ EQU 0FFFFh
?、墼陬^文件中添加函數聲明:
 void  BOOTLOAD_REQ(void)
 (3)去掉與BL重復的USB通信函數部分,特別是要去掉Control_USB()函數(該函數主要完成設備請求處理函數),因為此函數在BL中已經實現,并且用絕對地址固定,應用程序只需跳轉到固定的絕對地址處即可,修改如下:
?、僭赟TARTUP.A51文件增加以下代碼:
 //control_usb地址定義
 PUBLIC Control_USB
 //USB通信產生的外部中斷1在APP固件的入口地址
    Control_USB  EQU  1300h
?、谧⒁庑枰贐L中先定義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文件中,在宏定義和代碼段開始之前增加以下的代碼:
 //Last bit in bit-addressable space(2F.7h)
 MEM_DEVICE_MODE  BIT  07Fh
 PUBLIC  DEVICE_MODE
 BSEGATMEM_DEVICE_MODE
 DEVICE_MODE: DBIT  1
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).

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲色诱最新| 亚洲免费电影在线| 欧美日韩精品高清| 欧美精品系列| 久久大香伊蕉在人线观看热2| 亚洲综合成人婷婷小说| 亚洲欧洲偷拍精品| 国产一区二区成人久久免费影院| 国产精品高清一区二区三区| 国产一区二区三区奇米久涩| 国模叶桐国产精品一区| 久久精品亚洲国产奇米99| 午夜在线电影亚洲一区| 亚洲欧美国产高清va在线播| 99精品国产在热久久婷婷| 99re6这里只有精品视频在线观看| 日韩视频在线观看免费| 欧美一进一出视频| 欧美激情成人在线| 性色av一区二区三区在线观看| 久久精品在线播放| 99国产一区二区三精品乱码| 国产一区二区精品久久99| 精品999成人| 欧美激情第二页| 尤物精品在线| 亚洲韩国一区二区三区| 欧美精品v日韩精品v国产精品| 在线观看精品| 国产模特精品视频久久久久| 黑人巨大精品欧美一区二区| 亚洲一区观看| 午夜精品久久久久久久白皮肤| 国产美女精品在线| 欧美成ee人免费视频| 亚洲精品综合| 国产精品日日摸夜夜摸av| 免费精品99久久国产综合精品| 久久一综合视频| 国产精品久久久久久久久免费| 一个色综合导航| 久久国产加勒比精品无码| 国产精品va在线播放我和闺蜜| 欧美日韩不卡合集视频| 欧美暴力喷水在线| 先锋影音国产精品| 国产自产高清不卡| 激情成人综合| 国产亚洲欧洲一区高清在线观看| 久久久无码精品亚洲日韩按摩| 久久亚洲私人国产精品va媚药| 国产日韩欧美一区二区三区在线观看| 牛牛影视久久网| 欧美人交a欧美精品| 欧美精品色一区二区三区| 玖玖玖免费嫩草在线影院一区| 欧美午夜女人视频在线| 国产欧美日韩精品在线| 亚洲欧美日韩中文在线制服| 尤物在线精品| 欧美大片在线观看一区| 欧美成年人视频| 日韩视频在线一区| 亚洲国产日韩欧美在线图片| 这里只有视频精品| 激情视频亚洲| 欧美女激情福利| 久久午夜精品| 欧美黄色精品| 欧美日韩在线视频一区| 国产精品爱啪在线线免费观看| 免费在线观看日韩欧美| 欧美日韩1区| 欧美精品在线免费观看| 91久久精品日日躁夜夜躁国产| 欧美午夜国产| 国产欧美一区在线| 亚洲精品影院在线观看| 亚洲图色在线| 欧美伦理在线观看| 老司机免费视频一区二区三区| 美女国产一区| 亚洲先锋成人| 美玉足脚交一区二区三区图片| 欧美日韩精品国产| 久久精品国产清高在天天线| 欧美激情精品久久久六区热门| 亚洲一区二区视频在线| 免费一区视频| 韩国av一区二区三区在线观看| 久久久综合网站| 亚洲一二三区精品| 欧美一区二区三区日韩视频| 韩国精品主播一区二区在线观看| 亚洲精品乱码久久久久久日本蜜臀| 国产农村妇女毛片精品久久麻豆| 欧美在线一区二区| 亚洲日本aⅴ片在线观看香蕉| 国产香蕉97碰碰久久人人| 亚洲国产日韩一区| 国产麻豆午夜三级精品| 一本色道**综合亚洲精品蜜桃冫| 国产精一区二区三区| 欧美区一区二| 久久综合九色综合网站| 欧美影院在线播放| 欧美视频在线播放| 先锋影音久久| 亚洲午夜激情网站| 校园激情久久| 欧美日韩喷水| 一区二区不卡在线视频 午夜欧美不卡'| 一区二区久久| 国产美女精品在线| 欧美88av| 亚洲视频在线观看三级| 欧美色另类天堂2015| 国产午夜精品全部视频在线播放| 国产视频观看一区| 亚洲乱亚洲高清| 国产亚洲美州欧州综合国| 亚洲久久在线| 欧美三级韩国三级日本三斤| 欧美大成色www永久网站婷| 国产伦精品一区二区三区免费迷| 亚洲一区欧美激情| 欧美一区1区三区3区公司| 国产一区二区三区四区在线观看| 99av国产精品欲麻豆| 卡通动漫国产精品| 另类综合日韩欧美亚洲| 亚洲性xxxx| 国产精品日韩精品欧美精品| 99这里只有久久精品视频| 亚洲午夜精品久久久久久app| 欧美阿v一级看视频| 欧美一区二区三区免费看| 老司机免费视频久久| 蜜乳av另类精品一区二区| 欧美紧缚bdsm在线视频| 一区二区三区免费在线观看| 在线精品国产欧美| 久久久久**毛片大全| 国产丝袜一区二区| 激情av一区二区| 欧美日韩三区| 国产亚洲精品一区二区| 国产欧美日韩综合一区在线观看| 欧美久色视频| 国产精品影片在线观看| 在线成人黄色| 99精品视频免费| 在线成人黄色| 亚洲欧洲日本国产| 美女国产精品| 美国十次了思思久久精品导航| 久久精视频免费在线久久完整在线看| 久久aⅴ国产欧美74aaa| 欧美中文在线视频| 久久九九全国免费精品观看| 久久成人精品| 亚洲二区免费| 欧美在线www| 欧美日韩在线免费视频| 99视频精品全国免费| 国产欧美一区二区三区国产幕精品| 国产亚洲精品aa午夜观看| 国产精品午夜国产小视频| 欧美在线一级va免费观看| 国产婷婷色一区二区三区四区| 亚洲电影免费观看高清完整版| 中文日韩在线视频| 欧美日韩国产综合一区二区| 一区二区三区国产在线观看| 日韩天堂在线观看| 亚洲美女免费视频| 欧美日韩一区二区三区高清| 国产专区一区| 欧美日韩在线免费视频| 亚洲免费视频观看| 香港成人在线视频| 久久av免费一区| 欧美日本不卡高清| 你懂的国产精品永久在线| 亚洲免费在线精品一区| 久久精品视频网| 性久久久久久久久| 国产精品高清在线| 亚洲精品一线二线三线无人区| 久久久噜久噜久久综合| 久久大香伊蕉在人线观看热2| 国产精品久久久久久久久久免费看| 欧美日韩一区在线观看视频| 亚洲综合视频网| 亚洲自拍偷拍福利| 欧美中文在线观看国产| 欧美人与性动交cc0o| 99在线精品免费视频九九视| 亚洲综合视频1区| 久久色在线观看| 亚洲电影专区| 亚洲美女淫视频| 国产乱码精品一区二区三区忘忧草| 久久只精品国产| 亚洲高清影视| 娇妻被交换粗又大又硬视频欧美| 欧美在线观看视频一区二区三区| 亚洲成在人线av| 欧美日韩国产一区二区三区| 国产精品永久入口久久久| 免费看精品久久片| 欧美国产第二页| 欧美日韩国产一区二区三区| 久久超碰97人人做人人爱| aa日韩免费精品视频一| 亚洲精品欧美一区二区三区| 亚洲视频欧美在线| 国模精品一区二区三区色天香| 国产伦理一区| 久久久精品国产免大香伊| 国产日韩高清一区二区三区在线| 在线观看欧美黄色| 国产精品美女午夜av| 亚洲韩国精品一区| 欧美日韩一区二区三区免费看| 国产精品视频区| 欧美大片国产精品| 国语自产精品视频在线看8查询8| 国产欧美一区二区三区久久| 欧美在线观看视频在线| 洋洋av久久久久久久一区| 欧美一区在线视频| 99re66热这里只有精品4| 亚洲福利专区| 亚洲美女在线国产| 国产精品一香蕉国产线看观看| 亚洲高清视频的网址| 午夜亚洲福利在线老司机| 欧美破处大片在线视频| 欧美电影免费观看高清| 99伊人成综合| 亚洲一级在线| 蜜臀a∨国产成人精品| 欧美日韩一区二区欧美激情| 欧美日韩不卡| 国产精品高潮呻吟久久| 91久久国产自产拍夜夜嗨| 久久国产精品黑丝| 国产一区亚洲| 国产午夜精品久久久久久久| 黄色国产精品一区二区三区| 久久国产精品一区二区三区四区| 国产欧美精品在线观看| 亚洲欧美国产日韩天堂区| 久久亚洲国产精品一区二区| 欧美三级在线视频| 欧美永久精品| 亚洲高清成人| 免费试看一区| 国产精品一区在线观看| 国产网站欧美日韩免费精品在线观看| 精东粉嫩av免费一区二区三区| 欧美亚洲免费在线| 国产欧美精品xxxx另类| 99re8这里有精品热视频免费| 欧美精品乱码久久久久久按摩| 国产噜噜噜噜噜久久久久久久久| 亚洲精品日韩激情在线电影| 久久在精品线影院精品国产| 亚洲一区二区欧美日韩| 亚洲深夜激情| 欧美日韩精品在线播放| 久久精品2019中文字幕| 欧美体内she精视频在线观看| 亚洲国产天堂网精品网站| 欧美亚洲免费| 亚洲精品久久久久久久久久久| 亚洲每日更新| 91久久在线播放| 国产区二精品视| 欧美r片在线| 亚洲一区二区三区欧美| 欧美成人激情在线| 欧美亚洲综合久久| 国产日韩欧美亚洲| 国产精品一二一区| 亚洲少妇自拍| 最新国产成人av网站网址麻豆| 久久影院午夜片一区| 欧美成人精精品一区二区频| 亚洲精品一二| 久久精品色图| 亚洲伊人一本大道中文字幕| 国产欧美日韩视频一区二区| 亚洲精品欧美日韩专区| 久久成人精品视频| 国产视频一区在线观看| 欧美国产亚洲另类动漫| 亚洲高清在线观看| 亚洲精品日日夜夜| 欧美成熟视频| 午夜精品福利在线| 欧美在线三级| 一区二区三区 在线观看视| 久久成人综合网| 亚洲国产你懂的| 暖暖成人免费视频| 欧美日韩精品免费观看视频完整| 夜夜嗨网站十八久久| 99国内精品久久久久久久软件| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲天堂网站在线观看视频| 宅男噜噜噜66一区二区66| 99精品视频一区二区三区| 亚洲国产视频一区二区| 亚洲性感美女99在线| 蜜桃av一区二区在线观看| 国产一区二区日韩精品| 亚洲欧洲久久| 欧美国产精品人人做人人爱| 亚洲精品无人区| 久久av最新网址| 一区久久精品| 久久综合精品国产一区二区三区| 欧美精品激情在线| 麻豆久久婷婷| 免费成人在线观看视频| 亚洲欧美在线播放|