新闻中心

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

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

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

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程序实现

对于外部设备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.DX32, (long long)(TCB_temp.DY | (long long)TCB_temp.DP32));

__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.DX32, (long long)(TCB_temp.DY | (long long)TCB_temp.DP32));

__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.DX32, (long long)(TCB_temp.DY | (long long)TCB_temp.DP32));

__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.DX32, (long long)(TCB_temp.DY | (long long)TCB_temp.DP32));

__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%以上,完全满足应用需求。

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

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭