ATMEGA128单片机的软件远程升级
摘要:介绍了ATMEGA128单片机应用中的在线编程方法。给出了软件IAP升级设计中应注意的一些关键技术,结合某市地铁调度系统对IAP升级的可靠性和保密性等问题进行了简单的论述。
关键词:IAP Flash bootloader 存储器 远程升级 在线升级
闪速程序存储器的编程方法常见的有以下几种:
(1)传统的并行编程方法;
(2)通过串行口进行在线编程ISPIn System Programmability:对器件或电路甚至整个系统进行现场升级或功能重构;
(3)在运行中,应用程序控制下的应用在线编程IAPIn Application Programming;IAP模式简单地说就是在某一个section中运行程序,同时对另一个section进行擦除、读取、写入等操作。
ISP方式相对于传统方式有了极大的进步,它不需要将芯片从电路板上卸下就可对芯片进行编程,减少了开发时间,简化了产品制造流程,并大大降低了现场升级的困难。而IAP方式是对芯片的编程处于应用程序控制之下,对芯片的编程融入在通信系统当中,通过INTERNET网络来升级指定目标芯片的软件。
图1 某城市地铁调度指挥系统的网络结构
随着芯片技术的高速发展,各厂家相继推出了自己的支持ISP/IAP编程模式的芯片,如美国ATMEL公司的ATMEGA128、ATMEGA169,Silicon Storage Technology公司的SST89C54/58j等。其中美国ATMEL公司推出的ATMEGA128是基于AVR RISC的低功耗8位单片机,最高工作频率可达16MHz,具有128KB FLASH内部存储应用器、4KB EEPROM和SRAM数据存储空间,最大可达4096字节的独立加密位的可选bootloader程序代码区,以及相应的专门用来支持(IAP)操作的操作控制寄存器SPMCR。近年来该型单片机以其优良而稳定的性能广泛应用于各种电子产品中。
1 利用ATMEGA128构成的远程升级系统
1.1系统组成
图1给出了某城市地铁调度指挥系统的网络结构。该系统的网络通信采用轮询方式。
javascript:window.open(this.src);" style="cursor:pointer;"/>
该系统主要设备包括若干个基台站、主控单元、基站控制中心、语音交换单元。
各设备的主要功能为:基站台用来接收车载台的数字信令和语音信号;主控单元协调各子节点动作并监视各子节点状态;基站控制中心既是主控单元的子节点又是各基站台的主节点,辅助主控单元完成对各基站台的控制,协调各基站台动作,搜集各基站台传来的消息和监视各基站台状态;PCM交换单元在主控单元控制下完成语音交换功能。
1.2 系统软件IAP升级
在不影响整个系统正常运行情况下,为实现对系统某个节点的软件升级,可将要升级的程序代码通过写码软件转换为系统信令,以透明传输的方式传输下载到目标节点。本系统的信令格式采用表1所示的代码帧格式。其中帧传输控制字节为5字节,操作控制字节为4字节,代码数据为32字节。
表1 代码帧格式
目的地址 | 源地址 | 字节长度 | Y | 下载目标地址 | 控制字 | RAMPZ | ZH | ZL | 代码数据 |
为保证代码传输的准确性,本系统采用反馈比对的方式,以监控终端向基台站的代码传输为例,代码由监控终端传输到基台站,基台站收到代码后,再反馈回监控终端。监控终端将收到的代码与发送的代码作比较,比较结果一致时传输下一代码帧,不一致时重复传输上一代码帧。
系统根据代码帧的下载目标地址,自动寻址将代码帧通过各级网络节点下载到目标节点。写入代码的位置原则上可在系统中的任何一点进行,但考虑到实际情况,本系统中只有两个写入点显示终端和监控终端,写入代码时不影响系统的正常运行。收到软件升级消息的节点通过判断代码帧的控制字完成相应的读、写、擦除等操作,并且可根据不同的需求配置不同的控制字实现远程终端对目标节点的各种资源的监控。
例如要通过监控终端升级基站1中ATMEGA128的软件,则要在监控终端中启动写码软件,将编译完成的升级代码按照表1所示的系统帧格式打包,依照代码在程序存储区的先后次序依次发出。从图1中可看出要通过监控终端升级基站1中的软件,还要经由两个中间节点:主控单元和基站控制中心,其时序流程如图2所示。
首先,监控终端发出一代码帧到主控单元,主控单元根据代码帧中的下载目标地址判断应传送的下一节点——基站控制中心。当主控单元轮询到基站控制中心时,将收到的代码帧发送给基站控制中心。同样,基站控制中心根据代码帧中的下载目标地址,将代码帧下载并传送到要升级的基站1的处理器ATMEGA128单片机中。单片机接收到代码帧后首先将此代码帧回传给基站控制中心,然后将程序跳转,运行bootloader程序区段。此时应用程序区段处于忙状态,运行bootloader程序区段的程序,根据代码载入地址将程序代码写入应用程序存储区的正确位置,并在bootloader程序区段继续运行,等待后续到达的代码帧。而回传的代码帧同样经过两级节点返回到监控终端。监控终端收到后与发送的代码帧进行比较,准确无误后方可传送下一帧数据,否则重发。
javascript:window.open(this.src);" style="cursor:pointer;"/>