• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > DAB接收機USB固件升級的實現

    DAB接收機USB固件升級的實現

    作者: 時間:2013-07-31 來源:網絡 收藏

      4.接收機

      4.1 接收機DFU實現

      接收機DFU的設計方案是通過接口的數據傳輸功能接收來自PC機的文件,利用MCU的在應用編程(In ApplicationProgramming,IAP)功能來實現接收機的

    IAP就是MCU通過對外接口(如USART,U S B,以太網,無線信道等)接收升級固件,并在程序運行過程中重新對內部FLASH進行編程的技術。如圖3所示為接收機IAP功能實現的示意圖。

      I A P的實現需要兩部分程序:引導程序、用戶程序。引導程序需要通過仿真器或通過在系統中編程(In System Programming,ISP)的方式燒寫。用戶程序可以和引導程序一起燒寫,也可通過引導程序的IAP功能燒寫。

      實現IAP功能的核心是引導程序,這部分程序主要負責與PC機同步,通過接收升級固件,并寫入MCU指定的內存地址,MCU復位后程序指針跳轉并執行新用戶程序,從而完成接收機的固件升級。

      4.2 DFU模式進入機制

      接收機有兩種工作模式:DFU升級模式和正常工作模式。兩種工作模式不能同時運行,由于接收機在DFU升級模式下,就不再是能收聽DAB節目的接收機,而是相當于EEPROM(電可擦可編程只讀存儲器)存在,所以接收機從正常工作模式進入到DFU升級模式,需要外部提供一個中斷信號。

      在本文設計方案中,采用MCU的PC8端口對應的按鍵作為同步按鍵,接收機進行固件升級時,MCU通過識別同步按鍵產生的中斷信號與PC機進行同步,從而使接收機進入DFU升級模式。

      4.3 接收機IAP程序設計

      接收機上電復位,MCU首先從地址0×8000004處取出復位中斷向量地址,程序指針跳轉執行復位中斷服務程序。正常情況下,程序指針跳轉至用戶程序的main函數處執行用戶程序,但接收機處于DFU升級模式下,程序指針將跳轉至引導程序的main函數處執行IAP功能相關操作。如圖4所示為接收機實現DFU的程序流程圖。

      執行IAP功能操作時,MCU首先對USB接口進行初始化,然后接收來自PC機的升級固件,并從內部FLASH的0×8004000地址處開始寫入。

      寫入過程完畢,MCU執行復位操作,隨后接收機工作在正常運行模式下,程序指針將跳轉至新寫入用戶程序的復位中斷向量表處,取出復位中斷向量地址,執行復位中斷響應操作,并跳轉至新用戶程序的main函數 處開始執行。

      接收機再次上電,工作在正常運行模式下,MCU的程序指針會直接跳轉至FLASH的0×8004000地址處即新用戶程序的main函數處,執行新寫入的用戶程序。

      4.4 程序存儲空間分配

      接收機是以STM32系列微控制器作為核心處理器,采用A R M公司專為要求高性能、低成本、低功耗的嵌入式應用設計的C o r t e x – M 3內核。S T M 3 2系列存儲器在Cortex-M3內核的基礎上加入了FLASH、SRAM等,使其成為可以工作的處理芯片。

      STM32的存儲器地址空間總共劃分為8塊區域,每塊區域大小為512M.如圖5所示為STM32系列MCU存儲器第一塊區域的結構示意圖。

      引導程序和用戶程序都存放在第一塊Flash區域內,引導程序存放在0×8000000-0 x 8 0 0 3 F F F區域,用戶程序存放在0 x 8 0 04000-0x801FFFF區域。為了使FLASH區域內存放的引導程序和用戶程序代碼之間不發生沖突,新用戶程序的中斷向量表需要做重映射。

      固件升級完成后,在新用戶程序執行過程中,FLASH區域的不同地址處存在兩個中斷向量表。當有中斷請求來臨時,程序指針仍然會跳轉至引導程序的中斷向量表處,而不是新用戶程序的中斷向量表處,這是由MCU內部硬件工作機制決定的。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 广安市| 五华县| 女性| 博野县| 琼结县| 苍溪县| 凌源市| 三原县| 岚皋县| 芷江| 榆社县| 天长市| 南江县| 白水县| 固始县| 壤塘县| 拜泉县| 营山县| 美姑县| 历史| 正宁县| 定兴县| 绩溪县| 田东县| 石阡县| 噶尔县| 定结县| 阿克陶县| 富宁县| 城口县| 水城县| 邹平县| 交口县| 城口县| 庆安县| 上高县| 陈巴尔虎旗| 康平县| 莱阳市| 安化县| 开封市|