当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]TS201的嵌入式系统软件远程更新方法

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

1 系统结构

本系统处理数据多,计算量大,又有很强的实时性要求,选用ADI公司的高速处理芯片TigerSharc201s。Flash选用JS28F128,容量为256 Mb。系统设计采用两片ADSP并行的模式。系统结构如图1所示,TS201A为主DSP,TS201B为从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空间地址分配示意图

监控中心按照内部协议把数据库或程序文件分包,通过无线网络下发到以TS201为核心的信号处理机。处理机接收完数据后,通过自身的烧写功能,把新数据自动写入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;i<9;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;//关闭定时器[!--empirenews.page--]

tempp=__builtin_sysreg_read(__INTCTL);

tempp=tempp & (0xFFFFFFFF ^INTCTL_TMR1RN);

__builtin_sysreg_write(__INTCTL, tempp);

NumberTimer++;

if(NumberTimer==3) { //如果已经重发3次

Variable_Init( );//初始化变量

}

else{

SendCopyData( ); //重发之前的信息

__builtin_sysreg_write(__TMRIN1H, 0x0); //高位的初始化是必需的

__builtin_sysreg_write(__TMRIN1L, CK10); //配置Timer1低位寄存器,并定时10 s重新开启定时器

tempp=__builtin_sysreg_read(__INTCTL);

tempp=tempp | INTCTL_TMR1RN;

__builtin_sysreg_write(__INTCTL, tempp);

}

}

其中,定时器的计数周期是CCLK/2,所以,CK10=CCLK/2×10;

2.2.3 Flash程序实现

TS201对于外部设备Flash的读写操作只能通过DMA进行,本系统设计采用DMA0。其核心代码如下:

void dma0_ISR( ){

return;

}

void WriteFlash( int Offset, int nValue ){//向Flash的Offset位置写数nValue

int temp=nValue;

TCB_temp.DI=&temp;

TCB_temp.DX=0x00010001;

TCB_temp.DY=0;

TCB_temp.DP=0x43000000;

q=__builtin_compose_128((long long)TCB_temp.DI | (long long)TCB_temp.DX﹤﹤32, (long long)(TCB_temp.DY | (long long)TCB_temp.DP﹤﹤32));

__builtin_sysreg_write4(__DCS0, q);

TCB_temp.DI=(int*)(Offset);

TCB_temp.DX=0x00010001;

TCB_temp.DY=0;

TCB_temp.DP=0xc3000000;

q=__builtin_compose_128((long long)TCB_temp.DI | (long long)TCB_temp.DX﹤﹤32, (long long)(TCB_temp.DY | (long long)TCB_temp.DP﹤﹤32));

__builtin_sysreg_write4(__DCD0, q);

asm("nop;;");

asm("nop;;");

}

int ReadFlash( int Offset){ //从Flash的Offset位置读取数据temp并返回

int temp;

TCB_temp.DI=(int*)(Offset);

TCB_temp.DX=0x00010001;

TCB_temp.DY=0;

TCB_temp.DP=0xc3000000;

q=__builtin_compose_128((long long)TCB_temp.DI | (long long)TCB_temp.DX﹤﹤32, (long long)(TCB_temp.DY | (long long)TCB_temp.DP﹤﹤32));

__builtin_sysreg_write4(__DCS0, q);

TCB_temp.DI=&temp;

TCB_temp.DX=0x00010001;

TCB_temp.DY=0;

TCB_temp.DP=0x43000000;

q=__builtin_compose_128((long long)TCB_temp.DI | (long long)TCB_temp.DX﹤﹤32, (long long)(TCB_temp.DY | (long long)TCB_temp.DP﹤﹤32));

__builtin_sysreg_write4(__DCD0, q);

asm("nop;;");

asm("nop;;");

return temp;

}

2.3 可靠性设计

主DSP是采用Eprom加载,必须从Flash的0x00地址开始;从DSP的程序位置放在Flash的第20个block段;数据库信息位置放在第50个block段。为了增加远程更新的可靠性,采用了以下方法:

① 把大量的数据分包,每1小包添加报头和校验位。信号处理机和监控中心采用握手的方式,信号处理机每接收到1小包的数据即进行校验,并回馈信息给监控中心,监控中心根据接收的信息判断是继续发送下1包还是重发本包。

② 奇偶校验和CRC校验相结合。单一的奇偶校验出错的概率还是很高的,本系统在奇偶校验的基础上,又加上了CRC校验,增强数据的可靠性。

③ 网络堵塞、断开或者串口的误码都会造成数据错误,而造成更新不成功,为了节省资源和增加更新的成功率,设计软件支持断点续传。信号处理机软件在接收数据包的过程中,如果遇到突发情况,只要在不断电的情况下,软件将自动保存所有已经接收完成的数据包,当重新接收远程更新命令时,通过协议要求中心软件发送的数据包号,实现断点续传。当然,协议中制定了监控中心可以停止远程更新,要求信号处理机重新开始新一次的远程更新。

④ 数据库分段,让更新时数据库文件大小可调整,每次只更新需要的部分,尽量节省资源。全部的数据库信息比较大,往往只需要更新其中的部分或者小部分,所以根据内容和经验,本系统把数据库分为了6段,分别把6段数据文件放在Flash的6个block中,这样远程更新就更具灵活性,远程传送的数据量也得到了控制,增强了远程更新成功的可靠性。

⑤ 从DSP用Link口加载,可以实现可靠的多次更新。即使更新过程中遇到突发情况导致更新不成功,主DSP仍然工作正常,可以再次接收更新指令,重新更新从DSP,直至更新成功。

2.4 测试和结果

本系统设计的远程更新包括两个类型:数据库和程序。更新文件大小均可改变。对于数据库文件测试,从1包到800包均进行了大量的测试。结果显示,在网络正常的情况下,基本均能更新成功;在网络繁忙的时段,500包以下的数据文件,更新成功率大于95%,500包以上的更新成功率也大于90%。测试结果显示此远程更新的设计能满足实际应用的需求。

结论

本文详细地描述了远程更新嵌入式软件和数据库的方法,提出了程序分片更新、数据库部分更新的新方法。有一点需要注意,在主片程序更新过程中,还是有不能断电的要求。所以设计时,把需要在线维护和程序升级的软件部分放在从DSP,在实际应用中主要进行从DSP的更新。这样,整个嵌入式系统的远程更新功能的可靠性得到了很大的提高。

此应用设计已经成功应用在某型号研制的设计中,在实际的测试和应用试验中,远程的数据库更新和程序更新成功率均达到90%以上,完全满足应用需求。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

台湾新竹 – 2024年4月23日 – 著名的微控制器供货商新唐科技公司,与全软件开发生命周期提供跨平台解决方案的全球软件公司Qt Group宣布深化合作,扩展新唐科技人机界面(HMI)平台支持「Qt for MCUs」...

关键字: 微控制器 嵌入式系统 MCU

随着物联网、嵌入式系统以及微控制器技术的飞速发展,微控制器已成为众多智能设备和系统不可或缺的核心组件。而微控制器的正常工作,离不开烧录器的精准操作。C8051F021烧录器,作为一款高效、稳定、易用的微控制器烧录工具,在...

关键字: c8051f021烧录器 联网 嵌入式系统

为增进大家对嵌入式系统的认识,本文将对嵌入式系统、嵌入式系统的特点予以介绍。

关键字: 嵌入式 指数 嵌入式系统

2024年4月18日,国民技术第四代可信计算芯片NS350 v32/v33系列产品正式发布并开始量产供货。NS350 v32/v33是一款高安全、高性能、超值可信密码模块2.0 (TCM 2.0)安全芯片,适用于PC、服...

关键字: PC 服务器平台 嵌入式系统

2024年,嵌入式系统将走向何方?如何才能走在趋势的前沿?从工厂到家电,从医院里昂贵的医疗设备,到随处可见的可穿戴设备,我们身边的联网设备越来越多,生活更加绿色低碳,嵌入式系统功不可没。ST于3月19日成功举办STM32...

关键字: 嵌入式系统 可穿戴设备

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

随着科技的飞速发展,单片机和嵌入式系统在现代电子设备中的应用越来越广泛。它们不仅提高了设备的智能化水平,还推动了各行各业的创新与发展。在单片机和嵌入式系统的开发中,编程语言的选择至关重要。本文将深入探讨单片机和嵌入式系统...

关键字: 单片机 嵌入式系统 电子设备

Windows Embedded Compact 7(简称WinCE)是一种专为嵌入式系统设计的操作系统,具有体积小、效率高、可定制性强的特点。在WinCE中设置自动运行软件,通常是为了满足设备在启动后自动执行特定任务的...

关键字: 嵌入式系统 软件 操作系统

【2024年3月25日,德国慕尼黑和瑞典瓦尔贝格讯】不同汽车的独特性给汽车零部件供应商和OEM厂商等带来了挑战,因为每辆车的驾驶方式、驾驶地点、驾驶者、设计、用途以及道路和交通状况都是独一无二的。为保证每辆汽车都能正常运...

关键字: AI 机器学习 嵌入式系统

GD32F303作为一款先进的微控制器,在嵌入式系统领域有着广泛的应用。本文旨在深入探究GD32F303的发布时间,并分析其背后的技术背景和市场环境。通过对相关资料的梳理和分析,本文揭示了GD32F303发布的历史背景、...

关键字: GD32F303 微控制器 嵌入式系统
关闭
关闭