0 引言 一个典型的水下图像传输系统采用DSP(数字信号处理器)作为实时图像处理的核心单元,并用PC机建立良好的人机界面,以完成图像的采集和显示。因此,PC上位机与DSP间需进行一种高效、快速的数据传输。目前PC机和DSP常采用RS-232串口通信方式实现数据交换,其通信协议简单,但在大数据量的图像信息传输中,很难满足系统的实时性要求。此外,PC机本身串口资源也十分有限。而USB(通用串行总线)作为一种快速且有弹性的新式接口,可以满足多数情况下大数据量实时交换的要求。 本文提出一种基于USB接口的图像传输系统方案,介绍DSP和上位机间的USB接口设计,利用TI公司的DSP芯片TMS320VC5502和Cypress公司Ez-USB SX系列芯片CY7C68001,完成USB接口扩展的软硬件设计,实现DSP与上位机间的高速数据传输。
1系统整体方案系统整体结构如图1所示。 在发送端,PC机将待发送图像转换为数据比特流送到USB总线上,同时,在主机屏幕上显示原图像。图像数据经DSP和外围电路的处理后送人信道。接收机对接收信号进行处理后,通过USB总线把图像数据传回上位机并显示接收图像。其中,DSP和上位机间的USB接口设计是本文的重点。
2硬件设计USB接口扩展的硬件设计如图2所示
TMS320VC5502是一款定点16位芯片,作为TI公司TMS320C5000 DSP平台上性价比最佳的新型产品,其运算速度高达600亿次乘加运算每秒。它具有1条32 bit的程序读总线和5条16 bit的数据总线,片上集成有ROM(16 k×16 bit)、DARAM(32 k×16 bit)等存储器和丰富的外设资源,可满足大数据量的图像处理要求。此外,芯片低功耗(不到200 mW)的特点使它可以应用到水下图像传输系统中。 由于DSP的I/O口资源有限,系统采用FP-GA芯片EPF10k10A完成地址译码。它具有66个用户IO口,将DSP的部分地址线连接到FPGA的IO口并配置为输入端口,通过FPGA程序模拟译码器逻辑,可以产生Flash存储器、SDRAM、USB、UART等所有与DSP通信的模块片选信号,从而实现DSP的I/O口扩展。 USB通信协议较复杂,因此,本系统采用Cypress公司的CY7C68001芯片实现USB2.0接口,该芯片集成了USB2.0收发器和SIE(串行接口引擎),分别完成物理层和链路层的数据通信管理,USB的应用层协议由TMS320VC5502编程实现。 CY7C68001芯片支持高速(480 Mbit/s)或全速(12 Mbit/s)USB数据传输;内部有4个端点(End-point)共享4 kB的FIFO,每个端点对应的FIFO空间大小及FIFO状态可编程;芯片还具有智能SIE功能,可在不借助微处理器中断的前提下完成枚举。 CY7C68001具有16根数据总线FD[15:0],3根地址线FIFOADR[2:0]用于选通命令接口或指定的FIFO。此外,/INT信号表明CY7C68001有中断事件发生,或通知DSP对CY7C68001的读操作结束;READY信号表明CY7C68001处于可读写状态。
3软件编程3.1主机端程序 USB协议中包含控制型(contro1)、等时型(Isoch-ronous)、中断型(Interrupt)和批量型(Bulk)4种基本的数据传输类型。其中,批量传输特别适合大数据量的传输,在没有带宽和间隔时间要求时,可以保证快速准确的传输。因此,本系统采用批量传输方式进行PC机与DSP间的图像数据传输。主机端软件包括3个部分: a)CY7C68001的驱动程序,用于实现USB设备的发现、配置和关闭,实现数据传送接口与控制等功能。结合EZ-USB的GPD(通用设备驱动程序),在Windows WDM DDK环境下编译生成驱动程序的系统文件(.sys)。 b)安装USB时的信息文件(.inf),用于将驱动程序绑定到特定设备的Verdor ID(VID)和Product ID(PID)。当USB设备插入计算机时,计算机检测到设备插入后自动发出查询请求;USB设备回应该请求,并送出设备的VID/PID。计算机根据这两个ID装载相应设备驱动程序,完成枚举。 c)系统上位机(PC)处理程序,采用Microsoft Vis-ual C++软件编写,通过对界面上控件的操作产生消息,使CPU执行相应的动作。以发送端为例,主机程序流程如图3所示。
驱动程序与应用程序的接口函数定义如下:
[align=left] 对用户而言,所有应用程序均通过IO控制来访问EZ-USB GPD。以上接口函数主要调用两个Win32API函数:首先通过CreatFile()连接USB设备并获取访问设备驱动程序的句柄;再调用DeviceIoControl()提交I/O控制码(IOCTL),向驱动程序发送相应命令,并为CreatFile()返回的设备句柄设置I/O缓冲区。部分源代码如下: [/align]
3.2 DSP端程序 USB主机与设备间的数据传输是通过设备中的端点(Endpoint)进行的。这些端点通过端点号和输入输出方向来进行标识,并为数据传输分配固定FIFO存储区。本系统在初始化时将CY7C68001的4个端点配置为批量传输类型。其中,FIF02、FIF04为输出端点,用于接收上位机传来的数据;FIF06、FIF08为输入端点,用于存放待发送的数据。各个FIFO设置为异步工作模式。 DSP经初始化后打开USB外部中断,向CY7C68001写入描述符表,等待其枚举中断。枚举成功后,DSP对CY7C68001进行其他配置并清空FIFO,然后等待主机发送用户请求并进行相应处理。 程序流程如图4所示。程序在TI CCS 2.2集成开发环境下进行编译并调试通过
3.2.1 USB的初始化 在每个USB设备的内部都有一个设备描述符(des
criptor)表,它包含了设备的全部要求和特性。通过主机与设备间的控制传输来辨识并配置新连接上的USB设备的过程称为设备枚举(enumeration)。CY7C68001芯片内有一个大小为500字节的描述符RAM,用于存放描述符表,内部寄存器DESC用于存放描述符表的长度。 CY7C68001的枚举方式有EEPROM自举和通过DSP自举(默认)2种。本系统采用默认方式,先由DSP向DESC寄存器写入2字节的描述符表长度,再通过命令口将描述符表按字节写入描述符RAM。描述符表写入后,DSP等待CY7C68001的枚举成功中断。枚举成功后,CY7C68001完成对各端点的配置。3.2.2 CY7C68001的寄存器读写 DSP采用二次寻址方式对CY7C68001寄存器进行读写,即首先通过命令口将要寻址的寄存器子地址和操作类型(读/写)写入,然后通过命令口将数据读出或写入。具体步骤可参考CY7C68001芯片手册。3.2.3 CY7C68001的中断 SX2共有以下6个中断源: SETUP:SX2收到无法自动处理的上位机请求; EPOBUF:端点0的缓冲区处于可读/写状态; FLAGS:OUT端点FIFO转为非空状态; ENUMOK:SX2枚举成功; BUSACTIVITY:总线挂起/恢复; READY:从低功耗通过WAKEUP引脚被唤醒。 当有中断事件发生时,CY7C68001通过INT信号触发:DSP中断。DSP在USB的ISR(中断服务子程序)中通过读命令口来判断中断源,并设置相应中断标志。若为SETUP中断,即SX2收到无法自动处理的用户请求(如用户定义的批量读/写),则在随后的中断处理中,ISR从命令口依次读入8个字节,存入用户命令缓冲区中,再由主程序解析执行。
4结束语 本系统利用USB2.0接口芯片CY7C68001实现上位机和DSP的高速图像数据传输,为水下图像传输系统建立良好的人机界面,用户利用PC机将待发送的图像送入发送机的DSP,接收机的DSP将收到的图像数据送回PC机并显示,用户可对发送和接收到的图像进行直观对比。