赵善国 邹启红 王开明
摘要:本文介绍了基于LPC1763的IAP在线升级方法,从IAP编程原理入手,通过外扩128K磁电存储器(MRAM),将在线升级分为新程序接收和程序更新执行两个阶段,着重介绍了IAP执行过程。通过各阶段的防误码设计,提高了IAP升级过程的可靠性。
关键词:IAP;LPC1763;MRAM
引言
对于嵌入式产品,在应用编程(IAP)指在不影响产品正常运行的情况下实现应用程序的更新。许多ARM芯片都提供该操作接口,相对于在系统编程(ISP)方式,具有方便灵活且不需要借助专用Boot 装载程序或工具的特点,而且在不影响嵌入式产品正常运行的情况下即可完成应用程序的动态升级。
本文以NXP公司LPC1763(ARM Cortex-M3内核)微控制器为平台,当在线升级时,首先将更新数据包暂存在外扩的128KB磁电存储器(MRAM)中,再通过IAP服务程序将更新数据包烧写至片内Flash区,实现在线升级功能。
1.IAP编程原理
Boot装载程序是ARM 芯片出厂时固化在内部的一段代码,它控制芯片复位后的初始化操作。支持IAP功能芯片的Boot装载程序中包含了IAP代码。LPC1700系列的Boot装载程序在出厂时固化在地址0x1FFF 0000到0x1FFF 1FFF的8KB范围内,这8KB称为Boot Block。IAP代码入口位于Boot Block中的0x1FFF 1FF0地址。当需要进行IAP时,Boot Block空间被重映射到芯片最低地址0x00000000处。
用户调用IAP对片内Flash操作的过程:首先是在用户代码中初始化IAP入口指针地址,然后通过调用Boot Block中的IAP代码对片内Flash进行擦除或写入操作。由于IAP 代码位于Boot 区内,所以IAP 命令不允许对Boot扇区执行写/擦除操作。
复位后中断向量被激活,跳转到Boot Block 装载程序的IAP入口。IAP 程序为Thumb代码,位于地址0x1FFF 1FF0。
2.LPC1763 IAP在线升级方案
2.1系统结构
IAP在线升级系统除LPC1763外,还包含1片MR25H10磁电存储器(MRAM)和1个RS232串口。MR25H10是Everspin公司推出的128KB串行MRAM,兼容串行EEPROM和串行Flash的讀/写时序。它与LPC1763采用SPI总线方式通信,用以存储程序更新标志和接收到的更新数据包。RS232串口用来与Zigbee无线模块通信,接收上位机远程下发的更新数据包。
2.2在线升级流程
在线升级过程大体可分为两个阶段:
第一阶段为新程序接收阶段,用户程序接收到启动更新命令帧,LPC1763通过串口依报文帧号,顺序接收更新数据包,并将该更新数据同步存储至外扩的128K MRAM区,直至接收到结束更新命令包。当全部数据帧正确接收完成后,置程序更新标志,复位系统。
第二阶段为程序更新执行阶段,系统复位后系统进入IAP服务程序入口,服务程序检测程序更新标志是否有效,若有效则从MRAM取出相应更新数据包,通过IAP命令按扇区将其写入片内Flash区。当所有更新数据包烧写完毕,清除程序更新标志,系统复位,程序指针从0x00000000地址执行更新后的程序。
2.3系统存储区分配及程序流程
为确保整个在线升级过程可靠,用户程序将接收到的更新数据包先暂存至外部128K MRAM的45.2KB空间,地址从0xE000开始。
IAP服务程序入口处于256K片内Flash区,用于当程序更新标志置位时,跳转至IAP服务程序。通过编译器将IAP服务程序配置于LPC1763 16KB AHB SRAM1区,用于调用Boot Block中的IAP代码对片内FLASH 进行擦除或写入的操作。
IAP执行过程从新程序接收完成,系统复位开始。在执行完系统硬件初始化和外扩MRAM初始化后,进入IAP服务程序入口。通过判断程序更新标志后,读取更新数据包总包数,跳转至SRAM区中的IAP服务程序,见图1中编号1箭头。
IAP服务程序初始化IAP程序函数指针IAP_Entry,调用Boot Block中的IAP程序执行片内Flash擦除和烧写,见图1中编号2箭头。IAP指令大部分是以扇区为单位,LPC1763的0~15扇区为64KB,单个扇区规格为4KB,16~21扇区为192KB,单个扇区规格为32KB。用户程序存放在0~11扇区48KB区域内,因此IAP执行对0~11扇区的擦除指令。IAP指令中将RAM内容复制到Flash指令要求Flash地址边界为256B,特规定512B为Flash单次写入字节数。SRAM1中分配512B用于暂存更新数据包,IAP服务程序一次从MRAM中读取512B数据至该RAM区,见图1中编号3箭头。IAP服务程序逐次将RAM中512B更新数据写入至Flash 0~11扇区,见图1中编号4箭头。待全部更新数据写入Flash后,清除程序更新标志,系统复位,程序指针从0x00000000地址开始执行新程序。
2.4防误码设计
由于数据传输错误将带来系统瘫痪的风险,因此设计了如下升级防误码手段:
在新程序接收阶段,发送方在发送单包的最后2位增加CRC16校验位,LPC1763接收到该包数据后对除最后2位外的数据进行CRC16校验,并与接收包中的校验位进行比对,如一致则返回正确应答,将该包含校验位存储至MRAM中,从而保证通信数据的可靠性。
在程序更新执行阶段,LPC1763将更新包从MRAM读取到SRAM过程中,同样对数据进行CRC16校验,也与MRAM中存储的校验位进行比对,确保读取数据有效。
3.结论
本文在基于LPC1763微控制器的平台上,提出了一种通过外扩MRAM方式实现IAP在线升级的解决方法,新程序接收及烧写阶段经过防误码处理,确保了升级的可靠性,避免了由于程序失效,导致的系统无崩溃的风险。该方法在不影响产品正常运行情况下,实现了稳定、可靠的在线升级方法。
参考文献
[1]深入浅出Cortex-M3——LPC1700,周立功等,2010,广州致远电子有限公司
[2]基于ARM处理器的IAP设计及应用,许文杰,丁志刚,张泉,2009,3,计算机应用与软件
(作者单位:贵州航天凯山石油仪器有限公司)