• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于C8051F34x單片機(jī)的USB Bootloader設(shè)計(jì)

      2011-07-28 01:32:18劉云龍張偉霞
      關(guān)鍵詞:固件中斷串口

      劉云龍 ,張偉霞

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

      Bootloader(以下簡(jiǎn)稱(chēng)BL)是一段引導(dǎo)程序,在單片機(jī)上電或復(fù)位后在應(yīng)用程序(以下簡(jiǎn)稱(chēng)APP)之前先運(yùn)行,來(lái)判斷當(dāng)前是否需要進(jìn)入升級(jí)狀態(tài)。如果不需要升級(jí),就直接跳轉(zhuǎn)到APP運(yùn)行;如果需要升級(jí),首先擦除舊的APP,然后通過(guò)某種通信接收APP固件程序,同時(shí)寫(xiě)入Flash中。

      BL固件程序能以多種方式獲取數(shù)據(jù),包括串口、并口、I2C、SPI、USB等,但是從實(shí)際使用和成熟度來(lái)看,使用串口無(wú)疑是最方便的。如今,USB總線(xiàn)憑借其方便、快速、靈活、穩(wěn)定、應(yīng)用范圍廣等優(yōu)點(diǎn)被廣泛地應(yīng)用、發(fā)展和普及,使用USB進(jìn)行數(shù)據(jù)傳輸是一種趨勢(shì)。本文設(shè)計(jì)的BL主要基于USB通信,同時(shí)考慮到模塊兼容,保留了串口通信。

      一般來(lái)說(shuō),一個(gè)BL應(yīng)該能夠完成以下功能:(1)通過(guò)某種通信收發(fā)數(shù)據(jù);(2)擦除并升級(jí)APP應(yīng)用固件程序;(3)判斷APP固件的完整性;(4)APP與BL的中斷跳轉(zhuǎn)問(wèn)題。而基于USB通信的BL,除了要完成一般BL的功能,還需要考慮BL與APP共用除USB中斷外的USB一般處理函數(shù)等問(wèn)題。下面對(duì)BL固件程序設(shè)計(jì)、APP固件程序設(shè)計(jì)以及上層軟件設(shè)計(jì)進(jìn)行詳細(xì)介紹。

      1 USB Bootloader設(shè)計(jì)

      1.1 硬件平臺(tái)

      本文設(shè)計(jì)的USB BL是基于SiliconLabs公司C8051F34x系列單片機(jī)實(shí)現(xiàn)的;C8051F34x器件是完全集成的混合信號(hào)片上系統(tǒng)型MCU,具有片內(nèi)上電復(fù)位、VDD監(jiān)視器、電壓調(diào)整器、看門(mén)狗定時(shí)器、時(shí)鐘丟失檢測(cè)器、時(shí)鐘振蕩器、USB、SMBus/I2C、UART、SPI、定時(shí)器、I/O、多達(dá)4 352 B片內(nèi)RAM和64 KB的片內(nèi)Flash存儲(chǔ)器,F(xiàn)lash存儲(chǔ)器還具有在系統(tǒng)重新編程的能力,可用于非易失性數(shù)據(jù)存儲(chǔ),并允許現(xiàn)場(chǎng)更新8051固件。

      C8051F34x器件集成了一個(gè)完整的全速/低速USB功能控制器,剛開(kāi)始設(shè)計(jì)時(shí)采用C8051F34x自帶的USB,但是靜電測(cè)試不符合要求,最終選用了C8051F34x和PDIUSBD12組合,解決了靜電問(wèn)題。

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

      1.2 BL和APP固件的地址分配

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

      圖1 BL與APP地址空間分配

      1.3 BL和APP的自動(dòng)跳轉(zhuǎn)

      在程序中,設(shè)置一個(gè)設(shè)備模式標(biāo)志位,用來(lái)判斷程序是應(yīng)該運(yùn)行在BL中還是在APP中,此標(biāo)志位存儲(chǔ)在RAM的一個(gè)固定地址2F7h處。本文設(shè)計(jì)的BL,DEVICE_MODE為設(shè)備模式標(biāo)志位,其值等于1時(shí)為BL_MODE(BL模式),其值等于 0為 APP_MODE(APP模式)。

      有兩種情況設(shè)備模式為BL模式,可以下載更新APP固件程序:一是在指定的簽名地址處沒(méi)有指定的兩字節(jié)的簽名;二是Flash寫(xiě)錯(cuò)誤,在C8051F34x單片機(jī)中,F(xiàn)lash讀地址超出了用戶(hù)代碼空間,即MOVC操作的地址大于0xFBFF,發(fā)生Flash錯(cuò)誤復(fù)位后,F(xiàn)ERROR位(RSTSRC.6)被置位。

      上電后是否運(yùn)行APP固件程序通過(guò)第一種情況判斷。當(dāng)需要更新APP固件程序時(shí),造成Flash寫(xiě)錯(cuò)誤,通過(guò)第二種情況進(jìn)入BL模式,開(kāi)始更新程序,如圖2所示。

      圖2 BL和APP的自動(dòng)跳轉(zhuǎn)

      1.4 中斷重定位

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

      首先定義幾個(gè)常量:

      中斷向量重映射:

      1.5 中斷處理函數(shù)

      8號(hào)USB中斷由于同時(shí)要被BL固件和APP固件調(diào)用,因此不能對(duì)其進(jìn)行二次跳轉(zhuǎn),而通過(guò)共享的USB庫(kù)文件中的USB_ISR主中斷處理函數(shù)進(jìn)行處理,通過(guò)DEVICE_MODE判斷當(dāng)前設(shè)備處于BL模式或APP模式來(lái)自動(dòng)地二次跳轉(zhuǎn)到BL固件或APP固件的USB中斷處理函數(shù)處,如圖3所示。

      圖3 BL中斷函數(shù)分流處理

      需要注意的是,4號(hào)串口中斷同樣要被兩者所調(diào)用,因此對(duì)4號(hào)中斷的處理與8號(hào)中斷相同。先由4號(hào)中斷入口地址跳轉(zhuǎn)到原地址處,然后在此地址處根據(jù)設(shè)備模式進(jìn)行中斷分流,決定是到BL還是到APP的中斷處理函數(shù)處。

      1.6 USB BL命令函數(shù)

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

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

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

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

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

      表1 BL固件程序中的命令函數(shù)

      2 APP固件程序設(shè)計(jì)

      使用USB BL,需要對(duì)APP固件程序進(jìn)行一些添加和修改。

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

      ①修改 STARTUP.A51文件,把“CSEG AT 0”變?yōu)椤癈SEG AT 2000h”;

      ②點(diǎn)擊 Porject->Options for Target‘Target1’, 點(diǎn)擊C51項(xiàng)目欄,把 Interrupt vectors address欄選中,內(nèi)容改為0x2000,點(diǎn)擊BL51 Locate項(xiàng)目欄,將code項(xiàng)改為0x2000。

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

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

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

      //造成 Flash寫(xiě)錯(cuò)誤地址定義

      PUBLICBOOTLOAD_REQ

      BOOTLOAD_REQ EQU 0FFFFh

      ③在頭文件中添加函數(shù)聲明:

      void BOOTLOAD_REQ(void)

      (3)去掉與BL重復(fù)的USB通信函數(shù)部分,特別是要去掉Control_USB()函數(shù)(該函數(shù)主要完成設(shè)備請(qǐng)求處理函數(shù)),因?yàn)榇撕瘮?shù)在BL中已經(jīng)實(shí)現(xiàn),并且用絕對(duì)地址固定,應(yīng)用程序只需跳轉(zhuǎn)到固定的絕對(duì)地址處即可,修改如下:

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

      //control_usb地址定義

      PUBLIC Control_USB

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

      Control_USB EQU 1300h

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

      ?PR?VCONTROL_USB?BOOTLOADER_F340(0x1300);

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

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

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

      3 遠(yuǎn)程在線(xiàn)下載

      3.1 下載步驟

      (1)從APP切換到BL。此時(shí),程序正常運(yùn)行在APP模式,發(fā)送更新程序命令,致使Flash寫(xiě)錯(cuò)誤進(jìn)入BL模式。

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

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

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

      (5)從BL切換到APP。寫(xiě)簽名成功后,使程序跳轉(zhuǎn)到APP固件程序處執(zhí)行。

      3.2 上層軟件設(shè)計(jì)

      本文使用VC++6.0開(kāi)發(fā)了BL上層軟件,如圖4所示。

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

      在線(xiàn)下載使用方法:首先點(diǎn)擊“瀏覽”按鈕,查找到用于升級(jí)的新版本的HEX文件;再點(diǎn)擊“正常下載”或“強(qiáng)制下載”進(jìn)行程序升級(jí);然后在右邊查看返回結(jié)果,看升級(jí)是否成功。

      3.3 設(shè)計(jì)注意點(diǎn)

      在APP轉(zhuǎn)BL以及BL轉(zhuǎn)APP時(shí),需要考慮USB枚舉時(shí)間,枚舉成功后才能正常地發(fā)送和接收。遠(yuǎn)程下載過(guò)程中,需要考慮一些異常情況,如PC主機(jī)死機(jī)、模塊CPU死機(jī)、死循環(huán)或復(fù)位等,針對(duì)這些情況,本設(shè)計(jì)均作了冗錯(cuò)處理。

      一個(gè)良好的BootLoader程序應(yīng)該具有良好的可維護(hù)性并可以正確處理異常情況,不會(huì)因?yàn)橐馔馇闆r引起系統(tǒng)的損壞和崩潰。本文結(jié)合實(shí)際應(yīng)用,設(shè)計(jì)了一個(gè)實(shí)用的USB Bootloader。經(jīng)大量測(cè)試和實(shí)際應(yīng)用,可滿(mǎn)足開(kāi)發(fā)和維護(hù)人員的要求。

      [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微控制器數(shù)據(jù)手冊(cè)[Z].新華龍電子有限公司,2006.01.

      [3]周立功.PDIUSBD12 USB固件編程與驅(qū)動(dòng)開(kāi)發(fā) [M].北京:北京航空航天大學(xué)出版社,2002.

      [4]王朔,李剛.USB接口器件PDIUSBD12的接口應(yīng)用設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2002(1).

      [5]繆德芳,李紹勝.單片機(jī) Bootloader設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)科技論文在線(xiàn).

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

      猜你喜歡
      固件中斷串口
      淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
      跟蹤導(dǎo)練(二)(5)
      千里移防,衛(wèi)勤保障不中斷
      解放軍健康(2017年5期)2017-08-01 06:27:44
      基于固件的遠(yuǎn)程身份認(rèn)證
      USB接口的多串口數(shù)據(jù)并行接收方法探索
      基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時(shí)無(wú)線(xiàn)通信
      提取ROM固件中的APP
      一種通過(guò)USB接口的可靠固件升級(jí)技術(shù)
      基于并行控制的FPGA多串口拓展實(shí)現(xiàn)
      奧林巴斯XZ—2新固件升級(jí)
      正定县| 商河县| 东平县| 万州区| 巧家县| 大港区| 密云县| 本溪市| 五寨县| 改则县| 衢州市| 麻城市| 锡林郭勒盟| 尼木县| 南汇区| 西安市| 浮山县| 宁陕县| 循化| 辽宁省| 榕江县| 安丘市| 界首市| 民乐县| 称多县| 凤庆县| 秦安县| 莱州市| 丹巴县| 沛县| 囊谦县| 湛江市| 全椒县| 宁安市| 静宁县| 沙湾县| 临泽县| 县级市| 新郑市| 巩义市| 井研县|