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

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于IAP的STM32程序更新技術

    基于IAP的STM32程序更新技術

    作者: 時間:2013-01-25 來源:網絡 收藏

    2.2 技術關鍵點

    通過研究技術實現用戶的過程,不難發現,在過程中必須保證PC指針在Boot區移動,而不能隨意跳轉至常態存儲區。這個要求,結合微控制器原理可以得出需要特別注意的幾個關鍵點。

    (1) 禁止中斷

    毫無疑問,中斷會使得PC指針跳轉至中斷服務入口地址,因此,在進入Boot區前需要禁止所有中斷。

    (2) 禁用底層外圍接口

    對于有些外圍接口,比如當采用ADC+DMA的方式進行多通道A/D采樣時,采樣過程會按照預先設置的通道順序進行A/D采樣。若在PC指針跳轉至Boot區前沒有禁用,則跳回常態存儲區時,其存儲A/D通道值就可能發生錯位的情況。

    (3) 使用實時操作系統

    如果使用具有搶占式RTOS(即硬實時操作系統),則需要禁止所有任務,并且屏蔽所有的信號量及郵箱,以防止激活某個任務,導致PC指針跳轉至常態存儲區。

    (4) 使用看門狗

    在考慮導致PC指針跳轉的原因時,看門狗很容易被忽略,而且很多芯片的看門狗一旦使能就不能禁用,所以不能通過禁用的方法達到目的。最安全的方法是,在Boot區中也加入看門狗的喂狗指令。特別要注意的是,當需要擦除、寫入大量Flash數據時,需要對其過程所需時間進行定量的估計,有必要時可以在這個過程中多次喂狗。

    (5) 存儲空間分配

    Boot區以及常態存儲區的大小可以人為分配,一般而言,盡可能使常態存儲區最大化,因為產品的功能是在該區域得到體現;而Boot區盡可能使其代碼簡潔,避免使用中斷以及復雜的底層驅動及算法。

    2.3 技術實現

    (1) 關閉相關中斷及禁用相關外圍接口

    如定時器中斷、SysTick中斷、A/D中斷、外部I/O中斷等。

    (2) 設定跳轉地址

    typedef void (*pFunction)(void);

    INT32U JumpAddress;//定義IAP入口地址pFunction Jump_To_Application;//定義指向IAP入口地址程序的函數指針

    JumpAddress=*(vu32*)(IAP_ADDR + 4);

    Jump_To_Application=(pFunction) JumpAddress;

    (3) 喂狗并執行跳轉

    IWDG_ReloadCounter();//喂狗

    __set_MSP(*(__IO uint32_t*) IAP_ADDR);//初始化用戶應用程序的堆棧指針

    Jump_To_Application();

    (4) IAP代碼(Boot區代碼)

    只需要驅動用到的底層接口,盡量不使用中斷,盡可能少地占用存儲空間,同時需要適時地喂狗。另外對該系列Flash操作會有所不同,比如F103ZE執行擦除操作時,一頁為2 KB,而SMT32F103VC6等芯片一頁為1 KB,使用其他型號芯片時需要具體查閱相關數據手冊。

    3 總結

    本文從分析IAP技術原理入手,詳細論述了利用IAP技術實現用戶程序更新的要點。另外,可以想象,如果Boot區加入TCP/IP協議連入互聯網,即可借助網絡對產品進行在線升級,既可提高系統的可維護性,又可降低產品的維護成本,必將在未來得到更為廣泛的應用。


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 蛟河市| 娄底市| 梁平县| 丰顺县| 油尖旺区| 昌图县| 山西省| 宁明县| 宁海县| 德州市| 衡东县| 长汀县| 新民市| 邛崃市| 安康市| 扎囊县| 临泉县| 巨鹿县| 犍为县| 巴彦淖尔市| 中江县| 白河县| 哈尔滨市| 屯昌县| 宜川县| 泸州市| 甘肃省| 尉氏县| 象州县| 临湘市| 金湖县| 定州市| 根河市| 双城市| 灌云县| 宜良县| 普兰店市| 周至县| 安康市| 延长县| 博野县|