张 华
(武汉理工大学信息工程学院,湖北武汉 430070)
Texas Instruments(TI)公司生产的 C54x系列Digital Signal Processor(DSP)以其低价且高效的特点得到了广泛应用。传统的DSP程序开发流程是:使用仿真器对DSP目标板进行一对一程序调试,调试通过之后使用仿真器将自举表下载到DSP外挂存储器,使DSP脱机运行。在DSP多处理器协同工作的场合,如果使每块DSP目标板分别通过一个仿真器连接电脑进行调试,就要添置与DSP目标板相同数目的电脑与仿真器,增加了开发成本。因此,低成本的DSP多目标板程序下载方案具有现实意义。
多目标板程序下载方案利用了计算机资源丰富的USB口,在基于USB接口的单目标板程序下载方案基础上实现。DSP多目标板程序下载方案如图1所示。
图1 DSP多目标板程序下载方案框图
在图1中,将需要同时调试的多块DSP目标板通过DSP程序下载器连接起来,计算机再通过USB线连接各DSP程序下载器。加电初始化后,通过操作上位机的“下载软件”,先给”DSP目标板1”下载;等其下载完毕,再给“DSP目标板2”下载;依次类推。所有DSP目标板程序下载完毕后,如果要单独调试某一DSP目标板,再对其下载新的程序即可。
DSP程序下载器利用了C54x系列DSP具有的HPI Bootloaer功能接口进行设计[1],具有连接计算机与DSP目标板的功能,如图2所示。
图2 DSP程序下载器框图
为简化通信协议,让DSP程序下载器中的单片机只实现数据转换功能,而计算机完成DSP自举表加载功能。为方便DSP目标板的调试,本方案让“下载软件”一步到位完成如下功能:目标板复位、.out文件转化成.hex目标格式文件、将.hex目标格式文件转换成DSP自举表、通过下载器对DSP目标板进行自举表加载。使用者只需在DSP编译平台Code Composer Studio(CCS)中编译DSP源程序,并操作“下载软件”即可,如图3所示。
图3 DSP单目标板程序下载流程
如图2所示,DSP的HPI接口有数据端和控制端两种,而UART通信一般是8位的。所以要约定计算机与程序下载器中单片机的UART通信协议,以区分传输中的UART信号是控制命令还是数据。简单通信协议为:“下载软件”与单片机初始化后,计算机传输的UART信号,每3 Byte为一组;每一组第1 Byte代表控制命令,第2 Byte代表 HPI第1 Byte,第3 Byte代表HPI第2 Byte;单片机接收完3 Byte后,即对DSP进行一次HPI读写操作。
为防止计算机UART信号发送过快,而单片机接收不过来导致丢包现象,需要建立一种简单的UART软件握手协议[2]。计算机或单片机在发送完一帧UART数据后,都要在收到对方的UART信号后才发下一帧UART数据。对单片机来说,计算机发来的UART信号既是有效信号,也是确认信号;而对于计算机来说,只有计算机在进行“HPI读取”操作时,单片机发来的UART信号才包含了有用信息,其他情况都仅当做确认信号。
计算机与程序下载器中单片机的UART通信协议如图4所示。
图4中“HPIC”代表计算机发给单片机的“HPI控制信号”数据;“HPID1”与“HPID2”分别代表计算机发给单片机的“HPI第一字节”数据与“HPI第二字节”数据;而“ACK”代表单片机发给计算机的“确认”数据。
图4 计算机与单片机的UART通信协议
CCS提供了一个名为“hex500”的软件,配合一定的计算机CMD命令,就可以将.out文件转化成.hex目标格式文件[3]。
关于.hex目标格式的确定,依据如下:
(1)hex500需要确切的输入文件名才能正常运行,为了兼顾命名多样化的.out文件与“下载软件”人机界面简洁的操作,“下载软件”在找到所需的.out文件后,统一复制成“asm.out”文件,同时让hex500只对“asm.out”文件进行操作。
(2)单片机大多是8位,为兼容C5402等8位HPI接口的DSP,自举表采用8位数据长度。
(3)目前单片机对DSP进行HPI BootLoader的成熟方案[4]皆生成 Intel MCS -86 目标格式文件[5],为便于程序的快速移植,采用Intel MCS-86目标格式。
(4)为精简“下载软件”的人机交互界面,自举表起始地址统一设为0x80,这一点在配置DSP工程的cmd文件中需要注意。
确定了目标格式之后,在“下载软件”源程序中,采用如下代码完成.out文件向.hex目标格式文件的转化:system("hex500 asm.out-i-o asm.hex-e 0x80-romwidth 16")。
Intel MCS-86目标格式[6]如图5所示。
对比图5,进行如下方式组织DSP自举表:
(1)按字节读取.hex目标格式文件,然后进行判断,如果是代表十六进制数字的字符,则装载进字符缓存,其他的不装载。
(2)将字符缓存中的ASCII码转化成8位BCD码,然后将8位BCD码两两组合成整型数据,放进数据缓存。
(3)读取数据缓存中第一字并判断,如果为0则退出,否则作为数据长度;接下来的第二个字是自举表写入DSP的首地址;再接下来就是要写入DSP相应地址的数据,省略了地址信息,默认是在首地址基础上依次加1。
(4)最后将 0x0080写入 DSP的 0x007f单元,DSP处理器收到此信号即开始脱机运行。
图5 Intel MCS-86目标格式
运行名为“UART DSP ISP”的“下载软件”,在“Comm Num”编辑框中输入相应的串口号,再点击“Comm Connect”按钮以连接计算机与DSP目标板,如图6所示。单击“Select”按键,出现“打开”对话框,操作者只要选择经过CCS编译生成的.out文件即可,如图7所示。
点击“Load”下载程序到DSP目标板。此DSP程序下载器会在下载程序前给DSP目标板一个复位信号,因此不需要再手动复位DSP处理器。
若要观察DSP处理器RAM中的数据,可在操作界面“Start Address”文字下面的编辑框内输入十六进制的起始地址,“End Address”文字下面的编辑框内输入十六进制的终止地址,再点击“HPI Read”按键即可,相应的数据将会在“Receive”列表框内显示。若要清除“Receive”列表框内的数据,只要单击“Clear Edit Box”即可,如图8所示。
在“Start Address”文字下面的编辑框内输入十六进制的起始地址,在“Send”编辑框中输入十六进制的数据,点击“HPI write”按键,即可将“Send”编辑框中的数据写进DSP,起始地址为“Start Address”文字下面编辑框中的数据,如图9所示。
DSP多目标板程序下载方案已应用于某数码钢琴集体课组网的项目,节省了仿真器与电脑的使用,将开发成本降低了一半多。此方案也可以用于DSP单目标板程序下载,或者移植到采用单片机Bootloader方案的DSP板中去,为DSP初学者降低学习投资。
[1] 刘晓杰,顾海军,赵晓晖.基于 DSP主机接口的程序自举设计与实现[J].吉林大学学报:信息科学版,2007(1):6-11.
[2] 赵忠彪,张元敏,高荣.握手式通信协议在远程抄表系统中的应用[J].继电器,2008(4):76-78.
[3] 陶锐,周学军.数字信号处理器(DSP)自举加载技术的应用[J].电子测量技术,2006(6):67-69.
[4] 曾浩,刘玲,曹海林.54xDSP的HPI自举新方法[J].实验室研究与探索,2007(1):68-70.
[5] 邹翼,曾文海,陈续喜.基于TMS320VC5402 DSP的HPI方式自举的设计与实现[J].计算机系统应用,2009,18(3):152-155.
[6] 刘益成.TMS320C54x DSP应用程序设计与开发[M].北京:北京航空航天大学出版社,2002.