基于LPC2000系列ARM的工业仪表IAP升级实现

2018-03-06 12:59张伟陈月红
科技资讯 2018年23期
关键词:嵌入式

张伟 陈月红

摘 要:随着计算机网络技术以及微电子技术的发展,嵌入式系统在各行各业的应用越来越广泛,传统的嵌入式系统的不足逐渐暴露无遗,ARM嵌入式系统逐渐成为很多行业的最佳选择,工业仪表亦是如此。根据工业现场仪表嵌入式系统软件升级困难的现状,本文叙述了IAP(In-Application Programming)升级技术原理和ARM在线编程的方案,该方案摒弃传统的使用ISP接口和仿真器进行程序更新的方式,实现了固件的灵活存储与升级。

关键词:ARM 嵌入式 IAP 工业仪表

中图分类号:TP311 文献标识码:A 文章编号:1672-3791(2018)08(b)-0107-02

LPC2000系列ARM处理器是目前最为流行的微处理器之一,是一种高性能、低功耗、低成本的RISC微处理器。LPC2000系列微控制器是基于支持仿真的ARM7TDMI-S CPC内核,支持ARM和Thumb指令集。它采用ARM7架构的微控制单元。ARM具有大量的片内存储器和丰富的片内外设,具有连接片内外设功能的VISI外设总线、与中断控制器接口的AMBA高性能总线和与片内存储器控制器接口的ARM7局部总线。

传统的LPC2000处理器更新的方式是采用仿真器和ISP下载。ISP,即In-System Programming,在线编程。具有ISP功能的单片机芯片,通过简单的下载线,可以直接在电路板上给芯片写入或者擦除程序,且支持在线调试。仿真器下载在工业应用现场程序更新时,操作复杂、成本高。虽然ISP下载成本较低,但其更新程序的来源和操作都受到硬件的限制。

1 IAP介绍

IAP详细描述为In Application Programming,是指在应用编程中,单片机程序自身可以往程序存储器里写数据或修改程序,IAP是在Flash程序存储器中的一种编程模式,是程序正在应用过程中的编程。在产品运行时,对Flash的部分区域存储进行擦除、读写操作等,使其数据改变,这为数据存储和固件的现场升级带来了更大的灵活性。

IAP技术的实现,首先需要在产品上预留一个通信口,在产品应用过程中,如果boot程序检测到上位机有新的下载需求,就可以通过这个通信口将数据下载到存储区中运行,从而实现固件程序的更新升级[2]。

以Boot Loader的功能与设计过程为例,从系统操作角度来看,Boot Loader是先于操作系统内核运行的一段程序。其主要作用在于硬件设备的初始化,即通过监理内存空间的映射图,来使系统的软硬件环境达到操作内核调用的状态[3]。

#define iap_entry(in, out) ((void (*)())(0x7ffffff1))(in, out),in是输入参数,out是输出参数,调用iap_entry函数就可以实现存储器扇区选择、擦除、查空、拷贝和校验等。

2 功能设计

将IAP代码放于LPC2000系列ARM存储器的扇区0和扇区1中,即地址0x00000000~0x00001FFF的8KB空间,作为系统启动的BootLoader(启动引导)程序,从存储器地址0x00002000开始存放应用程序代码。IAP的灵活性在于,更新程序时不需要像ISP那样进行跳线操作,也不需要专用软件,数据来源也没有限制,可以来至串口、U盘、以太网口等。本设计选择的数据来源为串口。图2为IAP升级的过程。

BootLoader启动代码的分析与移植是嵌入式产品研发中最重要的环节之一。近年来,嵌入式技术已取得了飞速的发展,但对于其最本质的核心部分Boot Loader的分析却不是很多。实践证明,BootLoader的优越与否,对嵌入式系统的性能起到决定性的作用[4]。

每次上电或重新启动后,ARM都会首先运行BootLoader程序,等待PC端软件的更新程序命令或运行原来存储器中的程序,当在3s钟内接收到0xAA 0x55数据帧时,BootLoader程序进入等待更新程序模式,否则检测存储器应用程序区是否有应用程序,若有则运行应用程序。当BootLoader程序进入更新程序模式时,首先读取芯片的ID,然后根据芯片ID来确定芯片的程序存储器的扇区结构,同时PC端下载软件开始发送16进制格式的程序文件的数据帧,程序文件的数据帧格式为以0x79做帧头,16进制文件的每行数据作为帧的数据部分。

图3是PC端下载软件的界面,在下载时先正确设置串口,选择起始扇区为2,其他设置默认,选择需要下载的HEX格式文件,然后下载即可。下载有两种模式:手动和自动模式,下载过程中,软件状态栏会显示当前操作状态。

需要注意的是,为了让用户代码运行地址从0x00002000开始,在开发应用程序时,将ADS的ARM Linker选项卡中RO Base设为0x00002000,在相应的分散加载文件中修改程序加载地址为0x00002000。因为处理器要切换到Thumb指令执行IAP代码,需要将ARM C Compiler下的ARM/Thumb Interwoking选项勾上。另外IAP函数使用了RAM空间的高32字节空间,因此应用程序不应该使用该空间,应用程序堆栈不能超过RAM顶端-32,在启动代码中设置如下:

;Build the SYS stack

;设置系统模式堆栈

MSR CPSR_c, #0xdf

LDR SP, =StackUsr-32 ; iap减32

MOV PC, R0

3 结语

随着ARM嵌入式技术在仪表中的应用,人们不仅对系统的性能和可靠性有很高的要求,产品是否能升级也成为重要的指标。本设计开发了LPC2000系列ARM的BootLoader程序和PC端下载软件,在仪表程序的现场更新中得到了很好的应用。

参考文献

[1] 姚梦涛,杭佳,赵汉清,等.基于ARM的嵌入式软硬件系统设计与实现[J].电子技術与软件工程,2017(15):202.

[2] 易前旭.基于无线IAP的工业嵌入式系统升级技术应用探讨[J].科技致富向导,2014(24):185.

[3] 孙李斌,赵明明.嵌入式系统软件设计中ARM和Linux的核心技术分析[J].电子世界,2017(12):40.

猜你喜欢
嵌入式
嵌入式LINUX操作系统的研究
嵌入式的特点及发展机遇
嵌入式组件技术的研究及应用
基于嵌入式系统的游戏程序设计
“嵌入式系统概论”课程设计
AItera推出Nios II系列软核处理器