基于USB总线的ADSP-TS101S链路口加载
扫描二维码
随时随地手机看文章
摘要:在DSP系统上运行的程序,系统上电复位后需要加载程序到DSP的程序存储器内。这是使用外部加载模式时的系统开发不可缺少的环节。针对实际需求,提出了一种使用USB对ADSP_TS101S进行链路口加载的方案,并介绍了设计思想和实现过程。实际应用的试验证明,提出的加载方案有效且简单易行。
关键词:ADSP_TS101S;链路口;USB;加载
ADSP_TS101S(以下简称TS101)是美国ADI公司推出的TigerSHARC系列数字信号处理器中一款高性能的静态超标量处理器,它专为大规模信号处理任务和通信应用进行了结构上的优化,广泛应用于雷达等高速实时信号处理系统。
将程序代码加载到DSP内部程序空间时,通常采用开发器的JTAG接口将执行文件加载到DSP内存里进行调试;在硬件仿真完成后,又通过JTAG接口将生成的ldr文件烧写到与TS101相连的FLASH里固化。然而在很多情况下,使用开发器加载或固化程序很不方便,甚至无法实现,因此需要开发一种脱离开发器的TS101加载方式。基于这种需求,设计实现了基于USB总线的TS101链路口加载,只需一根USB线缆,即可实现TS1 01的程序在线重加载和固化。
1 Link Port协议
链路口(Link Port)是TS101的一种高速互联接口,它的通信是通过一个8位的数据总线和3个控制信号进行的,有4组LINK管脚。其中LxC LKIN和LxCLOUT是时钟/应答输入和输出管脚;LxDAT[7:0]-数据输入输出总线;LxDIR是LINK的方向指示信号。Link Port的最简单的连接方式(如图1所示)用了LxCLKIN,LxCLKOUT,和LxDAT。每个ADSP-TS101 DSP的LxCLKOUT与其它的LxCLKIN相连,两片TigerSHARC101 DSP芯片之间用LxDAT数据总线相连。
Link Port的最小传输单位是8个时钟周期,数据总量为4倍字长(16字节,在时钟的双沿触发)。传输被发送端初始化,只有当接收端设置LxCLKOUT(对于发送端为LxCLKIN)为高电平,发送才能被初始化为一次传输。LxCLKOUT为高电平意味着接收端为接收模式并且接收缓冲器为空。
2 TS101的软件设计流程及加载引导方式
TS101的软件设计流程如图2所示。其中,链接描述文件(.LDF)定义了整个系统的存储器配置和程序中数据及代码的具体存放位置。加载核文件(.DXE)是指加载引导核程序,其大小为32 bit,放在加载文件的起始部分,其功能是用来实现TS101的正确引导。ADI公司在其DSP集成开发环境Visual DSP++安装目录的ldr子目录下提供了标准加载核文件及相应的源程序(.ASM)和链接描述文件。一般可直接使用提供的标准加载核文件或对其相应的源程序进行简单修改,重新编译链接生成所需的加载核文件。加载文件是由引导加载器(elfloader)将可执行文件进行一定的格式变化,并在起始位置附加上加载核文件生成的。
加载程序的外部设备可以直接向链路口缓冲写入数据,只要写入速率不超过DSP的主时钟频率即可。此处的外部设备采用计算机的USB总线。鉴于FPGA在数字电路系统设计中具有可靠性高、设计灵活、易于开发等优点,本文采用FPGA进行Link Port与USB的接口设计,使USB的输出满足Link Port的协议,以实现DSP的链路口加载。
3 USB总线及其与Link Port的接口
采用FPGA实现基于USB总线的TS101的Link Port加载结构框图如图3所示。
3.1 Link Port发送模块
ADI公司网站上有推荐的实现TS101的Link Port收发协议的VHDL代码,但是比较复杂,鉴于本文只需要使用Link Port的发送功能,且无需缓冲,故根据图1所示的最小Link Port配置编写代码,实现Link Port发送功能。基于FPGA的TS101的Link Port发送模块结构框图如图4所示。
图4 中的FIFO负责对输出数据进行缓冲,当输入数据的速率高于Link Port时钟的频率时,Link Port的数据可以先存在FIFO数据中,当存入一定数量以后,再以Link Port的时钟把数据读出。当输入数据的速率低于Link Port的时钟数率的时候,Link Port的数据同样可以先存在FIFO中,当存入整数倍的4字数据量后,再以Link Port的时钟的数率发送出去。
图4中的控制模块是Link Port发送模块的关键模块,主要负责产生读FIFO的读使能信号和Link Port的发送时钟根据Link Port发送的时序特点,使用状态机来实现数据流的控制。当Link Port没有工作时,保持等待状态。需要传输数据时,首先检查LxCLKIN是否为高电平,若是,则说明接收端为接收模式并且接收缓冲器为空,可以初始化一次发送,否则要等待。开始传输数据时,数据首先被写入FIFO中,当判断
到FIFO的输出信号EMPTY为高时,将处于默认高电平的LxCLKOUT信号拉低,在经过6个时钟周期的低电平后(在此期间检测LxCLKIN是否一直为高电平),LxCLKOUT拉高形成第一个LINK时钟上升沿,这个时候应该在数据线上产生FIFO内的第一个输出数据。LxCLKOUT下一周期拉低,第2个数据输出,这样经过16个时钟周期以后表示一次4字传输完毕。然后检测FIFO中剩余的数据FIFO_RDATA_COUNT,若大于4则继续上面的传输操作,否则,说明FIFO中只剩最后一个4字,这次传输LxCLKOUT的最后一个时钟上升沿产生以后,不再变低,一直保持高电平。然后,把本模块中的所有临时寄存器和FIFO复位。在产生完足够长度脉冲长度的清零信号后状态机重新进入等待状态。
3.2 USB接口模块
USB接口模块采用FPGA控制USB协议解析芯片来实现。其实现框图如图5所示。
本方案中,USB2.0协议解析芯片选用CYPRESS公司的CY7C68013A,它将一个USB外设所需的所有功能集成在一块芯片上。芯片提供了3种传输数据的方式,文中选择从FIFO(SlaveFIFO)模式。在SlaveFIFO模式下,8051微控制器不在数据的传输通路上,只负责设备的初始化和相应主机的控制传输请求,高速大批量的数据传输通过外部的主控者通过SlaveFIFO接口直接将数据填充到FX2LP的端点中(或者从里面读出),然后由硬件控制将数据传输给主机。
Slave FIFO的读写方式有两种:同步读写以IFCLK为时钟,IFCLK可以外部输入,也可以使用内部的30 MHz或者48 MHz时钟;异步读写时IFCLK信号无效,只需要提供读写信号即可进行数据读写。本文选择同步读写。
FPGA采用Xilinx公司的XC3S1000。FPGA在其内部建立2个双口RAM,来缓存收发数据;并与协议解析芯片的各控制信号相连,实现对其的读写控制。文中仅使用这个芯片的接收逻辑实现加载文件的USB总线传输,发送逻辑只用来做辅助调试和状态监测。
3.3 LINK口发送模块与USB接口模块之间的接口
USB接口除用于加载TS101外,还可用于TS101正常工作时与PC机的数据传输,故对于不同意义的下行信息,需要根据其功能做不同处理。
上位机向FX2LP发送数据时,是通过将需要发送的数据打包(每包的大小由固件程序决定),每隔固定一段时间向下发送一包实现的。在这里,每包数据包含512个字节,其中前8个字节用来当帧头,后504个为需要下传的数据。可通过帧头的不同来区分下行信息的不同意义。其具体含义如表1所示。
FPGA轮询每包数据的帧头,如果是TS101与PC机交互数据,则送到双口RAM中;如果是TS101加载数据,则送到LINK口发送模块中;如果是/BMS拉高(低)指令,则通过相应的管脚拉高(低)/BMS;如果是复位TS101指令,则通知复位逻辑对TS101进行复位,同时复位数据缓冲FIF O。
在实现基于USB总线的TS101的LINK加载时,上位机将DSP加载文件(.ldr文件)打包后,通过USB线缆向FX2LP发送。.ldr文件的大小不一定为504字节的整倍数,因此最后一包数最后可能有很多0。必须把这些0去掉,否则可能在加载TS101时导致其死机。为解决该问题,在帧头定义中,用帧头2来区分是否为最后一包数,如果不是最后一包数,上位机打包时,帧头2赋为01F8(即504),如果是最后一包数,则把将有效数据长度赋给帧头2。FPGA不断将TS101加载数据送到LINK口发送模块中,当发现是最后一包数据时,读取有效数据的长度,并启动一个计数器,当计到该长度时,让FIFO读使能失效,则只有ldr文件的有效数据被加载到TS101中。
4 TS101程序在线重加载和固化的实现
首先通过上位机发送/BMS拉高指令,让FPGA将TS101的/BMS管脚拉高,然后发送复位TS101指令,复位TS101和FIFO;之后,发送/BMS拉低指令,让FPGA将TS101的/BMS管脚拉低,最后,将ldr文件打包为TS101加载数据包并向下发送。发送完毕后,TS101即可运行该程序。
若要实现TS101程序的固化,则可将要烧写的程序生成为ASCII格式的ldr文件,转化为.dat格式,通过include指令编译到EPROM(FLASH)的烧写程序中,生成为Link加载ldr文件,通过USB总线进行加载。烧写完成后,可通过闪灯或通过USB总线上传状态信息来指示烧写结果。
5 结束语
文中提出的基于USB的TS101链路口加载方法成功应用于某雷达信号处理平台的程序加载,其功能验证是通过使用本方法加载各种DSP应用程序并进行功能测试来完成的。使用该方案能稳定可靠的实现TS101程序的重加载,并且能对与之相连的FLASH芯片AT29LV040A进行成功烧写。