• 
    

    
    

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

      基于STM32系列電子產(chǎn)品的IAP研究

      2017-11-18 19:57:30康燕萍程小輝黃鵬
      現(xiàn)代電子技術(shù) 2017年22期
      關(guān)鍵詞:固件

      康燕萍 程小輝 黃鵬

      摘 要: 研究一種基于STM32系列單片機實現(xiàn)IAP升級固件的方案,此方案對比ST官網(wǎng)IAP升級固件方案有較大的改進。電子產(chǎn)品出廠燒錄固件時無需額外燒錄BootLoader引導(dǎo)代碼,出廠后的電子產(chǎn)品可使用USB線與電腦連接,通過USB接口把需要升級的固件拷貝到電子產(chǎn)品自帶的外部FLASH中。STM32讀取外部FLASH中的固件對自身的FLASH數(shù)據(jù)進行升級,整個升級過程中不受斷電影響。此升級方案可應(yīng)用于智能家居產(chǎn)品、醫(yī)療電子產(chǎn)品、智能家電產(chǎn)品等。

      關(guān)鍵詞: STM32; 在線應(yīng)用編程; 固件; USB; 閃存

      中圖分類號: TN911?34; TP311 文獻標(biāo)識碼: A 文章編號: 1004?373X(2017)22?0142?03

      Abstract: A research scheme of IAP firmware upgrading based on SCMs in STM32 series is introduced, which is improved greatly in comparison with the IAP firmware upgrading scheme shown in ST official website. The electronic product factory doesn′t need to burn the BootLoader guidance code in its electronic products additionally when burning the products′ firmwares. The final electronic product is connected with computer via USB cable. The firmware needing upgrade is copied into the external FLASH built?in electronic products through USB interface. The FLASH data of the firmware itself in external FLASH is read by means of STM32 for upgrade, and the whole upgrade process isn′t affected by power outage. This upgrade scheme can be applied to the intelligent household products, medical electronic products and intelligent appliances.

      Keywords: STM32; IAP; firmware; USB; FLASH Memory

      0 引 言

      STM32控制器內(nèi)嵌ARM Cortex?M3內(nèi)核,具有高性能、低成本、低功耗等特點,受到越來越多電子開發(fā)人員青睞。STM32具有IAP功能,可實現(xiàn)用戶或售后技術(shù)人員對出廠后的電子產(chǎn)品進行固件升級。

      IAP的具體應(yīng)用可通過不同方式實現(xiàn)。對比文獻[1]方案和ST官網(wǎng)的IAP方案:文獻[1]方案與ST官網(wǎng)的IAP方案相同,將BootLoader代碼存放在FLASH中,執(zhí)行BootLoader之前先將BootLoader代碼拷貝到單片機的RAM中執(zhí)行,對整片F(xiàn)LASH進行數(shù)據(jù)升級[1];ST官網(wǎng)方案的缺點是固件升級過程中不能斷電,如果斷電將損壞原有的固件,導(dǎo)致STM32不能正常啟動。文獻[2?3]在ST官網(wǎng)的方案上進行改進,BootLoader代碼存放在FLASH中,并在FLASH中執(zhí)行BootLoader代碼,固件升級時跳過BootLoader代碼存儲區(qū),對BootLoader存儲區(qū)域之外的FLASH進行數(shù)據(jù)升級,確保BootLoader代碼的完整性,可解決固件升級過程中斷電損壞原有固件的問題[2?3]。但使用PC機的超級終端中的Ymodem協(xié)議通過串口發(fā)送固件。此方案在使用過程中存在較大的局限性,其要求PC機必須要有串口。如果PC機有串口,那么使用IAP升級的意義不大,因為通過串口可使用STM32已固化的BootLoader代碼進行ISP操作。文獻[4?5]對方案進一步改進使用SD卡或USB接口進行固件升級,這樣可以解決PC機串口局限性問題[4?5],但仍然使用兩個固件的方案,對于產(chǎn)品生產(chǎn)而言增加了固件燒錄的工作量,也不便于固件的維護。文獻[6]對兩個固件進行手工合并,將兩個固件合并成一個固件,可以解決固件燒錄的工作量大的問題[6]。但是由于手工操作,降低了固件合并的可靠性。文中方案對比上述方案有進一步改進。文中的改進方案在程序設(shè)計時也使用兩個工程,但最終將BootLoader程序工程的固件通過編譯器鏈接到應(yīng)用程序工程代碼中,最終生成一個固件,減少產(chǎn)品生產(chǎn)燒錄固件的工作量。由于固件合并是由編譯器自動完成,增加了固件合并的可靠性。IAP升級固件時通過PC機的USB端口拷貝固件到電子產(chǎn)品的外部FLASH中,然后進行升級固件,解決了PC機要求有串口的局限性。BootLoader存放在0x08000000~0x08004FFF地址區(qū)域,上電后先執(zhí)行BootLoader代碼,滿足條件才跳轉(zhuǎn)至應(yīng)用程序執(zhí)行,固件升級過程中跳過BootLoader存儲區(qū)域進行數(shù)據(jù)升級,保證BootLoader代碼的完整性,解決了固件升級過程中斷電損壞固件的問題。若STM32為互聯(lián)型產(chǎn)品可通過U盤連接到電子產(chǎn)品USB端口進行升級固件。文中以STM32F103VCT6[7]控制器為例,對IAP升級固件方案做詳細(xì)介紹。

      1 硬件設(shè)計框圖

      文中介紹的IAP升級固件方案需要一定的硬件電路支持。支持IAP升級固件的硬件框圖如圖1所示。endprint

      由圖1可見所需要的硬件電路比較簡單:需要將STM32F103VCT6內(nèi)嵌USB模塊的USB接口引出,用于連接PC機傳輸數(shù)據(jù);增加一個外部的FLASH存儲器。AT45DB041的最大存儲容量[8]為528 KB。此容量應(yīng)大于STM32的FLASH容量,在IAP升級固件過程中用于存儲要升級的固件。

      2 程序設(shè)計

      2.1 程序架構(gòu)

      程序設(shè)計時分為兩個工程,分別為BootLoader程序工程和應(yīng)用程序工程,程序架構(gòu)如圖2所示。

      BootLoader代碼里需要包含SPI驅(qū)動,AT45DB041器件驅(qū)動,F(xiàn)ats文件系統(tǒng)。BootLoader代碼是通過檢查AT45DB041存儲器中是否存在update.bin文件來判斷是否需要進行固件升級操作。由于BootLoader代碼最終需要鏈接到應(yīng)用程序中執(zhí)行,應(yīng)用程序的中斷被重新映射到0x08005000地址開始,因此BootLoader代碼里面需要關(guān)閉所有中斷,SPI模塊也只能通過查詢方式進行數(shù)據(jù)收發(fā)。

      應(yīng)用程序中需包含SPI驅(qū)動,AT45DB041器件驅(qū)動,F(xiàn)ats文件系統(tǒng),還需包含USB驅(qū)動。應(yīng)用程序執(zhí)行過程中,若有用戶需要對電子產(chǎn)品進行固件升級,應(yīng)用程序?qū)覷SB模塊,將電子產(chǎn)品用USB線連接到電腦,將固件改名為update.bin后拷貝到AT45DB041的模擬U盤中,重啟后可執(zhí)行固件升級操作。

      2.2 FLASH存儲區(qū)域劃分

      STM32F103VCT6為大容量產(chǎn)品,具有256 KB FLASH,48 KB RAM[7]。256 KB的FLASH存儲區(qū)共分為128頁,每頁大小為2 KB。將存儲區(qū)域分為兩部分,地址0x08000000~0x08004FFF共20 KB空間用于存放BootLoader代碼,地址0x08005000~0x0803FFFF共236 KB的空間用于存放電子產(chǎn)品實現(xiàn)功能的應(yīng)用程序代碼。BootLoader程序代碼與應(yīng)用程序代碼用兩個不同的工程編譯。BootLoader編譯完成之后生成bin固件,使用IAR編譯器鏈接到應(yīng)用程序的工程文件中,最后生成一個最終的bin文件。最后的這個文件為產(chǎn)品生產(chǎn)或產(chǎn)品固件升級的程序固件。STM32 FLASH區(qū)域劃分如圖3所示。

      2.3 固件升級流程

      STM32系列的MCU上電啟動后會自動跳轉(zhuǎn)到0x08000000地址開始執(zhí)行[9]。由于BootLoader代碼位于0x08000000地址開始,因此每次上電都應(yīng)開始運行BootLoader代碼。在BootLoader代碼里檢查是否有升級固件文件,若有則進行升級操作,升級完成后將固件文件刪除;若沒有則跳轉(zhuǎn)至應(yīng)用程序代碼執(zhí)行[10]。固件升級工作流程如圖4所示。升級固件時需要注意一下幾點:

      (1) 打開update.bin文件后讀取前20 KB數(shù)據(jù)丟棄,因為前20 KB數(shù)據(jù)是BootLoader代碼,此部分代碼不需要升級。

      (2) 升級固件時應(yīng)該從0x08005000地址開始寫FLASH,不能對0x08000000~0x08004FFF的地址區(qū)域進行寫FLASH操作,此區(qū)域為BootLoader代碼區(qū)域,如果進行寫操作,則會導(dǎo)致整個固件損壞[11]。

      3 IAR編譯器相關(guān)配置

      3.1 icf文件配置

      每一款芯片的程序使用IAR編譯器編譯時都會使用到一個.icf后綴名的文件。此文件的作用是定義芯片的內(nèi)存區(qū)域,一般情況下不需要修改此文件。STM32F103VCT6的FLASH被劃分為2個區(qū)域,分別用于存放不同功能的程序代碼。為了能將程序代碼存放到指定的FLASH區(qū)域,需要修改icf文件。由于BootLoader代碼與應(yīng)用程序為不同的程序工程,因此需要修改2份icf文件。BootLoader程序工程的icf文件修改如下:

      3.2 bin文件鏈接

      改進方案的優(yōu)點在于將BootLoader的bin文件使用IAR編譯器鏈接到應(yīng)用程序的工程中,最終生成一個bin文件。減少產(chǎn)品在生產(chǎn)上的程序燒錄工作和程序維護工作。將BootLoader工程生成的bin文件改名為bootloader.bin。并將此文件拷貝到應(yīng)用程序的工程目錄下。然后打開應(yīng)用程序工程,在workspace窗口選擇工程名,單擊鼠標(biāo)右鍵選擇Option?>Linker?>Input。Bin文件鏈接配置如圖5所示。

      Keep symbols可隨意填寫,文中填寫bootloader,此處與下面的symbols編輯框填寫一致。由于bootloader.bin放置在應(yīng)用程序工程目錄文件路徑應(yīng)該填寫$PROJ_DIR$\bootloader.bin。Section編輯框填寫.bootloader,與icf文件中配置的一致。鏈接后對工程進行編譯,如果不報錯,說明鏈接成功,可打開.map文件查看鏈接bin文件的地址分配。

      4 結(jié) 語

      經(jīng)測試可用此方案對STM32F103VCT6進行固件升級。固件升級過程中對電子產(chǎn)品進行人為斷電,重新上電后可繼續(xù)重新升級,不受斷電影響。整個固件升級過程需要約1 min。對此方案還可進行延伸改進,如果STM32為互聯(lián)型產(chǎn)品,USB可支持OTG功能,可使用U盤連接到電子產(chǎn)品,將固件文件從U盤中拷貝到AT45DB041中,無需PC機參與。也可將AT45DB041改用SD卡,先將固件文件拷貝到SD中,再將SD卡插到電子產(chǎn)品中進行固件升級。

      參考文獻

      [1] 陳峰峰,胡毅,許艷.STM32F10x在應(yīng)用中編程的實現(xiàn)方法[J].單片機與嵌入式系統(tǒng)應(yīng)用,2009(9):25?27.

      [2] 張舞杰,南亦明.基于STM32F103VB的應(yīng)用編程技術(shù)的實現(xiàn)[J].計算機應(yīng)用,2009,29(10):2820?2822.

      [3] 李興鶴,蔡亮,宋吉波,等.STM32用戶基于IAP的程序更新技術(shù)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012(1):74?75.

      [4] 王黨利,寧生科,馬保吉.基于STM32F10x引導(dǎo)程序?qū)崿F(xiàn)USB在應(yīng)用中編程[J].應(yīng)用天地,2010,29(11):68?70.

      [5] 顏秋男,胡毅.STM32F103VB的SD卡在應(yīng)用編程設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012(2):29?31.

      [6] 唐小平,廖美英,張祥.基于STM32平臺的IAP設(shè)計實現(xiàn)[J].兵工自動化,2014,33(9):94?96.

      [7] 陳宮,王三勝,張慶榮,等.基于STM32F103VCT6的微位移控制系統(tǒng)設(shè)計[J].現(xiàn)代電子技術(shù),2012,35(3):144?146.

      [8] 張杏珍,孫健.IC卡芯片AT45DB041的原理及應(yīng)用[J].現(xiàn)代電子技術(shù),2005,28(10):17?19.

      [9] 程霄.基于邊坡監(jiān)測系統(tǒng)的無線傳感器網(wǎng)絡(luò)關(guān)鍵技術(shù)研究[D].重慶:重慶大學(xué),2014:56.

      [10] 周天兵,劉國忠.單片機程序遠(yuǎn)程升級技術(shù)[J].儀表技術(shù),2011(9):25?27.

      [11] 李靜波.嵌入式系統(tǒng)固件升級的設(shè)計[J].今日電子,2013(10):53?55.endprint

      猜你喜歡
      固件
      基于固件的遠(yuǎn)程身份認(rèn)證
      提取ROM固件中的APP
      電腦愛好者(2015年7期)2015-04-09 08:54:02
      一種通過USB接口的可靠固件升級技術(shù)
      奧林巴斯XZ—2新固件升級
      中國攝影(2014年1期)2014-02-24 01:50:23
      文登市| 高安市| 永靖县| 游戏| 额敏县| 安阳县| 太白县| 曲麻莱县| 安达市| 正安县| 怀仁县| 北宁市| 二连浩特市| 广水市| 凭祥市| 北海市| 名山县| 资中县| 溆浦县| 内乡县| 宁国市| 太湖县| 五寨县| 白沙| 遵化市| 曲阜市| 桑植县| 屏东县| 新平| 太仆寺旗| 萍乡市| 米脂县| 中西区| 旬邑县| 建始县| 武乡县| 霍邱县| 西青区| 仙桃市| 始兴县| 宣武区|