68精品久久久久久欧美,最近中文字幕完整在线看一,久久亚洲男人天堂,最近中文字幕完整视频高清1

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> HDSC/華大 >> 華大單片機bootloader:華大MCU如何遠程升級IAP?

華大單片機bootloader:華大MCU如何遠程升級IAP?

關鍵字:華大單片機 串口升級 作者: 來源: 發(fā)布時間:2020-06-10  瀏覽:515

工程師在做產(chǎn)品的時候有時候會有遠程對產(chǎn)品進行升級的需求。 對于沒有開發(fā)過此功能的工程師會不知道從何下手,本文就以HC32L110為例介紹國產(chǎn)超低功耗華大單片機如何用IAP功能實現(xiàn)為單片機遠程升級。文章的結尾有相關例程下載鏈接。

功能介紹

IAP是In Application Programming的首字母縮寫,IAP是用戶自己的程序在運行過程中對User Flash的部分區(qū)域進行燒寫,目的是為了在產(chǎn)品發(fā)布后可以方便地通過預留的通信口對產(chǎn)品中的固件程序進行更新升級。

IAP原理介紹

通常實現(xiàn)IAP功能時,需要在設計固件程序時編寫兩個項目代碼,第一個項目程序即BOOT程序不執(zhí)行正常的功能操作,而只是通過某種通信方式(如USB、USART)接收程序或數(shù)據(jù),執(zhí)行對第二部分代碼的更新;第二個項目程序即APP程序用戶真正的功能代碼。這兩部分項目代碼同時燒錄在Flash中,當芯片上電后,首先是第一個項目程序BOOT開始運行,它主要實現(xiàn)如下功能:

檢查是否需要對第二部APP程序代碼進行更新,如果不需要更新則轉到4)執(zhí)行更新操作

跳轉到第二部分代碼執(zhí)行

第一部分BOOT代碼可以通過SWD或者離線編程器下載到芯片F(xiàn)lash內(nèi)部,第二部分APP和第一部分BOOT一起燒入芯片內(nèi)部,以后需要程序更新再通過第一把BOOT代碼更新。

根據(jù)芯片系列的Flash存放不同地址范圍,從最低地址區(qū)域開始存放BOOT,緊跟其后的就是APP程序,本篇筆記受限于芯片內(nèi)部Flash容量,只是存放一個APP程序。即在芯片內(nèi)部有兩個程序即BOOT和APP程序。

IAP功能具體實現(xiàn)

芯片程序一般從Flash地址0x0000_0000開始執(zhí)行,基于Cortex-M0+內(nèi)核特性,內(nèi)部通過中斷向量表來響應中斷,程序從中斷向量表取出復位中斷向量執(zhí)行中斷程序,當中斷產(chǎn)生,芯片內(nèi)部PC指針定位到中斷向量表來取出對應的中斷服務程序執(zhí)行。如果沒有中斷產(chǎn)生,在芯片執(zhí)行完復位中斷服務程序后,跳轉到main函數(shù)順序執(zhí)行死循環(huán)。如果有中斷產(chǎn)生,通過中斷向量表執(zhí)行對應的中斷服務程序。

當加入IAP后,芯片還是從中斷向量表取出復位中斷向量執(zhí)行中斷程序,如果沒有中斷產(chǎn)生,在芯片執(zhí)行完復位中斷服務程序后,跳轉到main函數(shù)。在執(zhí)行完IAP后,新程序的復位中斷向量地址為0x0000_0004 + BOOT程序大小,跳轉到APP程序的復位向量表,執(zhí)行APP的復位中斷服務程序,隨后跳轉到APP程序的main函數(shù)執(zhí)行。

演示Demo程序內(nèi)部分配如下:

其中:BOOT程序大小3.5KB

Para 區(qū)域存放IAP升級期間參數(shù)和標志占用0.5KB

APP程序大小為24KB

Demo程序,操作流程如下:  

先將APP工程HEX下載到芯片內(nèi)部

打開BOOT工程HEX下載到芯片,或者可以使用工具將兩個HEX文件合并在一起下載到芯片內(nèi)部。

使用上位機演示程序,打開串口波特率固定為9600。按照協(xié)議將APP工程的bin文件下載到0x1000開始的芯片內(nèi)部,其中要求APP的bin文件小于28KB。

參考樣例及驅動

通過上述介紹,使用演示Demo程序IAP需要特定協(xié)議。

通信協(xié)議格式如下:

///*frame:68  A0  A1  C  Page   L0  L1  D0... DN-1   CRC0  CRC1   16*///

///*offset :0    1    2    3      4       5    6    7      8+N     9+N   10+N   11 +N*///

頭字符:    固定字符為0x68 一個字節(jié)

地址:       A0 A1 兩個字節(jié)  

控制碼C: 讀地址為0x15    寫地址為0x25

頁地址page: 一個字節(jié) 代表現(xiàn)在要操作的那個頁

長度L0 L1:  兩個字節(jié) L0代表高字節(jié),L1代表低字節(jié),此處長度僅代表數(shù)據(jù)區(qū)域長度

數(shù)據(jù)域D0…DN-1 : 代表讀出或者寫入的數(shù)據(jù)

數(shù)據(jù)校驗CRC: 采用CRC-16方式,代表數(shù)據(jù)域數(shù)據(jù)的校驗。

結束符號:固定字符為0x16 一個字節(jié)

讀指令如下:

68   A0   A1   15   Page   0x00   0x00   CRC0   CRC1 16  

正確回復:68 A0 A1   95   Page   0x04   0x00   D0 ………… D1023   CRC0 CRC1 16

錯誤回復   68 A0  A1  D5   Page   0x00   0x00  CRC0  CRC1 16

Page 選擇(0 -- 27)

每次讀取1K字節(jié)數(shù)據(jù)

寫指令如下:

68   A0   A1   25   Page   04   00   D0 ………… D1023   CRC0   CRC1 16  

正確回復:68 A0   A1   A5   Page   04   00   CRC0 CRC1 16

錯誤回復   68 A0   A1   E5   Page   00   00    CRC0  CRC1 16

Page 選擇(0 -- 27)

每次寫1K字節(jié)數(shù)據(jù)

開始IAP升級指令

68   A0   A1   36   00   00    00    00   00   16

正確回復  68  A0   A1    B6   00    00  00  00    00   16

錯誤回復  68  A0   A1    F6    00   00  00  00    00   16

結束IAP升級指令

68   A0   A1   49   00   00   00   00    00   16

正確回復  68  A0   A1   C9   00     00  00  00    00   16

錯誤回復  68  A0   A1   09   00     00  00  00    00   16

發(fā)送數(shù)據(jù)幀如果發(fā)送結束到接收小于2s,如果超過說明IAP升級通信錯誤。

1)BOOT實現(xiàn)跳轉到APP代碼:

if(((*(__IO uint32_t*)appxaddr)&0x2FFE0000)==0x20000000) //檢查棧頂?shù)刂肥欠窈戏?br />
{
  jump2app=(iapfun)*(__IO uint32_t*)(appxaddr+4);  //APP程序復位地址
  MSR_MSP(*(__IO uint32_t*)appxaddr);              //初始化APP堆棧指針
  jump2app();                                      //跳轉到APP程序
}




2)APP程序中斷向量偏移:

   new_vect_table  EQU     0x00001000         ;中斷向量偏移長度
; reset Vector table address.
   LDR     R0, =0xE000ED08
   LDR     R2, =new_vect_table
   STR     R2, [R0]       ;向量表重定義


總結

以上章節(jié)簡要介紹了HC32L110系列的IAP控制模塊基本功能,詳細說明了該模塊的各個功能及操作步驟,用戶在實際的應用開發(fā)過程中,如果需要更深一步了解該模塊的使用方法及操作事項,應以HC32L110的用戶手冊為準。本章中提到的樣例既可以作為用戶進一步的實驗與學習,也可以在實際開發(fā)中直接應用。

編輯:admin  最后修改時間:2020-06-10

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

左贡县| 泸定县| 正阳县| 灌云县| 科尔| 平和县| 都江堰市| 轮台县| 海林市| 田东县| 陕西省| 额敏县| 韶关市| 富顺县| 上思县| 青州市| 张家港市| 曲阳县| 红桥区| 荥经县| 高青县| 开化县| 斗六市| 涟源市| 章丘市| 寻甸| 衡阳县| 同德县| 五大连池市| 临漳县| 遵义市| 镇沅| 同江市| 沂源县| 班戈县| 富蕴县| 双江| 北辰区| 察哈| 于田县| 景洪市|