FlagA、FlagB和FlagC是CY7C68013内部FIFO的状态标志,分别对应FIFO的空、半满和全满状态。TMS320C6727B 通 过GPIO0、GPIO1和GPIO2引脚来获得这些状态信息。其中,CY7C68013的半满状态可由软件设置。半满仅仅表示FIFO中有数据,还存在未写的空间。例如,如果1 024个数据为全满,可以设置半满个数为1~1 023。
TMS320C6727B通过EMIF接口的CE2空间对CY7C68013进行读写操作。当通过CY7C68013向PC机发送数据时,首先查看空、半满和全满这3个状态信号,如果状态为空或者半满,则向CY7C68013写入适当大小的数据,以保证数据不会溢出;PC机通过CY7C68013向TMS320C6727B发送命令字时,CY7C68013通过中断方式通知DSP读取其命令字。
2 软件设计
整个系统的软件设计包括3个部分:DSP的软件设计,PC的应用程序设计,以及CY7C68013的软件设计(包括固件设计和驱动程序设计)。
DSP运行的软件主要是作为CYWUSB6935和CY7C68013的数据收发通道。其具体的工作流程如图5所示。DSP上电初始化后,将依次扫描所有可用的127无线频带的无线信号,查看周围是否存在可用的无线USB设备,并判断它们是否属于本系统的设备。如果存在本系统的设备,则进行信噪比检测,并控制发射功率,也可以优先采用空闲频带。当双方建立连接后,即可进行正常的数据通信。DSP完成了某个频带的设备通信后,将进行下一个频带设备的搜索,直到搜索完成所有频带设备,然后重复整个搜索过程。
对于有线USB设备,DSP软件处理较简单,等待USB通信建立包就可以了。由于设备的识别和连接均由CY7C68013完成,DSP只须等待CY7C68013发出的通信中断。
CY7C68013运行的软件为固件程序,主要功能是控制CY7C68013接收并处理USB驱动程序的请求,控制CY7C68013接收应用程序的控制指令,通过CY7C68013存放数据并实时上传至PC机等。固件程序存储在PC机驱动程序中,通过CY7C68013的枚举过程自动下载到CY7C68013中运行。
驱动程序一般由两部分组成:较高级的通用串行总线驱动程序模块和较低级的主控制器驱动程序模块。主要功能:实现管理USB设备驱动程序和USB控制器之间的通信;加载及卸载USB驱动程序;与USB设备建立通信,并执行设备配置、数据与USB协议框架和打包格式的双向转换任务。Cypress公司为了方便用户开发USB接口,在CY7C68013的软件开发包中提供了一个通用驱动程序。该程序可不加修改,编译后直接使用。
CY7C68013的工作流程如图6所示。上电初始化后,程序处于TD_Init状态,CY7C68013等待PC的设备建立命令。如果此时将CY7C68013连接到PC机,PC机将检测到新的USB设备,并调用相应的USB驱动程序进行CY7C68013的枚举工作。枚举完成后PC机将提示有一个可用的USB外设,CY7C68013就可以和PC机进行数据通信了。此时CY7c68013运行在TD_Poll状态,一直检测是否收到通信建立包。如果收到该协议包则进行数据通信,直到数据通信结束;若空闲,则自动进入TD_Poll状态。CY7C68013在DSP控制过程中,如果收到通信建立包,则将该命令存储到其内部寄存器中,直到空闲时才会响应该通信建立包。作为PC机驱动程序,如果长时问未收到CY7C68013的响应,则重发该命令,若连续重发3次以上,会取消该命令。
结 语
USB设备作为高速实时的数据通信接口已经得到广泛的应用,无线USB也逐渐得到发展和应用。本文设计的系统能够实现无线USB和普通有线USB之间的数据传输。该系统具有小型化、低功耗、高性能的特点,具有良好的应用前景。由于采用DSP为处理器,可以方便地实现各种处理算法(例如压缩多个WUSB的语音信号传输到PC机),也可以实现多个WUSB语音信号的混音功能,实现多路的无线通信。