日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來(lái)到深圳市穎特新科技有限公司!
語(yǔ)言
當(dāng)前位置:首頁(yè) >> HDSC/華大 >> 國(guó)產(chǎn)超低功耗華大MCU遠(yuǎn)程升級(jí)IAP

國(guó)產(chǎn)超低功耗華大MCU遠(yuǎn)程升級(jí)IAP

作者: 來(lái)源: 發(fā)布時(shí)間:2020-06-08  瀏覽:13

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

  • 功能介紹

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

  • AP原理介紹

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

  1. 檢查是否需要對(duì)第二部APP程序代碼進(jìn)行更新
  2. 如果不需要更新則轉(zhuǎn)到4)
  3. 執(zhí)行更新操作
  4. 跳轉(zhuǎn)到第二部分代碼執(zhí)行

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

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

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

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

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

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

其中:BOOT程序大小3.5KB

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

??????APP程序大小為24KB?

??Demo程序,操作流程如下:????

  1. 先將APP工程HEX下載到芯片內(nèi)部
  2. 打開BOOT工程HEX下載到芯片,或者可以使用工具將兩個(gè)HEX文件合并在一起下載到芯片內(nèi)部。
  3. 使用上位機(jī)演示程序,打開串口波特率固定為9600。按照協(xié)議將APP工程的bin文件下載到0x1000開始的芯片內(nèi)部,其中要求APP的bin文件小于28KB。
  • 參考樣例及驅(qū)動(dòng)

通過(guò)上述介紹,使用演示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 一個(gè)字節(jié)

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

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

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

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

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

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

結(jié)束符號(hào):固定字符為0x16 一個(gè)字節(jié)

讀指令如下:

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

正確回復(fù):68 A0 A1 ??95 ??Page ??0x04 ??0x00 ??D0 ………… D1023 ??CRC0 CRC1 16

錯(cuò)誤回復(fù)? ?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 ?

正確回復(fù):68 A0 ??A1 ??A5 ??Page ??04 ??00 ??CRC0 CRC1 16

錯(cuò)誤回復(fù)? ?68 A0 ??A1 ??E5 ??Page ??00???00 ???CRC0 ?CRC1 16

Page 選擇(0?-- 27)

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

開始IAP升級(jí)指令

68 ??A0 ??A1 ??36 ??00 ??00 ???00 ???00 ??00 ??16 ?

正確回復(fù) ?68 ?A0 ??A1 ???B6 ??00 ???00 ?00 ?00 ???00 ??16

錯(cuò)誤回復(fù) ?68 ?A0 ??A1 ???F6 ???00 ??00 ?00 ?00 ???00 ??16

結(jié)束IAP升級(jí)指令

68 ??A0 ??A1 ??49 ??00 ??00 ??00 ??00 ???00 ??16 ?

正確回復(fù) ?68 ?A0 ??A1 ??C9 ??00 ????00 ?00 ?00 ???00 ??16

錯(cuò)誤回復(fù) ?68 ?A0 ??A1 ??09 ??00 ????00 ?00 ?00 ???00 ??16

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

?

以下部分簡(jiǎn)要介紹IAP實(shí)現(xiàn)關(guān)鍵代碼:

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

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

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

???new_vect_table ?EQU ????0x00001000 ????????;中斷向量偏移長(zhǎng)度 ; reset Vector table address.???LDR ????R0, =0xE000ED08 LDR ????R2, =new_vect_table???STR ????R2, [R0] ??????;向量表重定義
  • 總結(jié)

以上章節(jié)簡(jiǎn)要介紹了HC32L110系列的IAP控制模塊基本功能,詳細(xì)說(shuō)明了該模塊的各個(gè)功能及操作步驟,用戶在實(shí)際的應(yīng)用開發(fā)過(guò)程中,如果需要更深一步了解該模塊的使用方法及操作事項(xiàng),應(yīng)以HC32L110的用戶手冊(cè)為準(zhǔn)。本章中提到的樣例既可以作為用戶進(jìn)一步的實(shí)驗(yàn)與學(xué)習(xí),也可以在實(shí)際開發(fā)中直接應(yīng)用。

【國(guó)產(chǎn)低超功耗華大單片機(jī)HC32L110遠(yuǎn)程升級(jí)程序下載】

編輯:admin  最后修改時(shí)間:2020-06-09

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

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

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

信丰县| 凌海市| 赤城县| 简阳市| 金沙县| 望都县| 汽车| 江西省| 开封县| 博乐市| 河北省| 迁西县| 扶绥县| 桂阳县| 光山县| 大城县| 双鸭山市| 靖西县| 绥江县| 永春县| 克拉玛依市| 望都县| 建始县| 尼木县| 家居| 马山县| 阿瓦提县| 洛隆县| 镇安县| 济阳县| 高台县| 奉化市| 谷城县| 昌都县| 石泉县| 泽库县| 剑川县| 武清区| 新民市| 太和县| 张家口市|