固件(Firmware)我們通常理解為軟件,由于集成電路的發(fā)展,目前的固件多以FLASH為載體,它與我們通常所說的程序的區(qū)別已經(jīng)越來越小。固件升級實際上就是用新的固件程序重寫FLASH的過程,升級固件變得越來越簡單。
在用戶使用過程中,一旦系統(tǒng)提供產(chǎn)品固件更高的版本,就要求產(chǎn)品能夠通過固件升級程序對原有固件進行升級,而設備固件升級(Device Firmware Upgrade,DFU)正是能夠完成這種任務的一種機制。隨著USB技術的發(fā)展,USB設備的更新速度越來越快,通過USB接口來升級產(chǎn)品的固件是一種實用高效的方法[1]。本文的主要研究內容就是在自主開發(fā)的DAB接收機的基礎上[2],通過USB接口實現(xiàn)接收機的DFU。
本文提出的固件升級方法利用PC機通過USB接口與DAB接收機進行通信,并在此基礎上完成DFU的各種操作[3],基本結構如圖1所示。
隨著科技的不斷進步,生產(chǎn)廠商很難滿足用戶多元化的需求,更多的廠商把升級固件以提供更多更新的功能作為附加值來提供給用戶。
在產(chǎn)品上市后,生產(chǎn)廠商對產(chǎn)品程序做了進一步的優(yōu)化和改進,這時候需要升級產(chǎn)品的固件以提升產(chǎn)品的性能。對于已經(jīng)開發(fā)出的軟件,有可能存在一些BUG,生產(chǎn)廠商也可以通過固件升級來修正以前版本中存在的錯誤。
接收機DFU的實現(xiàn)參照USB固件升級的標準流程[4],接收機通過USB線纜與PC機相連,在PC機上執(zhí)行固件更新的相關操作,完成接收機的固件升級,整個過程遵循枚舉,重配置,傳輸,顯示四個階段,具體的實現(xiàn)過程如圖2所示。
第一階段為枚舉階段,接收機正常運行過程包括兩套不同的描述符:DFU模式描述符和正常運行描述符。接收機正常運行時,列舉出DFU模式描述符并向主機表明其具備可實現(xiàn)DFU的能力。
第二階段為重配置階段,接收機和主機達成一致發(fā)起固件升級。主機給接收機發(fā)送一個USB重置請求,接收機接收到后,切換到固件升級模式,屏蔽正常工作模式,并為下一階段做好準備。
第三階段為傳輸階段,主機通過特定的軟件將固件升級的文件傳送給接收機,在功能描述符中定義的參數(shù)可以正確的保證塊的大小以及在內存中重新編譯的時間。
第四階段為顯示階段,接收機通知主機已完成重新編譯,主機發(fā)送一個USB復位請求給接收機,接收機重啟后,重新執(zhí)行枚舉階段,并執(zhí)行已經(jīng)更新的固件程序。
接收機DFU的設計方案是通過USB接口的數(shù)據(jù)傳輸功能接收來自PC機的固件升級文件,利用MCU的在應用編程(In Application Programming,IAP)功能來實現(xiàn)接收機的固件升級。
IAP就是MCU通過對外接口(如USART,USB,以太網(wǎng),無線信道等)接收升級固件,并在程序運行過程中重新對內部FLASH進行編程的技術。如圖3所示為接收機IAP功能實現(xiàn)的示意圖。
IAP的實現(xiàn)需要兩部分程序:引導程序、用戶程序。引導程序需要通過仿真器或通過在系統(tǒng)中編程(In System Programming,ISP)的方式燒寫。用戶程序可以和引導程序一起燒寫,也可通過引導程序的IAP功能燒寫。
實現(xiàn)IAP功能的核心是引導程序,這部分程序主要負責與PC機同步,通過USB接收升級固件,并寫入MCU指定的內存地址,MCU復位后程序指針跳轉并執(zhí)行新用戶程序,從而完成接收機的固件升級。
接收機有兩種工作模式:DFU升級模式和正常工作模式。兩種工作模式不能同時運行,由于接收機在DFU升級模式下,就不再是能收聽DAB節(jié)目的接收機,而是相當于EEPROM(電可擦可編程只讀存儲器)存在,所以接收機從正常工作模式進入到DFU升級模式,需要外部提供一個中斷信號。
在本文設計方案中,采用MCU的PC8端口對應的按鍵作為同步按鍵,接收機進行固件升級時,MCU通過識別同步按鍵產(chǎn)生的中斷信號與PC機進行同步,從而使接收機進入DFU升級模式。
接收機上電復位,MCU首先從地址0x80 00004處取出復位中斷向量地址,程序指針跳轉執(zhí)行復位中斷服務程序。正常情況下,程序指針跳轉至用戶程序的main函數(shù)處執(zhí)行用戶程序,但接收機處于DFU升級模式下,程序指針將跳轉至引導程序的main函數(shù)處執(zhí)行IAP功能相關操作。如圖4所示為接收機實現(xiàn)DFU的程序流程圖。
執(zhí)行IAP功能操作時,MCU首先對USB接口進行初始化,然后接收來自PC機的升級固件,并從內部FLASH的0x8004000地址處開始寫入。
寫入過程完畢,MCU執(zhí)行復位操作,隨后接收機工作在正常運行模式下,程序指針將跳轉至新寫入用戶程序的復位中斷向量表處,取出復位中斷向量地址,執(zhí)行復位中斷響應操作,并跳轉至新用戶程序的main函數(shù)處開始執(zhí)行。
接收機再次上電,工作在正常運行模式下,MCU的程序指針會直接跳轉至FLASH的0x8004000地址處即新用戶程序的main函數(shù)處,執(zhí)行新寫入的用戶程序。
圖1 DAB接收機固件升級
圖2 設備固件升級過程
圖3 接收機IAP功能實現(xiàn)示意圖
圖4 接收機IAP程序流程圖
接收機是以STM32系列微控制器作為核心處理器,采用ARM公司專為要求高性能、低成本、低功耗的嵌入式應用設計的Cortex-M3內核。STM32系列存儲器在Cortex-M3內核的基礎上加入了FLASH、SRAM等,使其成為可以工作的處理芯片。
STM32的存儲器地址空間總共劃分為8塊區(qū)域,每塊區(qū)域大小為512M。如圖5所示為STM32系列MCU存儲器第一塊區(qū)域的結構示意圖。
引導程序和用戶程序都存放在第一塊Flash區(qū)域內,引導程序存放在0x8000000-0x8003FFF區(qū)域,用戶程序存放在0x800 4000-0x801FFFF區(qū)域[5]。為了使FLASH區(qū)域內存放的引導程序和用戶程序代碼之間不發(fā)生沖突,新用戶程序的中斷向量表需要做重映射。
固件升級完成后,在新用戶程序執(zhí)行過程中,F(xiàn)LASH區(qū)域的不同地址處存在兩個中斷向量表。當有中斷請求來臨時,程序指針仍然會跳轉至引導程序的中斷向量表處,而不是新用戶程序的中斷向量表處,這是由MCU內部硬件工作機制決定的。
PC端升級軟件使用ST意法半導體公司官方提供的軟件,在ST官方網(wǎng)站上可下載到該軟件,安裝后執(zhí)行。
圖5 存儲器第一塊區(qū)域結構示意圖
圖6 接收機DFU升級演示
接收機上電,首先按住同步按鍵,并將接收機通過USB線纜與PC機相連,然后松開按鍵。當程序左上角識別出STM Device時,說明接收機與PC機已成功建立連接,點擊Choose…選擇本地的升級固件,然后點擊Upgrade執(zhí)行升級操作。
如圖6所示為接收機固件升級成功的程序界面。
本文提出的設計方法實現(xiàn)了便攜式DAB接收機的DFU,經(jīng)多次測試表明,該方法能夠可靠的對接收機進行固件升級。
用戶需要對便攜式DAB接收機進行固件升級時,只需在說明書內指定的網(wǎng)址下載升級軟件和固件,就可將產(chǎn)品的固件升級至最新版本。DFU的實現(xiàn),給用戶升級產(chǎn)品帶來很大方便,具有一定的現(xiàn)實意義和應用價值。
[1]Compaq,Intel,Microsoft,NEC.Universal Serial Bus Speci fi cation,Revision 1.1,September 23,1998.
[2]陸明瑩,張賢斌,王國裕,等.基于ID200的便攜式DAB接收機的設計和實現(xiàn)[J].電聲技術,2010(12):81-83.
[3]施文灶,王平,黃晞,陳偉.基于USB的便攜式設備固件升級程序的設計[J].電子設計工程,2009(11):4-6.
[4]Universal Serial Bus Device Class Specification for Device Firmware Upgrade.Version 1.1 Aug 5,2004 http://www.usb.org/developers/devclass_docs#approved.
[5]STM32F10xxx Flash memory microcontrollers.August 2012.http://www.st.com/cn/mcu/product/164486.jsp.