≥ cuss 基于lAP和网口的 蒋俊。蓝敏 (长沙职业技术学院,长沙410081) 固件升级技术※ 摘要:介绍了基于IAP和网口升级嵌入式系统的方法,其中处理器为NXP公司的ARM Cortex—M3,开发环境为IAR Embedded Workbench for ARM,可以有效降低设备维护成本,对其他MCU和IED开发环境都有参考价值。 关键词:ARM Cortex—M3;固件升级;镜像文件;IAP技术 中图分类号:TP368.2 文献标识码:A Fi rmware Upgrade Technology of ARM Cortex—M3 Based on lAP and Ethernet Port※ Jiang Jun,Lan Min (Changsha Vocational and Technical College,Changsha 410081,China) Abstract:The paper introduces the method of update embedded system based on IAP and ethernet port.In the system,ARM Cortex—M3 which produced by NXP company is the processor,the development environment is IAR Embedded Workbench for ARM.The method can reduce the cost of equipment maintenance.It is valuable for embedded system which based on other MCU and IED. Key words:ARM Cortex-M3;firmware update;image file;IAP technology 这里会有两个疑问:为什么要拷贝RW段呢?Boot— 引 言 现有的一台嵌入式设备基于ARM Cortex M3处理 Loader程序是什么?第一个问题很简单,既然是RW (Read&Write)数据,就只能保存在RAM中,因为ROM 是无法执行“写数据”操作的。第二个问题很容易被程序 器,具有以太网通信功能。为了降低设备维护成本,需要 设计网口升级固件功能。本文描述了基于IAP和网口升 级该嵌入式系统的方法,其中处理器为NXP公司的ARM Cortex—M3,开发环境为IAR Embedded Workbench for ARM。 员忽视,它的实现有两种,一种是由芯片的Boc・t代码(固 化在ROM中)来执行拷贝,另一种是编译器自带的代码 (女日IAR就有Jar program…—start函数)。 ROM RA~[ .ROM RAM .IAP(In Application Programming,在应用编程),一般 指MCU可以通过通信 RW stack stack heap .heap .端口(UART口、网口 等)从外部接收应用程序 镜像并烧录到FLASH ..text .R0 .bss data intvec bss ..d 中实现固件升级,如图1 所示。 图1 网口升级固件 (a)加载地址视图 图2(b)运行地址视匡 软件地址空间 1 原理介绍 先温习下小知识:一个典型的嵌入式软件地址空问如 基于IAP固件升级一般会把软件设计成两部分: BOOT和应用程序。其中BOOT相当于PC机的BIOS, 图2所示,程序代码(RO段)和初始化数据(RW段)都是 存储在R0M(常见为FLASH)中,当系统上电运行时, BootLoader程序会把RW段数据从R0M中拷贝到RAM 中(.data),同时它会清零未初始化数据段(.bss)、设置栈 负责升级固件和引导应用程序,它对于用户是不可见的; 应用程序就是常见的嵌入式软件。这两个软仁:的存储地 址如图3所示。 再来看看B()OT和APP启动时序,当系统上电时,它 首先从0地址找到中断向量表,取出ResetH ndler中断 (.stack)和堆(.heap),之后系统就可以正常运行了 ]。 敬请登录网站在线投稿 2014年第12期 《平I;机 嵌入式系瓴l应冈》 11 : 只有接收到第i帧确认后才能传输第i+1帧;最后,为确 保镜像文件在传输中不受损,每帧都包含CRC校验码。 2Byte 2Byte 2Byte 2Byte 1 024Byte 4]3yte 升级固件时,PC与嵌入式设备的通信逻辑如下:当设 备发出握手帧连续10次无应答后,BOOT代码将直接引 导原APP程序启动,即无需升级固件,如图5所示。 Sector,前16个均为4 KB,后14个为32 KB。为了简化设 PC Device 图8二进制通信帧格式 计,将BOOT放置在前16个Sector中,共计64 KB;APP 镜像放置在后14个32 KB的Sector中,共448 KB。 这样安排程序依赖如下设定:镜像文件起始位置为 OxO001 0000,每次接收与写入FLASH的字节数为1 024, 当写入FLASH地址为Sector之首时需要擦除该分区,逻 辑流程如图9所示。 f开始、 图5 无需升级固件通信时序 当正常升级固件时,首先有3次握手,接下来是分片 等待接收数据帧 接收一帧且数据正确? Y 传输镜像文件,最后嵌入式设备会回应“升级成功”帧,如 图6所示。 N I回应 — N I原因 I----一 错误 写入地址位于Sector之首? Y 擦除该Sector并验证Blank 写入1KB数据到FLAsH中 N 镜像文件写入全部完成? ± ( 结 语 室) 图9分片写镜像文件流程图 图6正常升级固件通信时序 如果某分片通信时发生错误,嵌入式设备会回应“错 误原因”帧,当重传达到5次仍出错时,PC机需要提醒用 户,最好还能说明错误原因,如图7所示。 本文重点研究了基于IAP和网口的固件升级技术, 虽然基于NXP公司的ARM Cortex—M3处理器和IAR 开发环境,但技术原理对于其他架构的嵌入式系统也是适 用的。论文中涉及的技术方法在IAR V6.0和NXP LPC1768芯片上测试成功,并研制成产品,接受过严格的 现场升级考验。实践证明,论文中的方法稳定可行。 编者注:源程序见本刊网站 参考文献 [1]David E.Simon.嵌入式系统软件教程EM].陈向群,等译.北 京:机械工业出版社,2005. 图7升级固件出错通信时序 mesnet.corn.cn。麓 [2]IAR.IAR embedded workbench user guides,2010. [3]NXP.LPC176x/5X user manual,2013. 嵌入式设备回应PC的数据帧直接封装字符串,这样做 的好处是可以通过截取数据包查明通信内容;而PC机传输 [4]NXP.AN11333 interrupt handling during IAP calls‘9r LPC177x 8X and LPC407X 8X,2014. 给设备的数据帧采用二进制,主要是考虑到嵌入式系统较弱 的计算和存储能力,该二进制通信帧格式如图8所示。 FLASH一般是由Sector组成的,并且在写操作之前 需要擦除该Sector。本系统中使用的FLASH共3O个 蒋俊 从事嵌入式研发,精遘电鹈计量、测量 谐波 ̄转i ; !EC6i850鼍 宅瓣 8S0 S i iEGsl8§0_g 2 ^ — ii i 责任编辑{薛毒熬 旋稿曩期禳§l秘o7-o ̄) 敬请登录网站在线投稿 2014年第12期 《年专机 嵌入式系统应冈》 13