1. 引言
在产品研制过程中,由于软件不断更改完善,带来了许多外场软件升级的工作,DSP平台软件升级一直采用仿真器烧录,对于此操作过程,首先必须将产品拆开,接上仿真器,加载程序,设置断点、然后再继续运行仿真器程序进行烧录,这个过程对于没有一定软件基础的人来说,操作相当复杂,容易出错。上述问题可以通过对软件升级人员进行反复培训来解决。但是整个烧片过程需要拆开机箱,这个过程给产品带来了很多难以预计的风险,比如静电的作用,二次安装是否到位。
如何简化烧片流程,提高软件升级的可靠性,并且减少软件升级操作的风险,这是一个需要研究的重要课题。本文详细介绍了ADI21160 DSP的启动过程,以及如何通过修改其启动过程,使得直接通过串口,进行软件升级,并且提供一个友好、易操作的界面。
2. DPS的启动原理及流程
DSP21160的引导方式有三种:prom引导,host引导,link port引导。DSP不能直接运行用户程序,需要一段引导码在复位后先对系统所初始化,再从外部设备调入实际的用户程序。引导码执行后会进行自我覆盖以保证存储器的充分利用,然后跳转到实际用户程序,此时用户程序和数据与EXE文件的内容完全一致。目前我们的产品研制都是采用prom方式,对于prom方式,其具体流程如下:
a) DSP21160上电,或者复位之后,II6,IM6,C6,CP6,GP6,EI6,EM6,EC6都为固定值;
b) ADSP21160进入IDLE状态,PC指针为40004H;
c) DMAC6参数寄存器初始化;
d) BMS有效;
e) DMA开始运行。
在上述过程之后,编译生成的ldr文件的前256个字的指令被加载的Ox40000的地址中,也就是160_prom.asm编译所生成的引导码段。其主要功能是将程序代码中除了引导码自身之外的所有部分装入DSP内部RAM,同时对RAM进行初始化。
编译生成的运行文件一般有大量的初始化数据,在其加电复位后的初始值为0,Vdsp++的链接器将这些数据块用地址和长度记录,从而提高在加载过程中的效率。编译后有如下数据块:
标识号 初始化类型
0 FINAL INITIAL
1 ZERO DM16
2 ZERO DM32
3 ZERO DM40
4 INIT DM16
5 INIT DM32
6 INIT DM40
7 ZERO PM16
8 ZERO PM32
9 ZERO PM40
10 ZERO PM48
11 INIT PM16
12 INIT PM32
13 INIT PM40
14 INIT PM48
当读入标号为1,2,3,7,8,9,10的时候,即执行相应的填0过程。当读入4,5,6,11,12,13,14则将后续的代码引导进入内部存储器。当读入0标识块时,此标识后的48 BIT字将被写入地址0x40050地址。同时启动DMA来覆盖引导码。在DMA结束的时候,执行存放在0x40050的RTI指令。程序跳转会0x40004,此处仅有一条对系统配置寄存器初始化的指令,接下来执行0x40005从而指向真正的用户代码。
引导码160_prom.asm文件位于211xxldr160_prom文件夹下。这个文件夹下的工程编译后将生成 160_prom.dxe,在我们工程通过仿真器加载时,160_prom.dxe不影响正常工程的运行,当生成ldr文件时,将变为ldr文件的头部引导段。
3. 软件实现
DSP专用仿真器进行烧录程序的烧录软件是将ldr文件作为一个数组进行引用,烧录软件首先进行擦片,等待擦片完成,而后写数据。
在上述原有程序烧录过程的基础上,要实现DSP的应用程序在线烧录有如下问题要解决:
a) 让产品的DSP处理器在监控程序、应用程序之间选择跳转运行;
b) 编写在线烧录上位机程序,在上位机上通过串口将ldr文件发送至产品内部监控软件;
c) 监控软件将接收到的ldr文件烧录到FLASH特定的区域中。
由上可知,在一片FLASH中,最终会存储两个程序目标代码,分别是监控程序目标代码和用户实际应用程序目标代码。其中,监控程序目标代码用专用仿真器烧录在FLASH芯片特定区域。
监控程序主要有两个主要模块构成:主程序模块,RS422数据接收中断模块。
主程序流程图如图一所示:
图一 主程序流程图
在该模块中,程序将接收到的目标文件进行烧录。程序在主循环中等待数据块接收结束,烧完一包数据之后,监控程序将会将本次烧录的块号回送,上位机软件根据此号,进行下一块数据的发送。在最后一块数据烧录完成之后,监控软件将把烧录出错的总字节数发送给上位机软件。
DSP需要根据输入的监控/应用状态判断或是加载监控软件,进行软件升级;或是直接加载正常的产品应用软件。具体实现思路如下,prom.asm文件中修改中间获取引导地址部分,将所获取的地址添加一个分支,根据当前状态确定判断是正常的地址,或是在其地址基础之上偏移2个块的长度。其具体过程如下:
a) 调整好等待寄存器,系统配置寄存器,用于可靠读取监控应用状态;
b) 读取当前监控应用状态;
c) 如果处于监控状态则将加载地址赋值为监控软件的地址,否则为正常代码段的地址;
d) 恢复等待寄存器和系统配置寄存器,以免影响后续操作;
4. DSP21160芯片应用程序在线烧录的硬件支持
为了实现DSP21160芯片应用程序在线烧录,必须在产品的电路板设计上加以更改,需要的硬件支持主要有两方面:一是增加串口,用于支持通讯以接收目标文件;二是监控/应用开关,用于判断当前的监控应用状态。监控/应用开关通常是产品通过测试电缆采集的一个离散信号(产品连接正式电缆时始终为应用状态,即一直执行应用程序)。
5. 使用说明
产品应用程序第一次在线烧录前,通过专用仿真器将监控程序烧入FLASH。在应用程序在线烧录实际操作过程中,先要运行在线烧录上位机程序即DSP软件升级工具。通过该工具经由上位机(PC机)的串口向产品发送ldr文件,在产品中的监控程序收到之后,自动完成烧片过程。
其具体过程如下:
a) 将产品的串口接至PC机串口,将产品调试电缆打至监控端;
b) 点击运行DSP21160软件升级工具,界面如下:
c) 点击 握手按钮,此时,左侧应显示握手成功;
d) 点击打开文件烧片按钮,选择需烧写的LDR文件:
e) 点击烧片按钮;
f) 进度条将显示当前的烧片进度,当烧片结束时将提示烧片结束;
g) 将产品调试电缆监控/应用开关拨至应用状态,按复位开关,应用软件开始运行。此时软件升级工作结束。
6. 结语
本方案已经在多个型号中得到运用,现在使用的ADSP21160,TS201都得到了验证。该方案对于硬件需要添加一个串口,以及一个监控应用线。由于传输使用的是RS422总线,所以传输需要一定的时间,对于烧写一个50000行左右的ldr文件大概需要3分钟。但从整体而言,由于免去了拆机箱的时间,总体可以节约时间,采用此种方案之后,将简化烧片流程,减少烧片的时间,降低了风险,可以在以后的型号中广泛使用。
参考文献
1 C++程序设计教程 中国科学技术出版社 1995
2 C语言程序设计教程 高等教育出版社 1992
3 高性能DSP与高速实时信号处理 西安电子科技大学出版社 2002
4 ADSP SHARC 系列DSP应用系统设计 电子工业出版社 2003
5 TigerSHARC DSP应用系统设计 电子工业出版社 2004