【概述】
本文将介绍广芯微的8位MCU的IAP实现介绍及使用说明,通过IAP实验演示如何通过IAP 更新用户程序的流程步骤等。
【 什么是IAP?】
IAP即为 In Application Programming(在应用中编程)。可以简单理解为:在程序运行的过程中进行编程(升级程序,更新固件)。IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。
IAP的通信口有许多种:UART串口、I2C、SPI......等。按理说只要能传输数据的通信口都能实现IAP的功能。本文所使用的是UART方式的IAP。
【IAP实现介绍】
本文实验以UM8004为例,flash大小为16K。UM8004的中断向量表以及IAP固件程序存放到0x0000-0x1400区域,在之后的更新中不会对以该区域空间进行擦写。用户APP应用程序存放在从0x1400-0x3FFF的空间。每次需要更新升级时,将这段空间进行擦写,替换成更新的应用程序代码。
使用IAP的上位机,通过IAP程序的处理函数,即可实现应用程序的更新升级。整个IAP的实现流程如下图所示:
图1 IAP功能流程图
【 IAP使用说明】
开发套件
IAP开发套件包含:
硬件开发板
软件开发包
软件开发包
软件开发包中包含IAP工程、用户APP应用程序例子程序、IAP使用说明、以及一些工具、上位机等等。
软件开发包中的内容如下:
UM800Y_IAP:800Y的IAP工程。
UM800Y_APP:用户应用程序示例Demo。
UM800Y_IAP使用说明.doc:IAP实现和使用的说明文档。
UNIC_IAPTool.exe: IAP上位机。
UNIC_BootTool.exe:Bootloader的用户下载工具。
Sscom5.13.1.exe:串口调试助手。
Hex2bin.exe:hex文件转换bin文件工具。
JFlash.exe :合并bin或hex文件。
硬件环境
硬件环境如图1所示:
硬件开发板和USB连接线
电脑(编译代码,下载程序代码)
图 2 硬件连接示意图
软件环境
Keil C51
工程说明
下面对本次实验的工程进行简单说明。
IAP工程:
(1) 需要在Target选项卡里设置我们IAP程序的起始地址与大小,如:
图3 设置IAP程序的起始地址与大小
这里的IAP程序起始地址设为0x0000,大小设为0x1400,即IAP所需的FLASH空间为5KB。其中IAP所占空间的大小可根据IAP的实际大小进行修改。
(2) 设置IAP_Proc函数(IAP更新处理程序)的入口地址,用绝对地址定位的方法设置在某个固定的地址,下面以设置地址为0x0200为例。点开keil C51中的Options for Target,勾选下图所示的地方。
图4 勾选Use Extended Linker(LX51) instead of BL51
之后在下图所示位置填入“?PR?IAP_PROC?IAP(C:0x0200)”, 如图5,最后点击ok。
图5 设置IAP_Proc函数的地址为0x0200
(3) IAP源码说明
图6 IAP部分代码
IAP源码主要功能是当UART收到上位机的请求更新帧时,执行IAP_Proc()函数,实现应用程序的更新下载。
用户APP工程:
(1)需要在Target选项卡里设置用户应用APP程序的起始地址与大小,如:
图7 设置IAP程序的起始地址与大小
这里的APP应用程序起始地址设为0x1400,由于UM8004的flash大小为16K,
用户APP应用程序最大尺寸大小 = 16KB – IAP程序大小=0x2C00。
(2)用户APP程序中需要添加用于检查更新的函数。
本例程使用UART0的回调函数调用IAP处理函数去更新升级应用程序(UART0的波特率需和IAP程序的一致)。调用IAP处理函数的方法如下,根据5的配置来设置的IAP入口地址值(IAP函数的地址为0x0200)在用户APP程序的检查更新函数中,定义一个函数指针,指向该地址,当UART收到请求更新信息时用于跳转,设置如图8所示。
图8 app程序中设置IAP处理函数跳转
如需详细代码和程序移植可参考软件开发包的工程以及说明文档。
【IAP实验】
IAP实验说明
本次实验使用UM8004进行演示,通过IAP 将原本Lptimer功能的用户应用程序更新为ADC功能的用户应用程序。
IAP实验步骤
(1) 将IAP程序和用户应用程序进行打包
首先打开J-Flash工具。点击open data file,打开用户app程序的bin或者hex文
件。这里选择软件开发包里UM800Y_APP文件夹中的Lptimer工程中的bin文件。(可通过hex2bin工具将hex转换成bin文件)
图 9 J-Flash工具
打开成功后点击软件左上角File,点击Merge data file…
图 10 J-Flash工具
然后选择IAP工程的bin或者hex文件。
打开成功后,选择是,将两个文件合并打包。
图 11 J-Flash工具合并文件
打包成功后。点击软件左上角File,选择Save data file as..将打包好的程序进行保存,保存的格式为bin或者hex。
图 12 J-Flash工具保存合并文件
图 13 J-Flash工具保存合并文件
(2)使用UNIC_BootTool_V2.0下载合并后的文件
使用UNIC_BootTool_V2.0工具下载程序流程如下:
①芯片类型选择UM800Y,选择115200波特率
②点击Browse选择刚刚打包好的程序
③打开文件后点击Open,复位芯片,芯片进入到Boot模式。
④点击Auto Download,将程序下载到UM8004。
图 14 Bootloader的用户下载工具
由于本例子将IAP程序和LPTIMER程序打包合并后下载,在程序下载成功后,打开串口助手会看到LPTIMER计数功能。
图 15 lptimer定时计数
(3)使用UNIC_IAPTool_V1.3更新程序
通过使用UNIC_IAPTool_V1.3上位机,可以让IAP程序引导更新用户应用程序。
图 16 IAPTool上位机说明
使用UNIC_IAPTool_V1.3上位机更新具体操作流程如下
①打开上位机选择串口号以及波特率,选择芯片型号为UM8004。
②打开需要更新的用户应用程序的bin或者hex文件。打开后会显示该文件的CRC值。
③点击OPEN
④点击一键下载
⑤点击一键下载后,等待更新过程,更新成功后会提示“下载完成”,否则会提示下载失败。
图 17 IAPTool上位机更新成功
⑥之后会运行用户的程序。(可以通过串口工具打印信息看到,通过IAP升级更新已将原来打包时的Lptimer应用程序更换为ADC功能应用程序。)
图 18 IAP更新用户程序为ADC功能程序
最终通过IAP已更新升级了用户的应用程序。
【总结】
感谢大家参与学习广芯微MCU进阶篇1:8位MCU IAP实现,让我们期待后续的文章更新。
需要申请广芯微产品评估板,可在官网留言。(www.unicmicro.com)
来源:广芯微电子
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。