登录  |  注册
河北华利机械配件有限公司

多种USB接口技术在游戏手柄控制系统中的应用

2013/7/11 14:25:28

 

    赵敬,陈德煌

    空军第一航空学院航空电子工程系,河南464000

摘要:为了使游戏控制盒更加方便的与游戏手柄进行连接,很多游戏机厂家都开发了基于USB接口的游戏手柄。如果产品发生故障,厂家需要一个快捷的检测系统判断手柄和控制盒工作是否正常,然后再对产品进行维修。因此,将USB接口的手柄与本板卡连接,结合计算机上的测试程序模拟手柄,无疑是一种快速、准确的方法。本设计就是一款电视游戏的测试控制系统。经过厂家测试,本系统完全可以满足测试需求,完成了设计任务,并且具有很好的扩展性。

关键字:FPAGUSBHOST

中图分类号:TP336文献标识码:A

引言

    在电视游戏发展过程中,游戏手柄和游戏控制盒之间的连接线通常是使用排线连接的。虽然,各个游戏厂家在工艺上有了很大的提高,但是排线容易折断仍然是这类电子消费产品的常见故障。为了解决传统连接方式的不足,现在的很多电视游戏厂家都偏爱使用USB总线作为两者的连接线。USB总线的中文意思是通用串行总线,是1995年由康柏、微软、IBMDEC等公司推广的一种新型的通信标准。该总线接口具有安装方便、高带宽、易于扩展等忧点,已逐渐成为现代数据传输的发展趋势。

    通常USB接口的电视游戏手柄包含手柄和控制器两部分。控制器和家用电视接口连接,手柄通过USB接口受控于控制盒。如果产品发生故障,厂家需要一个快捷的检测系统判断手柄和控制盒哪个发生故障,然后再对产品进行维修。这个设计的重点在于:①实现USB接口和计算机的通信,并且实现游戏手柄自定义命令的有效下发和实现;②实现USB HOST接口设计并实现对游戏手柄的识别、枚举和通信;③FPGA防止缓存器访问冲突。在设计过程中,充分考虑以上设计要素,产品符合设计要求,满足使用需要。

系统整体设计

    本设计利用FPGA作为核心控制器件,采用Cypress公司的68013 USB控制芯片和SL811HS HOST控制芯片完成系统功能。

    根据设计要求,控制板卡需要三个USB接口,分别为USB_AUSB_BUSB_HOST。其中,USB_AUSB_BUSBUSB从端口,采用Cypress公司的68013芯片完成与计算机和游戏控制器的通信;USB_HOST端口是主端口,采用SL811HS芯片,完成向下枚举游戏手柄的功能。由于SL811HS是一个受控的可编程芯片,功能的实现需要外加控制器。

    对于外控制器的选择,主要根据板卡实际使用功能要求。在本设计中选用TMS320C5402 DSP芯片。这个系列DSP具有很高的操作灵活性和速度。它具有一个先进的修正哈佛结构、专门硬件逻辑的CPU、片内存储器、片内外设和专门指令集。C54x系列提供了许多外设接口:两个通用I/O口、主机通信接口(HPI)4种串口,可以满足众多领域的使用要求。

    在本系统内,计算机上利用Microsoft Visual C++软件开发系统应用程序,模拟手柄操作。这些操作代表的指令通过USB_A接口发送到FPAC内部的缓存器内。同时,游戏手柄也通过USB_HOST接口发送控制命令到FPGA内部。此时,FPAG根据接收两个命令的时间判断发送啷个命令通过USB_B到游戏控制盒。

若计算机发送命令可以控制游戏的正常运行,则表明游戏控制盒无故障,否则控制盒存在故障;若计算机可以正常控制的前提下,手柄不起作用,则表明手柄故障。从而,完成游戏手柄功能的检测。

    从系统设计上看,难点在于多种USB接口通信的实现和FPAG对于内部缓存的控制和防冲突的时序设计。对于USB接口通信包括USB SIAVEUSB HOST两种模式,并且在USB SLAVE接口设计中,除了要满足总线的基本请求,还要实现游戏手柄与控制盒之间自定义请求的响应,因此,USB SLAVE的固件程序设计存在着比较大的难度。

3  USB SLAVE从接口设计

USB接口控制芯片包含两大类:一类是需要外置控制器的芯片,如PHILIP公司的D12芯片;还有一类是内置控制器。Cypress Semiconductor公司的EZ - USB FX2是世界上第一款集成USB2.0的微处理器,它集成了USB2.0收发器、SIE(串行接口引擎)、增强的8051微控制器和可编程的外围接口。FX2这种独创性结构可使数据传输率达到56Mbytes/s,即USB2.0允许的最大带宽。在FX2中,智能SIE可以硬件处埋许多USBl.1USB2.0协议,从而减少了开发时间和确保了USB的兼容性。GPIF(General Programmable Inter-face)和主/从端点FJFO8位或16位数据总线)为ATAUTOPIAEPP、计算机MCIADSP等提供了简单和无缝连接接口。   

本系统采用CYC68013芯片,它只需要正确配置USB端口的几个上拉电阻,计算机就可以识别到USB设备的接人,同时判断此USB设备是高速的还是全速的。随后,USB设备识别和通信就要依靠固件程序和驱动程序了。

3.1  驱动和通信程序

    为了简化和加速开发过程,利用Cypress公司提供的USB固件框架进行开发。固件框架主要包括初始化、处理标准USB设备请求以及USB挂起时的电源管理等。

    固件框架完成一个简单的任务循环。首先初始化内部状态变量和链接一个描述符表,然后调用用户初始化程序TD_lnit()函数。TD_Init()函数主要用于初始化8051内核以及设置USB端口FIFO和初始化68013其他寄存器。从该函数返回后,每隔Is进行一次设备枚举,直到端点0接收到SETUP包,框架开始任务调度。TD_Poll()函数是用户函数,用户操作基本在这个函数完成。

    在完成基本请求响应后,固件程序进入一个循环程序等待计算机下发的游戏手柄自定义指令。通过对这款游戏USB接口自定义通信协议的分析和理解后,在程序中对自定义请求做出准确回应,实现计算机对游戏手柄的模拟。

3.2驱动和通信程序

    要实现计算机模拟手柄功能,USB设备的驱动开发一向是设计的重点。一个稳定精练的驱动是USB设备快速、无误工作的基本保证。由于Cypress公司提供驱动仅支持USB设备工作在同步模式下,这样如果端口数据与读写不能同步,数据管道就会堵塞,照成死机。因此,需要在驱动中增加异步传输模式,添加Startlo例程,避免数据丢失和系统死机。完成驱动程序设计的方法一般有三种:基于DDK开发、基于Windriver开发相基于DriverStudio开发。由于WindriverDriverStudioDDK中的函数进行了一定程度的封装,它们开发难度都比直接利用DDK开发要小,但开发灵活性和驱动的效率不如DDK。本设计使用的驱动是利用DDK开发的。完成了USB固件和驱动开发以后,就可以比较方便地实现USB接口与计算机的通信。考虑到程序设计的通用性和日后升级,首先开发USB与计算机通信的DLL(动态链接库)文件。利用VC++软件提供的API函数CreateFileCloseHandle实现USB设备的打开和关闭;DeviceIoControl函数实现设备数据的读写。

    这样系统设计中的USB SLAVE接口设计就可以实现了。计算机利用VC编写的应用程序界面完全替代了手柄功能。另一个手柄通过USB HOST接口通过FPGA连接到游戏控制盒上。USB HOST接口设计采用Cypress SL811 HS芯片实现。

4  USB HOST主接口设计

    USB接口虽然具有众多优点,但是它也有一个不容忽视的缺点:USB设备在任何通信中都是从设备,它不能主动请求通信开始,也不能终止任何通信。与USB设备相关的通信都是由某一个主设备发起和控制的,如计算机机或其他的HOST设备。无论是什么样的USB控制芯片,它都是作为计算机的从设备出现的,即,它只能响应计算机请求,不能向计算机发送请求。而USB HUB芯片是一个主控芯片,它打破了计算机在USB通信中的主宰地位。通过HUB芯片可以完成USB设备的枚举、通信,是新一代USB开发技术的发展趋

势。目前,比较常用的USB HUB芯片是Cypress公司的SL811HS芯片。

    SL811HS内含主/从控制器,支持全速/低速数据传输,并能自动识别低速或全速设备。内部有一个256字节的内部RAM,可用做控制寄存器或数据缓冲器。SL811HS所提供的接口遵从USBl.1标准,可以与微处理器、微控制器和DSP相连。在本设计中,TMS320C5402 DSP控制HUB芯片。

    采用TMS320C5402 DSP控制SL811HS芯片。HUB芯片的固件编写与USB芯片的大不相同,它遵循USBl.1标准中第11章的HUB标准。首先,HUB以默认的端口0和地址0对下游USB设备进行枚举,若枚举成功,就为这个设备分配地扯,接着通过端口0和新地址获取设备描述符和配置描述符等。若检测到HUB类,获取HUB端口数等其他特性后,再枚举USB设备。若检测到USB设备就直接对设备进行枚举,完成通信。下面,集中讨论HUB芯片的固件程序设计。

    该系统USB固件程序主要由几个部分组成:对SL811HS进行设置的初始化程序,这部分程序在系统复位后就立即执行;发现USB设备接人的子程序,并判断该设备是高速设备还是低速设备;对该USB设备进行枚举。固件程序对USB设备的配置涉及到资源分配和设置USB地址等。这些功能的完成都需要控制传输函数usbxfer实现。图3是这个函数的主流程图。

    经过多次的DSPSL811HS的通信,完成了SL811HS对下流USB设备的枚举和识别。然后,手柄通过有效地址与FPGA进行数据通信。

    FPGA是系统设计的中枢部分,它相当于通信链路上的枢纽,因此FPGA内部时序的有效运行是确保手柄和计算机指令有效传达到控制盒的关键。对于FPGA的程序设计重点在于防止来自不同接口的游戏指令冲突,包括时序冲突和内存冲突。在适当分配了DSPUSB接口和内存后,利用控制逻辑进行时序控制,防止冲突产生。

结束语

    本系统是一个对USB接口游戏硬件进行测试的平台。经过厂家测试,本系统完全可以满足测试需求,完成了设计任务。并且,系统硬件是基于FPGA的“软”设计,因此,通过软件修改就可以满足各个厂家不同的需要。同时,USB通信协议也是由软件控制的,所以对于各个厂家对游戏手柄与控制器的通信协议各有不同造成的差异,也可以有效地解决。

 

华利胶木手轮