1 引言

近年来,随着数字信号技术的发展,需要处理的数据量越来越大,处理的速度也越来越快,因此具有高速性能 DSP 芯片的应用得到了广泛重视。而通过 DSP 处理的数据往往要传输给 PC 机进行存储和再处理,那么就必须解决 DSP 与 PC 机之间的高速通信问题。本设计方案以德州仪器(TI)的 C5000 系列 DSP 芯片 TMS320VC5416 为微处理器,利用 Cypress 公司提供的 USB2.0 接口芯片 CY7C68001 实现了 USB2.0 从机接口设计,从而使 PC 机与 DSP 通过 USB2.0 接口实现高速双向地传输数据。


2 TMS320VC5416 与 CY7C68001 EZUSBSX2 硬件接口设计

系统方案采用 PC 机作为上位机,负责 USB 总线上检测到设备接入并进行枚举、识别的过程,并且可以通过在 PC 机上运行应用程序来控制数据的传输。USB 芯片作为 USB 设备端,连接 DSP 与上位机的数据交换。DSP 用于实现 USB 协议,通过 DSP 编程实现 DSP 数据通过 USB 接口与 PC 机通信,且 USB 芯片的描述符写入及各种命令状态的处理均通过 DSP 编程实现。

 

TMS320VC5416 是 TI 的一款 16bit 定点高性能 DSP,由于 VC5416 的功耗低、性能高,其分开的指令和数据空间使该芯片具有高度的并行操作能力,在单周期内允许指令和数据同时存取,再加上高度优化的指令集,使得该芯片具有很高的运算速度,同时该芯片本身具有丰富的片内存储器资源以及多种片上外设,因此在工程界得到了广泛的应用。

 

Cypress 公司的 CY7C68001 EZ-USB SX2 是一款高性能、使用方便的 USB2.0 接口芯片,满足 USB2.0 协议,可工作在高速(480Mbps)或全速(12Mbps)模式下,提供一个控制端点用于处理 USB 设备的请求以及四个可配置端点用于传输控制和数据信号,这四个端点共享一个 4KB 的 FIFO 空间,具备标准的 8 位或 16 位外部主机接口,可无缝连接多种标准微处理器,比方说 DSP、ASIC 和 FPGA 等,并可根据需求设置为同步或异步接口,片内集成锁相环(PLL),该芯片广泛应用于 DSL 调制解调器、MP3、读卡器、数码照机、扫描仪、打印机等设备。

 

系统的硬件接口设计如图 1、图 2 所示,两者通过数据、地址总线以及读、写信号线等进行通信,CY7C68001 的片选信号连接至 TMS320VC5416 的 I/O 空间片选信号上,CY7C68001 的 FIFO 扩展在 VC5416 的 I/O 空间上。

 

 

 

电源部分采用一片 1117 将 5V 转为 3.3V 供给 CY7C68001EZ-USB SX2,模拟地与数字地之间采用磁珠连接,复位部分采用 RC 电路设计,且芯片资料上介绍有典型值 100KΩ和 0.1μF。

 

3 接口操作原理

CY7C68001 有两个外部接口:

 

(1) 命令接口:用来访问 CY7C68001 寄存器、Endpoint 0 缓冲器,以及描述表。

 

(2) FIFO 数据接口:用来访问 4 个 1K 字节的 FIFO 中的数据。

 

这两个外部接口均可以通过同步或异步的方式进行访问。

 

本设计采用异步的方式进行访问。根据图 3 的地址分配,利用 TMS320VC5416 的三根高位地址线(A11、A12、A13)连接 CY7C68001 的 FIFOAD0/1/2,用以选择 FIFO2、FIFO4、FIFO6、FIFO8 以及命令接口,其地址表如图 3 所示。CY7C68001 的地址线 FIFOADR[2:0]为 100B 时,选中 CY7C68001 的命令口(Command)。通过 CY7C68001 的命令口,可以访问 37 个寄存器、Endpoint 0 缓冲器(64 个字节 FIFO)和描述表(500 个字节 FIFO)等,对这些寄存器进行读写方式采用二次寻址方式,即首先通过命令口将要寻址的寄存器的子地址和操作类型(读或写)写入,然后再通过命令口将数据读出或写入相应的寄存器。

 

 

写入命令口的内容称为命令字,命令字包含要寻址的寄存器的子地址,或要写入寄存器的数据的高 4 位或低 4 位。读命令口必须要跟在给命令口写读命令字之后,读出的为相应寄存器的 8 位数据。所以,寄存器的写操作由 3 个步骤组成:

 

 

4 USB 接口的软件设计

USB 接口的软件设计由两部分组成:一是在 PC 机 Windows 中运行 USB 2.0 UTIlity 工具,是一个 Windows 图形用户界面软件,提供 CY7C68001 与 Windows 操作系统的接口程序,使得 CY7C68001 的开发变得简单。二是在在 DSP 中运行嵌入式应用程序代码,提供硬件的驱动,用来管理 CY7C68001 进行不同方式的数据处理,从而实现 USB2.0 传输协议。

 

4.1 USB 接口的软件设计流程

USB 接口的软件设计,DSP 端代码大致包括 DSP 芯片初始化(vc5416_init 函数)、USB 芯片初始化(sx2_init 函数)、USB 芯片配置程序( s x 2 _ s e t u p 函数) 以及 USB 芯片数据读写程序(sx2_processdata 函数),程序流程如图 4 所示。

 

DSP 芯片初始化(vc5416_init 函数)主要负责设置 VC5416 的工作频率,配置 SWCR 以及 SWWSR 寄存器,另外本应用系统采用一个 GPIO 引脚作为 68001 的复位信号,所以还需要对其进行相关设置。

 

 

USB 芯片初始化(sx2_init 函数)主要负责清除 Buffer 缓冲区以及使能 VC5416 的外部中断 INT1,待初始化结束后发出 READY 中断,此时 DSP 将描述符写入 68001,进行枚举过程,待枚举通过后发出 ENUMOK 中断,枚举方式可以采用外部 EEPROM 通过 I2C 总线上电后从外部导入描述符,也可采用通过运行 DSP 程序从 DSP 导入到 68001,本应用系统采用第二种枚举方式。

 

USB 芯片配置程序(sx2_setup 函数)是在命令通道(0 节点)收到无法自动处理的上位机请求,68001 向 VC5416 发出 SETUP 中断后执行的程序,此时 VC5416 通过对 SETUP 寄存器连续执行八次读操作流程即可得到 8 字节请求,系统可以响应该请求或 STALL 该请求。

 

USB 芯片数据读写程序(sx2_processdata 函数)即 PC 机与 USB 从设备端遵照 USB 传输协议进行数据通信。

 

CY7C68001 的地址 FIFOAD[2:0]为 100 时,选中 CY7C68001 的命令接口。对于命令接口的读写要分两步进行,即在 READY 有效时,先通过命令接口写入要寻址寄存器的子地址和操作类型(读或写),之后,在 READY 再次有效时分两次读写命令接口,即可读写一个字节的数据。

 

4.2 中断服务程序设计要点

DSP 使用一个外部中断引脚(INT1)与 CY7C68001 的 INT 脚相连,USB 总线上产生一系列的活动,均会触发相应的中断,一旦中断产生,DSP 会从 CY7C68001 的 Command 口中读取相应的值,来判断产生的是何种中断。

 

CY7C68001 EZ-USB SX2 包括六个中断源:SETUP(收到来自于 USB 上位机(PC)发送过来的 Set-up 包时产生的中断)、EP0BUF(端点 0 缓存可用时产生的中断)、FLAGS(OUT 端点 FIFO 的状态从空变为非空时产生的中断)、ENUMOK(SX2 枚举完成后产生的中断)、BUSACTIVITY(SX2 检测到总线活动时产生的中断)以及 READY(SX2 上电并且复位完毕后产生的中断),每一个中断源都可以通过置位或清除 INTENABLE 寄存器中相应位来使能或禁止。

 

CY7C68001 芯片采用中断缓冲机制,每次只会有一个中断源,其他中断源只有在上一个中断被读走后才会发出新的中断请求。

 

因此,当一个中断产生时,INT 引脚为低电平状态,同时中断状态位会置入命令接口,在进入中断程序后应先对中断源进行判断,首先判断是否是读寄存器所产生的中断,如果是则将数据准备好标志位置 1 然后返回,否则外部 PC 通过选通 SLRD/SLOE 信号从命令接口中读取中断状态位来判断产生的是何种中断,然后根据中断源进行相应操作,DSP 读取中断状态位后自动清除中断标志位。

 

5 结束语

基于上述方法实现的 USB 接口电路,为 DSP 构筑与 PC 机之间的高速双向传输通路。通过硬件平台的搭建和软件程序的实现,验证了该接口电路可以满足高速信号处理的数据传输要求,并具有速度快和可靠性高等优点,相信随着嵌入式技术的发展以及基于 USB2.0 协议的芯片的普遍应用,基于 USB 的接口技术将得到更加广泛的应用。