基于IAP技术的ADuC702x固件升级方案
摘要:本文介绍了一种基于ADuC702x的智能仪表在应用编程升级固件程序的方案。该方案已成功应用于光通讯和其他产品中,使产品的固件程序升级变得简单方便,且实践验证具有高可靠性。
本文引用地址:http://www.amcfsurvey.com/article/119691.htm引言
目前,智能仪表等产品的设计主要以微控制器为控制核心,但是其设计往往不可能一步到位,尤其是固件程序部分,需要根据产品使用反馈不断地进行修改和完善。当程序需要根据用户需求变更时,传统情况下需要将产品拆卸下来返回原厂修改程序,或请专业的维修服务人员亲自到设备现场,将设备取下或者打开设备,通过JTAG方式连接PC等来重新烧写程序。在应用编程(In Application Programming,IAP)技术可实现对产品的在应用升级。
ADuC702x系列微处理器由ADI公司生产,集成了ARM7TDMI 16位/32位RISC(精简指令集计算机)内核,具有8kB的SRAM、62kB的Flash/EE存储器,可通过UART或JTAG端口在线编程,最高处理能力达44MIPS。当工作频率为41.78 MHz时,典型的功耗为120mW。
ADuC702x在线IAP升级方案
ADuC702x系列微处理器物理存储结构地址如图1所示,其程序通常放置在62kB的Flash/EE存储器内,该Flash/EE可通过该系列微处理器内部Flash Control Interface进行读写访问操作,通过该操作实现IAP固件程序升级功能。后续IAP方案研究和程序设计均针对该Flash/EE实施。
使用IAP对ADuC702x升级,首先需要了解ADuC702x的Flash/EE基本存储结构和对程序存放的Flash/EE进行合理分区规划。Flash/EE基本存储结构如图2所示,从图中可以看出,Flash/EE地址从0x00080000到0x0008FFFF,总大小为64kB,其Flash(闪存)的位宽为16位,因而Flash大小即为32k×16b。Flash中512B(即256×16b)为一块,为最小Flash读写操作单元。64kB Flash中有2kB(1k×16b)用于该系列微处理器出厂固化启动引导程序,即为On-Chip kernel(片上内核),该段程序空间不能为用户所使用。另外一部分62kB(31×16b)为用户可使用程序段,该段程序用于存放用户代码,在IAP方案设计中IAP操作指代对此62kB的Flash/EE操作。
通过对62kB此段用户可使用的Flash/EE做一定的分区规划和操作,实现IAP固件程序升级。对62kB此段Flash/EE规划如图3所示。从图3中可知,IAP使用将用户可使用的Flash/EE划分为了三个区:Bootloader区,User Application区以及Flag标志区。三个Flash区功能描述如下。
1. Bootloader区:用来存放用户编写的Bootloader代码,该代码类似于PC机的BIOS(基本输入输出系统),一旦固化成功,该段程序将不再更改,除非Bootloader代码出现BUG(错误),该段程序只能用ISP(在系统编程)方式通过串口通讯或者JTAG方式写入ADuC702x内部。
2. User Application(用户应用)区:该区用来存放用户应用程序代码,用户代码的固化需要有配套的PC机程序通过串口来完成,该PC机程序需要根据指定的协议和流程编写,该协议和流程将在下文中给出。
3. Flag标志区:用来存放各个标志,用户代码程序是否有效标志,是否进入Bootloader标志(该标志用来IAP更新应用程序)。Flag定义如图4所示。
程序启动流程如图5所示。
下文对Bootloader程序、User程序设计以及Flag进行详细的阐述。
BootLoader程序设计及固化
一、BootLoader程序设计
本设计在Keil for ARM集成环境下使用。首先在Keil软件下新建一个工程,并选择芯片型号为ADuC702x,且不拷贝startup文件。然后分别添加对应源文件,在Keil环境中配置BootLoader程序起始地址为0x00080000,大小0x5000;SM起始地址为0x00010040,大小为0x1FC0。
二、Bootloader程序固化
Bootloader固化有两种方式:UART0和JTAG。UART0固化程序参照ADI公司ARMWSD.exe;JTAG下载可以使用ULINK系列仿真器。
评论