背景:最近产品需要立一个技改项目,除了一些硬性需求以外,我还是想做一个对底层DSP进行远程升级的功能。这两天大概研究了一下,觉得这个方案基本可行,但是给领导汇报的时候还是因为技改项目时间紧,怕增加这个功能影响项目进度而被领导KILL了。虽然如此,自己还是想把这个方案写下来,和博友们一起分享和讨论一下,说不定后续还是会要做的。
一,产品系统组成结构。
产品管理单元采用的是PC104+LINUX,底层数据采集采用DSP(TI的C6711不跑操作系统),底层数据采集可以有多路,根据客户需求进行配置。管理单元和DSP采集单元之间是数据通讯方式采用的是PC104的IO口模拟DSP的HPI时许实现对DSP的内存操作,从而实现对DSP采集数据的读取。
二、对DSP进行软件升级的实现原理
因DSP属于产品的底层数据采集板件,因此DSP每次的程序烧录都是使用仿真器在线烧写。这样做烧写麻烦暂且先不说,主要是如果产品已经运用到现场发现bug需要升级时就尤为麻烦了,要不就是更换设备板件,要不就是更换设备整机,无法实现对DSP程序的升级。
DSP采集板上外扩了一个32M的SDRAM和一个16Mbit(2M空间)的FLASH.我的想法是这样的:
1、DSP程序用CCS编译以后会得到一个.out的目标程序,原先是通过仿真器烧写到FLASH中。如果使用远程升级,那么.out文件并不是一个通用的执行文件,需要将其转换为bin二进制文件,TI在CCS里集成了这样的插件,可以实现转换。第一步已经验证,没有问题。
2、将已经转换好的bin文件通过FTP或者web上传等方式上传至管理单元/data目录,管理单元通过HPI可以对DSP的全部内存空间进行操作,那么就可以将bin文件原封不动地写到DSP内存单元中。DSP再把内存上的bin文件内容写到FLASH上。当然,这样做有一个前提,就是要SDRAM中有足够的一段空间来单独存放管理单元写下来的数据,还有一个要注意的是当管理单元通知DSP目前是要进行程序升级时,DSP应停止其它运行,只独立运行在升级模式下。
三、升级过程中的可靠性及安全性
这样升级程序还是有一定风险的,比如如何保证管理单元写到DSP内存单元的数据是无误的?在写FLASH时断电了怎么办?等等,如果出现这些问题,那么将会导致DSP单元无法启动了,就只能更换板件或者重新用仿真器进行烧写了。针对这些问题,我也提出了一下几点解决办法:
1、在管理单元往DSP内存写数据时进行实时动态校验,每写一个字节或者几个字节就再读回来进行校验,确保写下去的数据是正确的。这样做应该会影响读写速度。
2、在进行FLASH擦除前对原来FLASH内的数据进行备份,备份有两种方式,备份到内存上或者是将FLASH分块然后备份到FLASH其它块上,前者简单些,但是如果断电了还是会出问题,后者麻烦些,但是如果断电了,程序还在。
3、还有一个办法,就是将FLASH分成两块,第一块作为出厂程序存放用的,这个一直保持不动。第二块作为升级程序专用,如果程序升级了,那么以后DSP启动就从第二块地址启动,如果升级失败,DSP还是继续原来出厂时的程序。
以上方案并未进行全部验证,只是一个理论上的探讨,是否可行还需进一步验证,因项目为添加这个功能需求,无法继续做,在记录,以备后续沿用。
不知各位博友是否有此类实践检验,可以一起探讨探讨。
阅读(897) | 评论(0) | 转发(0) |