新聞中心

        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 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 响水县| 巴东县| 布拖县| 阿拉善左旗| 上栗县| 乌苏市| 安溪县| 稻城县| 正安县| 唐海县| 科尔| 襄城县| 桂阳县| 富平县| 吉林市| 南昌市| 宁都县| 芮城县| 大宁县| 石屏县| 扶绥县| 衡南县| 大洼县| 三都| 惠州市| 彭泽县| 潞西市| 恩施市| 沙湾县| 陆河县| 连山| 长兴县| 金沙县| 金平| 江山市| 韶关市| 会宁县| 阜南县| 海阳市| 福清市| 新密市|