摘要:本文介绍了一种新的使用串行通信进行DSP远程在线编程方法。对设计中的主要技术:DSP与PC机的串口通信、Flash编程以及DSP自引导等进行了详细介绍。结合TI公司的TMS320VC33处理器,阐述了具体的实现方法。
关键词:DSPFPGA串口FLASH
随着微电子技术的飞速发展,通用数字信号处理器(DSP)的性价比不断提高,在数字信号处理、通信、控制等领域运用的越来越广泛。在以前的DSP系统中,大部分使用EPROM,E2PROM等存储器来存放程序码。由于这类存储器的编程条件比较苛刻,需要将芯片取下后,使用专用的编程器来编程,给系统的升级、尤其是比较复杂、不易拆装的系统升级带来了一定难度。非易失性存储器FLASH由于不需要复杂的编程环境、可以直接使用板上MCU进行编程,同时还具有容量大、速度快、功耗低的特点,已经广泛应用于DSP、嵌入式系统和其它可编程系统中,提高了DSP的在线编程能力。
DSP在线编程是指不更改目标系统硬件的情况下,实现系统功能的更新。传统实现DSP在线编程的方法是:通过JTAG(或MPSD)接口下载FLASH写入程序和代码数据到DSP片内运行,实现对FLASH的编程。它由于具有下载速度快、无需添加额外接口设备等优点,被DSP开发者广泛采用。其具体实现方法,可以参考有关文献[1]。虽然传统方法实现起来比较简单,但也存在很多的局限性:
(1) JTAG(或MPSD)接口不能满足远距离传输要求,难以实现远端系统的在线编程。
(2) 不能在高、低温等复杂环境下工作。
(3) 由于要连接仿真器进行程序下载,常常需要打开设备外壳。
(4) 接口信号太多,难以在掌上PDA等小体积设备中应用。
鉴于以上局限性,本文提出使用串口进行DSP在线编程。这种方法进行程序加载具有方便、灵活的特点。由于使用串行接口,接口信号简单;同时RS422串行传输具有距离远(能够实现异地程序下载)、抗干扰性能好、环境适应性强等特点,适合于工业控制、遥测控制、自动控制等领域的DSP系统程序重加载。
下面结合某遥测信号处理系统,详细介绍这种DSP在线编程方法,并对所涉及的串口编程、FLASH写入、DSP自引导等主要技术分别进行叙述。
图1.1 系统框图
在此系统中,数据传输使用RS422串口标准,由于PC机使用RS232串口标准,所以要通过RS422/232转换器来实现协议转换,MAX488实现差分/单端转换。FPGA为Altera公司EP20K100E,用它来实现串并数据转换和产生串口接收中断 (INT3)。TMS320VC33通过与FPGA的并行接口来实现读取、发送数据。DSP程序存储在FLASH芯片SST39VF160中,如图1.1 所示。
DSP程序经调试完成后,首次写入Flash由DSP仿真器经JTAG口实现,此后的程序更新则都通过串口在线完成,不需要仿真器的参与。当要更新程序时,主控PC机首先发程序加载指令给DSP,在DSP返回确认指令后,主控PC就与DSP建立了通信连接;接下来开始按低字节在前,高字节在后的顺序依次加载新程序到DSP。DSP在收到了一帧正确的数据后,便立即将该帧数据写入FLASH。在程序加载结束后,主控PC机发送查询指令,检查数据校验和是否正确,如不正确则重新建立连接,将所有程序数据重传。在系统重新上电后,DSP自动从FLASH加载、运行更新后的程序。
PC机与DSP串行传输波特率为19.2kbps,数据位格式约定为: 1个起始位,8个数据位,1个奇校验位,1个停止位。8位数据中,低位(D0)在前,高位(D7)在后,如图2.1所示。字(16bit)传输时低字节在前、高字节在后。
MAX488[2]芯片是Maxim公司生产的低功耗、高速、高可靠性RS422/TTL转换器。电路设计中使用MAX488实现电平转换接口,电路如图2.2示:
图2.2 MAX488输入输出
EP20K100E[3]是Altera公司开发的高性能、高密度FPGA。主要片内资源为:10万个典型门、4160个LEs、26个ESB,53248位RAM 。使用FPGA实现DSP地址分配如下:
FLASH读写地址: 0x00000-0x0100000
DSP写串口地址: 0x04000000
DSP读串口地址: 0x04000002
串口接收中断号: INT3
自启动选择信号:INT0
由于DSP不能直接与PC机进行异步串行通信,所以要进行相关的通信协议转换,在本设计中,这个转换由FPGA来实现。通过FPGA接收PC机的异步通信数据,进行串并转换后产生读数中断,启动DSP读取8位并行数据。由于DSP工作在中断方式,串口通信所占用的时间大大减少,提高了工作效率。鉴于篇幅,本文在此只对涉及的DSP、FPGA相关编程进行介绍。
DSP串行通信流程见图2.2,在CC4.1 (for C3X/4X)开发环境下,使用汇编语言编写程序如后:
图2.3 串口通信流程
DSP在收到中断(int3)后,转到读串口数据子程序,读入串口数据并判断帧号,然后DSP根据帧号定义,执行相应的操作。
以接收55H为例,说明FPGA接收串口数据的方法,时序关系如图2.4所示:
图2.4 串口接收时序
图中,Rxd为串口接收信号(停止为高电平),位速率为19.2Kbps。SClk是频率为38.4KHz的位取样脉冲,受pEN控制。pEN为宽度固定(520us)的取样使能信号,高电平有效。d0为数据最低位,d7为最高位,od为奇
校验位。INT3为中断触发信号。
当程序检测到Rxd的起始位(0电平,且 pEN为低)时,pEN信号变高,在pEN置高后的26us开始产生取样脉冲SClk,并在时钟上升沿将取样数据送入相应数据位(d0-d7,od)。并在最后一个采样脉冲的下降沿判断奇校验位是否正确,若校验正确,送出中断触发信号INT3,通知DSP取数。若不正确则不产生中断信号。
使用QuartusII软件编译生成串口接收模块,进行时序仿真,结果如图2.4:
Clk时钟为10Mhz,Reset为复位信号.DataDQ为经过串/并转换后的数据。Rxd、pEN、INT3定义与图2.3相同。由仿真可以看出,接收模块能够正确工作。
上面详细介绍了接收串口数据的FPGA实现方法,对发送模块的编程方法与接收模块基本相同,其时序如下图2.5所示:
图2.5 串口发送时序
pStrb为写触发信号;pTEN为输出使能信号;Sclk为取数时钟,上升沿有效。当DSP往串口送数时,pStrb产生一个高电平脉冲信号,在脉冲下降沿将输出数据锁存到输出缓冲器(q[7:0]),同时pTEN有效,使能SClk时钟信号,开始发送输出缓冲区数据到串口。
本设计使用的Flash是SST公司的SST39VF160-70芯片,容量为1M×16bit,存取时间为70ns。芯片内部电路根据检测到的软件命令序列,执行相应操作。具体命令序列可以参见器件数据手册。
DSP要实现Flash编程,只需向对应的地址写相应的命令序列。以字编程为例,说明具体实现方法,其他操作模式只是命令序列不同。字编程命令序列如表2.1所示,具体程序如后:
;字编程:
addr5.word 5555H ;
addr2.word 2AAAH ;
LDI@addr5,AR0
LDI@addr2,AR1
周期1地址 05555H
数据 0AAH
周期2 地址 2aaaH
数据 055H
周期3 地址 5555H
数据 0A0H
周期4 地址 Waddr
数据 Data
LDI0aah,r0
LDI055h,R1
LDI0A0h,R2
STIR0,*AR0
STIR1,*AR1
STIR2,*AR0
STI @daddr,AR2;
;daddr存写入地址
STIR3,*AR2
;r3存放写入数据
CALL delay;delay 15us延时程序
表2.1 Flash 字编程命令
;其它操作
TMS320VC33会在收到程序加载指令后立即调用FLASH擦除程序,并在收到一帧数据后循环调用FLASH字写入程序。由于DSP是将主控PC传来的数据按顺序写入FLASH,所以要实现上电自引导,就需要在主控PC机把COFF文件转换成符合自启动格式的二进制文件。
TMS320VC33片内固化有一个Bootload程序。在脱机工作状态下,若MCPL/#MP脚接高电平,DSP上电后首先运行Bootload程序,该程序根据用户设置的启动方式来加载外部存储器中程序到片内运行。
本设计中采用并行16bit引导方式加载。根据Bootload文档说明,在复位后需要设置中断Int0有效。
要正确实现自引导,还要求按规定的地址和格式填写自启动表到外部存储器。在int0方式下,起始读数
地址为1000H。利用CC4.1带有的HEX30工具,我们可以方便地根据配置文件生成各种格式的引导表。有关引导表生成的具体操作步骤可以参考文献 [1][4]。在本设计中,先将COFF文件转换成Tektronix 格式,然后用C语言编写的转换程序将Tektronix文件中的附加信息去掉,只留需要写入Flash的有用数据。
串口传输时按低字节在前、高字节在后的顺序将数据打包成帧、按帧发送。DSP在收到一帧正确的数据后,运行Flash写入程序将该帧数据写入。在全部数据写入并查询正确后,断电重启就可以自动运行新的DSP程序了。
实际应用证明,这种使用串口实现的DSP在线编程方法具有适应性强、加载方便的特点。在实际开发中可以以本系统为参考,根据实际情况灵活运用,尤其是串口通信部分还有很多方法来实现:如使用专用UART接口芯片、使用软件查询方法等;对环境要求不高的场合,可以使用更简单的RS232接口,省去 RS422/RS232转换器。
【1】 公茂忠,Flash存储器的在系统编程及其在DSP系统中应用,《电子技术应用》,
2002年3月
【2】 MAX487-MAX491 DataSheet,Maxim,2001
【3】 EP20k Programmable Logic Device
Family,Altera,2002
【4】 TMS320C3X/4X Assemble Language Tools
User’s Guide. Texus Instrument,1997