【概述】
本文將介紹廣芯微的8位MCU的IAP實(shí)現(xiàn)介紹及使用說明,通過IAP實(shí)驗(yàn)演示如何通過IAP更新用戶程序的流程步驟等。
【 什么是IAP?】
IAP即為In Application Programming(在應(yīng)用中編程)??梢院唵卫斫鉃椋涸诔绦蜻\(yùn)行的過程中進(jìn)行編程(升級程序,更新固件)。IAP是用戶自己的程序在運(yùn)行過程中對User Flash的部分區(qū)域進(jìn)行燒寫,目的是為了在產(chǎn)品發(fā)布后可以方便地通過預(yù)留的通信口對產(chǎn)品中的固件程序進(jìn)行更新升級。
IAP即為In Application Programming(在應(yīng)用中編程)??梢院唵卫斫鉃椋涸诔绦蜻\(yùn)行的過程中進(jìn)行編程(升級程序,更新固件)。IAP是用戶自己的程序在運(yùn)行過程中對User Flash的部分區(qū)域進(jìn)行燒寫,目的是為了在產(chǎn)品發(fā)布后可以方便地通過預(yù)留的通信口對產(chǎn)品中的固件程序進(jìn)行更新升級。
IAP的通信口有許多種:UART串口、I2C、SPI......等。按理說只要能傳輸數(shù)據(jù)的通信口都能實(shí)現(xiàn)IAP的功能。本文所使用的是UART方式的IAP。
【IAP實(shí)現(xiàn)介紹】
本文實(shí)驗(yàn)以UM8004為例,flash大小為16K。UM8004的中斷向量表以及IAP固件程序存放到0x0000-0x1400區(qū)域,在之后的更新中不會對以該區(qū)域空間進(jìn)行擦寫。用戶APP應(yīng)用程序存放在從0x1400-0x3FFF的空間。每次需要更新升級時(shí),將這段空間進(jìn)行擦寫,替換成更新的應(yīng)用程序代碼。
使用IAP的上位機(jī),通過IAP程序的處理函數(shù),即可實(shí)現(xiàn)應(yīng)用程序的更新升級。整個IAP的實(shí)現(xiàn)流程如下圖所示:
圖1 IAP功能流程圖
【 IAP使用說明】
開發(fā)套件
IAP開發(fā)套件包含:
· 硬件開發(fā)板
· 軟件開發(fā)包
軟件開發(fā)包
軟件開發(fā)包中包含IAP工程、用戶APP應(yīng)用程序例子程序、IAP使用說明、以及一些工具、上位機(jī)等等。
軟件開發(fā)包中的內(nèi)容如下:
·UM800Y_IAP:800Y的IAP工程。
·UM800Y_APP:用戶應(yīng)用程序示例Demo。
·UM800Y_IAP使用說明.doc:IAP實(shí)現(xiàn)和使用的說明文檔。
·UNIC_IAPTool.exe: IAP上位機(jī)。
·UNIC_BootTool.exe:Bootloader的用戶下載工具。
·Sscom5.13.1.exe:串口調(diào)試助手。
·Hex2bin.exe:hex文件轉(zhuǎn)換bin文件工具。
·JFlash.exe :合并bin或hex文件。
硬件環(huán)境
硬件環(huán)境如圖1所示:
·硬件開發(fā)板和USB連接線
·電腦(編譯代碼,下載程序代碼)
圖2硬件連接示意圖
軟件環(huán)境
Keil C51
工程說明
下面對本次實(shí)驗(yàn)的工程進(jìn)行簡單說明。
IAP工程:
(1)需要在Target選項(xiàng)卡里設(shè)置我們IAP程序的起始地址與大小,如:
圖3設(shè)置IAP程序的起始地址與大小
這里的IAP程序起始地址設(shè)為0x0000,大小設(shè)為0x1400,即IAP所需的FLASH空間為5KB。其中IAP所占空間的大小可根據(jù)IAP的實(shí)際大小進(jìn)行修改。
(2)設(shè)置IAP_Proc函數(shù)(IAP更新處理程序)的入口地址,用絕對地址定位的方法設(shè)置在某個固定的地址,下面以設(shè)置地址為0x0200為例。點(diǎn)開keil C51中的Options for Target,勾選下圖所示的地方。
圖4 勾選Use Extended Linker(LX51) instead of BL51
之后在下圖所示位置填入“?PR?IAP_PROC?IAP(C:0x0200)”, 如圖5,最后點(diǎn)擊ok。
圖5 設(shè)置IAP_Proc函數(shù)的地址為0x0200
(3) IAP源碼說明
圖6 IAP部分代碼
AP源碼主要功能是當(dāng)UART收到上位機(jī)的請求更新幀時(shí),執(zhí)行IAP_Proc()函數(shù),實(shí)現(xiàn)應(yīng)用程序的更新下載。
用戶APP工程:
(1)需要在Target選項(xiàng)卡里設(shè)置用戶應(yīng)用APP程序的起始地址與大小,如:
圖7 設(shè)置IAP程序的起始地址與大小
這里的APP應(yīng)用程序起始地址設(shè)為0x1400,由于UM8004的flash大小為16K,用戶APP應(yīng)用程序最大尺寸大小 = 16KB – IAP程序大小=0x2C00。
(2)用戶APP程序中需要添加用于檢查更新的函數(shù)。
本例程使用UART0的回調(diào)函數(shù)調(diào)用IAP處理函數(shù)去更新升級應(yīng)用程序(UART0的波特率需和IAP程序的一致)。調(diào)用IAP處理函數(shù)的方法如下,根據(jù)5的配置來設(shè)置的IAP入口地址值(IAP函數(shù)的地址為0x0200)在用戶APP程序的檢查更新函數(shù)中,定義一個函數(shù)指針,指向該地址,當(dāng)UART收到請求更新信息時(shí)用于跳轉(zhuǎn),設(shè)置如圖8所示。
圖8 app程序中設(shè)置IAP處理函數(shù)跳轉(zhuǎn)
如需詳細(xì)代碼和程序移植可參考軟件開發(fā)包的工程以及說明文檔。
【IAP實(shí)驗(yàn)】
IAP實(shí)驗(yàn)說明
本次實(shí)驗(yàn)使用UM8004進(jìn)行演示,通過IAP 將原本Lptimer功能的用戶應(yīng)用程序更新為ADC功能的用戶應(yīng)用程序。
IAP實(shí)驗(yàn)步驟
(1) 將IAP程序和用戶應(yīng)用程序進(jìn)行打包
首先打開J-Flash工具。點(diǎn)擊open data file,打開用戶app程序的bin或者h(yuǎn)ex文件。這里選擇軟件開發(fā)包里UM800Y_APP文件夾中的Lptimer工程中的bin文件。(可通過hex2bin工具將hex轉(zhuǎn)換成bin文件)
圖 9 J-Flash工具
打開成功后點(diǎn)擊軟件左上角File,點(diǎn)擊Merge data file…
圖 10 J-Flash工具
然后選擇IAP工程的bin或者h(yuǎn)ex文件。
打開成功后,選擇是,將兩個文件合并打包。
圖 11 J-Flash工具合并文件
打包成功后。點(diǎn)擊軟件左上角File,選擇Save data file as..將打包好的程序進(jìn)行保存,保存的格式為bin或者h(yuǎn)ex。
圖 12 J-Flash工具保存合并文件
圖 13 J-Flash工具保存合并文件
(2)使用UNIC_BootTool_V2.0下載合并后的文件
使用UNIC_BootTool_V2.0工具下載程序流程如下:
①芯片類型選擇UM800Y,選擇115200波特率
②點(diǎn)擊Browse選擇剛剛打包好的程序
③打開文件后點(diǎn)擊Open,復(fù)位芯片,芯片進(jìn)入到Boot模式。
④點(diǎn)擊Auto Download,將程序下載到UM8004。
圖 14 Bootloader的用戶下載工具
由于本例子將IAP程序和LPTIMER程序打包合并后下載,在程序下載成功后,打開串口助手會看到LPTIMER計(jì)數(shù)功能。
圖 15 lptimer定時(shí)計(jì)數(shù)
(3)使用UNIC_IAPTool_V1.3更新程序
通過使用UNIC_IAPTool_V1.3上位機(jī),可以讓IAP程序引導(dǎo)更新用戶應(yīng)用程序。
圖 16 IAPTool上位機(jī)說明
使用UNIC_IAPTool_V1.3上位機(jī)更新具體操作流程如下
①打開上位機(jī)選擇串口號以及波特率,選擇芯片型號為UM8004。
②打開需要更新的用戶應(yīng)用程序的bin或者h(yuǎn)ex文件。打開后會顯示該文件的CRC值。
③點(diǎn)擊OPEN
④點(diǎn)擊一鍵下載
⑤點(diǎn)擊一鍵下載后,等待更新過程,更新成功后會提示“下載完成”,否則會提示下載失敗。
圖 17 IAPTool上位機(jī)更新成功
⑥之后會運(yùn)行用戶的程序。(可以通過串口工具打印信息看到,通過IAP升級更新已將原來打包時(shí)的Lptimer應(yīng)用程序更換為ADC功能應(yīng)用程序。)
圖 18 IAP更新用戶程序?yàn)锳DC功能程序
最終通過IAP已更新升級了用戶的應(yīng)用程序。
【總結(jié)】
感謝大家參與學(xué)習(xí)廣芯微MCU進(jìn)階篇1:8位MCU IAP實(shí)現(xiàn),讓我們期待后續(xù)的文章更新。
需要申請廣芯微產(chǎn)品評估板,可在留言板留言。
關(guān)于廣芯微
廣芯微電子(廣州)股份有限公司專注于低功耗物聯(lián)網(wǎng)芯片的研發(fā)、設(shè)計(jì)與銷售,為客戶提供面向個人與家庭、工業(yè)與商業(yè)物聯(lián)網(wǎng)應(yīng)用領(lǐng)域,以低功耗為差異化的8位/32位微控制器芯片、無線射頻收發(fā)器芯片、數(shù)字電源管理芯片和傳感與信號調(diào)理專用芯片等。
廣芯微秉持客戶第一、技術(shù)創(chuàng)新和市場領(lǐng)先的理念,以國際領(lǐng)先的技術(shù)為基礎(chǔ),為客戶提供一流的產(chǎn)品與技術(shù),打造值得信賴的集成電路設(shè)計(jì)品牌企業(yè)。公司獨(dú)有的低功耗芯片設(shè)計(jì)方法、輕量化人工智能算法、大功率的PD協(xié)議控制以及多樣性無線連接技術(shù)整合而成的低成本高收益的集成電路設(shè)計(jì),在健康醫(yī)療電子、消費(fèi)電子、智慧家庭、工業(yè)控制、傳感器與表計(jì)等領(lǐng)域已經(jīng)得到了廣泛的應(yīng)用。廣芯微低功耗微處理器芯片與射頻芯片具有超低睡眠功耗與更低的工作電流,有效地幫助電子設(shè)備降低能耗,積極助力節(jié)能減排。
要獲取更多產(chǎn)品信息及相關(guān)的解決方案信息,請掃描下方二維碼關(guān)注 ”廣芯微電子“ 公眾號。
聯(lián)系方式:sales@unicmicro.com
免責(zé)及版權(quán)聲明:凡本微信號注明“原創(chuàng)”的所有文字、圖片和音視頻作品,版權(quán)均屬于廣芯微電子(廣州)股份有限公司所有,文章內(nèi)容系作者個人觀點(diǎn),任何媒體、網(wǎng)站或個人未經(jīng)本網(wǎng)協(xié)議授權(quán)不得轉(zhuǎn)載、鏈接、轉(zhuǎn)貼或以其他方式復(fù)制發(fā)表。已經(jīng)本公司授權(quán)的微信號、網(wǎng)站等,在使用時(shí)必須注明“來源:廣芯微電子(廣州)股份有限公司”,否則本公司將依法追究責(zé)任。除原創(chuàng)作品之外,本平臺所使用的文章、圖片、素材、視頻及音樂屬于原版權(quán)人所有,因客觀原因,或會存在不當(dāng)使用的情況,非惡意侵犯原版權(quán)相關(guān)利益,敬請相關(guān)權(quán)利人諒解,若版權(quán)所有者認(rèn)為本文涉嫌侵權(quán)或其他問題,請及時(shí)與我們聯(lián)系,共同維護(hù)良好的網(wǎng)絡(luò)創(chuàng)作環(huán)境。聯(lián)系電話【020-31600229-李小姐】。