新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > TS201的嵌入式系统软件远程更新方法

TS201的嵌入式系统软件远程更新方法

作者:时间:2013-01-28来源:网络收藏

基于DSP的程序很多[12],但在烧写的时候均要求不能断电,否则将造成整个崩溃,只能人工通过JTAG口调试烧写才能恢复。如何有效提高维护的可靠性成为一个重要的问题。本文创新地提出基于多DSP的程序分片、数据分段的高可靠性设计,并列举了多个增强可靠性的应用。本文以某型号无线监控系统为例,具体描述该设计的实际应用。

本文引用地址:http://www.eepw.com.cn/article/148116.htm

1 系统结构

本系统处理数据多,计算量大,又有很强的实时性要求,选用ADI公司的高速处理芯片TigerSharc201s。Flash选用JS28F128,容量为256 Mb。系统设计采用两片ADSP并行的模式。系统结构如图1所示,A为主DSP,B为从DSP。主DSP经Flash采用EPROM加载方式,再通过Link口引导加载从DSP。本处理系统支持多种工作模式,监控中心通过内部协议远程管控处理系统。从DSP实现信号处理计算,把处理计算结果传递给主DSP;主DSP实现管控模块,通过外围芯片FPGA的串口协议发送给无线传输设备,通过CDMA模块用无线网络的形式,发送到监控中心。监控中心通过协议对其可实现远程管理,包括数据库文件、程序更新和状态模式转换。

图1 系统结构

2 远程更新原理及实现

2.1 设计原理

Flash内部分为256个block,可以擦写任意位置的block段,没有擦写的block数据不会丢失。根据这一特性,把两片DSP软件程序和分段的数据库的烧写位置分开。Flash空间地址分配如图2所示。

图2 Flash空间地址分配示意图

监控中心按照内部协议把数据库或程序文件分包,通过无线网络下发到以为核心的信号处理机。处理机接收完数据后,通过自身的烧写功能,把新数据自动写入Flash中。重新启动后,DSP重载实现远程分片更新程序的功能。程序的初始化设置中,每次会自动读回Flash中的数据,完成更新数据库参数的功能。

为了增加远程更新的可靠性,把两片DSP程序分开位置烧写。由于主DSP只涉及管理控制功能,所以把主DSP程序作为整个系统的“壳”,一般不作更新。用从DSP实现其主要的性能计算,它的加载通过主DSP的Link口引导。这样,大部分的在线维护和算法程序升级通过更新从DSP就能完成。在更新的过程中,主DSP程序不会受影响,增强了系统的可靠性,也不必担心突然掉电会导致系统软件的崩溃。

2.2 基于TS201的远程更新过程

本系统制定内部协议,实现远程更新的指令交互。信号处理机接收指令,按照协议决定远程更新的内容,分为软件更新或者数据库更新。若为软件更新再区分主、从DSP软件更新;若为数据库更新,根据数据库信息决定更新的位置和段数。

本系统的数据库文件为30K×4字节,分为6段。根据无线传输设备的发送能力,把数据按照每包198字节分包,每包包括报头、总包数、包号和校验位等信息,数据协议具体格式如下:

报头:SOH;

报文长度:本包数据的长度,包括报头,固定为198;

总包数:此次程序或者数据库文件分成的总包数;

包号:本包的编号;

数据:需要更新的数据;

校验位:占3个字节,包括1个字节的奇偶校验位、2个字节的CRC校验位。

发送更新文件时,系统采用握手协议。信号处理机每接收到1包数据,将发回馈信息给监控中心,监控中心接收到成功回馈信息后,再发下1包数据。否则将进入等待模式,10 s后自动重发此包数据。若连续重发3次仍然不成功,才放弃此次更新。信号处理机软件机制和监控中心一样,发送回馈后进入等待模式,10 s后自动重新发送回馈信息,最多重发3次,才放弃更新,重新回到工作状态,直到接收到新的下发指令。

信号处理机接收完全部的数据包后,还要进行包号核对,确认无误后,用协议通知监控中心即将进入烧写模式。按照Flash特定的读写指令,把RAM中的数据由Flash的第20个block起始位置开始写入。如果是数据库,按照协议解读数据段号,把烧写起始位置改为相应block的地址。烧写完成后,将烧写成功与否的信息回馈给监控中心。在不断电的情况下,系统此时仍然是按照旧的软件版本运行。系统设计了远程的硬重启,通过指令控制继电器。继电器连接电源模块,实现短暂的断电功能,从而实现DSP的重新加载,完成程序或者数据库更新。详细的远程更新流程如图3所示。

图3 远程更新流程

2.2.1 FPGA程序实现

FPGA负责片选串口信号,TS201为高速设备。为了不频繁打断TS201的进程,在FPGA中设计9个字节的FIFO。FIFO满即向TS201发送IRQ外部中断信号,通知TS201读取数据,FPGA接收1个读信号清空FIFO中的1个数据。

2.2.2 TS201中断程序实现

串口采用中断的方式接收,具体的ISR部分实现如下:

interrupt(SIGIRQ1, isr_uart2);//设置串口中断地址

interrupt(SIGTIMER1LP,TIMER1_ISR); //设置定时器中断地址

void isr_uart2() {

int i;

int buf_uart[9];

for(i=0;i9;i++){

buf_uart[i]=*UART_ADD_2;//读取数据线上的数据

buf_uart[i] =buf_uart[i] 0xff; //避免数据线串扰,只取数据线上的低8位

}

……

}

② 定时器程序设计。TS201有Timer0和Timer1两个定时器,每个定时器又分为高位和低位两个寄存器。本系统采用Timer1的低位寄存器做10 s定时。

void TIMER1_ISR( ){

int i,tempp;//关闭定时器

linux操作系统文章专题:linux操作系统详解(linux不再难懂)
红外热像仪相关文章:红外热像仪原理

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭