西藏宰位餐饮管理有限公司

河北華利機(jī)械配件有限公司

多種USB接口技術(shù)在游戲手柄控制系統(tǒng)中的應(yīng)用

2013/7/11 14:25:28

 

    趙敬,陳德煌

    空軍第一航空學(xué)院航空電子工程系,河南464000

摘要:為了使游戲控制盒更加方便的與游戲手柄進(jìn)行連接,很多游戲機(jī)廠家都開發(fā)了基于USB接口的游戲手柄。如果產(chǎn)品發(fā)生故障,廠家需要一個(gè)快捷的檢測(cè)系統(tǒng)判斷手柄和控制盒工作是否正常,然后再對(duì)產(chǎn)品進(jìn)行維修。因此,將USB接口的手柄與本板卡連接,結(jié)合計(jì)算機(jī)上的測(cè)試程序模擬手柄,無(wú)疑是一種快速、準(zhǔn)確的方法。本設(shè)計(jì)就是一款電視游戲的測(cè)試控制系統(tǒng)。經(jīng)過廠家測(cè)試,本系統(tǒng)完全可以滿足測(cè)試需求,完成了設(shè)計(jì)任務(wù),并且具有很好的擴(kuò)展性。

關(guān)鍵字:FPAG,USBHOST

中圖分類號(hào):TP336文獻(xiàn)標(biāo)識(shí)碼:A

引言

    在電視游戲發(fā)展過程中,游戲手柄和游戲控制盒之間的連接線通常是使用排線連接的。雖然,各個(gè)游戲廠家在工藝上有了很大的提高,但是排線容易折斷仍然是這類電子消費(fèi)產(chǎn)品的常見故障。為了解決傳統(tǒng)連接方式的不足,現(xiàn)在的很多電視游戲廠家都偏愛使用USB總線作為兩者的連接線。USB總線的中文意思是通用串行總線,是1995年由康柏、微軟、IBM、DEC等公司推廣的一種新型的通信標(biāo)準(zhǔn)。該總線接口具有安裝方便、高帶寬、易于擴(kuò)展等憂點(diǎn),已逐漸成為現(xiàn)代數(shù)據(jù)傳輸?shù)陌l(fā)展趨勢(shì)。

    通常USB接口的電視游戲手柄包含手柄和控制器兩部分。控制器和家用電視接口連接,手柄通過USB接口受控于控制盒。如果產(chǎn)品發(fā)生故障,廠家需要一個(gè)快捷的檢測(cè)系統(tǒng)判斷手柄和控制盒哪個(gè)發(fā)生故障,然后再對(duì)產(chǎn)品進(jìn)行維修。這個(gè)設(shè)計(jì)的重點(diǎn)在于:①實(shí)現(xiàn)USB接口和計(jì)算機(jī)的通信,并且實(shí)現(xiàn)游戲手柄自定義命令的有效下發(fā)和實(shí)現(xiàn);②實(shí)現(xiàn)USB HOST接口設(shè)計(jì)并實(shí)現(xiàn)對(duì)游戲手柄的識(shí)別、枚舉和通信;③FPGA防止緩存器訪問沖突。在設(shè)計(jì)過程中,充分考慮以上設(shè)計(jì)要素,產(chǎn)品符合設(shè)計(jì)要求,滿足使用需要。

系統(tǒng)整體設(shè)計(jì)

    本設(shè)計(jì)利用FPGA作為核心控制器件,采用Cypress公司的68013 USB控制芯片和SL811HS HOST控制芯片完成系統(tǒng)功能。

    根據(jù)設(shè)計(jì)要求,控制板卡需要三個(gè)USB接口,分別為USB_A、USB_BUSB_HOST。其中,USB_AUSB_BUSBUSB從端口,采用Cypress公司的68013芯片完成與計(jì)算機(jī)和游戲控制器的通信;USB_HOST端口是主端口,采用SL811HS芯片,完成向下枚舉游戲手柄的功能。由于SL811HS是一個(gè)受控的可編程芯片,功能的實(shí)現(xiàn)需要外加控制器。

    對(duì)于外控制器的選擇,主要根據(jù)板卡實(shí)際使用功能要求。在本設(shè)計(jì)中選用TMS320C5402 DSP芯片。這個(gè)系列DSP具有很高的操作靈活性和速度。它具有一個(gè)先進(jìn)的修正哈佛結(jié)構(gòu)、專門硬件邏輯的CPU、片內(nèi)存儲(chǔ)器、片內(nèi)外設(shè)和專門指令集。C54x系列提供了許多外設(shè)接口:兩個(gè)通用I/O口、主機(jī)通信接口(HPI)、4種串口,可以滿足眾多領(lǐng)域的使用要求。

    在本系統(tǒng)內(nèi),計(jì)算機(jī)上利用Microsoft Visual C++軟件開發(fā)系統(tǒng)應(yīng)用程序,模擬手柄操作。這些操作代表的指令通過USB_A接口發(fā)送到FPAC內(nèi)部的緩存器內(nèi)。同時(shí),游戲手柄也通過USB_HOST接口發(fā)送控制命令到FPGA內(nèi)部。此時(shí),FPAG根據(jù)接收兩個(gè)命令的時(shí)間判斷發(fā)送啷個(gè)命令通過USB_B到游戲控制盒。

若計(jì)算機(jī)發(fā)送命令可以控制游戲的正常運(yùn)行,則表明游戲控制盒無(wú)故障,否則控制盒存在故障;若計(jì)算機(jī)可以正??刂频那疤嵯?,手柄不起作用,則表明手柄故障。從而,完成游戲手柄功能的檢測(cè)。

    從系統(tǒng)設(shè)計(jì)上看,難點(diǎn)在于多種USB接口通信的實(shí)現(xiàn)和FPAG對(duì)于內(nèi)部緩存的控制和防沖突的時(shí)序設(shè)計(jì)。對(duì)于USB接口通信包括USB SIAVEUSB HOST兩種模式,并且在USB SLAVE接口設(shè)計(jì)中,除了要滿足總線的基本請(qǐng)求,還要實(shí)現(xiàn)游戲手柄與控制盒之間自定義請(qǐng)求的響應(yīng),因此,USB SLAVE的固件程序設(shè)計(jì)存在著比較大的難度。

3  USB SLAVE從接口設(shè)計(jì)

USB接口控制芯片包含兩大類:一類是需要外置控制器的芯片,如PHILIP公司的D12芯片;還有一類是內(nèi)置控制器。Cypress Semiconductor公司的EZ - USB FX2是世界上第一款集成USB2.0的微處理器,它集成了USB2.0收發(fā)器、SIE(串行接口引擎)、增強(qiáng)的8051微控制器和可編程的外圍接口。FX2這種獨(dú)創(chuàng)性結(jié)構(gòu)可使數(shù)據(jù)傳輸率達(dá)到56Mbytes/s,即USB2.0允許的最大帶寬。在FX2中,智能SIE可以硬件處埋許多USBl.1USB2.0協(xié)議,從而減少了開發(fā)時(shí)間和確保了USB的兼容性。GPIF(General Programmable Inter-face)和主/從端點(diǎn)FJFO8位或16位數(shù)據(jù)總線)為ATAUTOPIAEPP、計(jì)算機(jī)MCIADSP等提供了簡(jiǎn)單和無(wú)縫連接接口。   

本系統(tǒng)采用CYC68013芯片,它只需要正確配置USB端口的幾個(gè)上拉電阻,計(jì)算機(jī)就可以識(shí)別到USB設(shè)備的接人,同時(shí)判斷此USB設(shè)備是高速的還是全速的。隨后,USB設(shè)備識(shí)別和通信就要依靠固件程序和驅(qū)動(dòng)程序了。

3.1  驅(qū)動(dòng)和通信程序

    為了簡(jiǎn)化和加速開發(fā)過程,利用Cypress公司提供的USB固件框架進(jìn)行開發(fā)。固件框架主要包括初始化、處理標(biāo)準(zhǔn)USB設(shè)備請(qǐng)求以及USB掛起時(shí)的電源管理等。

    固件框架完成一個(gè)簡(jiǎn)單的任務(wù)循環(huán)。首先初始化內(nèi)部狀態(tài)變量和鏈接一個(gè)描述符表,然后調(diào)用用戶初始化程序TD_lnit()函數(shù)。TD_Init()函數(shù)主要用于初始化8051內(nèi)核以及設(shè)置USB端口FIFO和初始化68013其他寄存器。從該函數(shù)返回后,每隔Is進(jìn)行一次設(shè)備枚舉,直到端點(diǎn)0接收到SETUP包,框架開始任務(wù)調(diào)度。TD_Poll()函數(shù)是用戶函數(shù),用戶操作基本在這個(gè)函數(shù)完成。

    在完成基本請(qǐng)求響應(yīng)后,固件程序進(jìn)入一個(gè)循環(huán)程序等待計(jì)算機(jī)下發(fā)的游戲手柄自定義指令。通過對(duì)這款游戲USB接口自定義通信協(xié)議的分析和理解后,在程序中對(duì)自定義請(qǐng)求做出準(zhǔn)確回應(yīng),實(shí)現(xiàn)計(jì)算機(jī)對(duì)游戲手柄的模擬。

3.2驅(qū)動(dòng)和通信程序

    要實(shí)現(xiàn)計(jì)算機(jī)模擬手柄功能,USB設(shè)備的驅(qū)動(dòng)開發(fā)一向是設(shè)計(jì)的重點(diǎn)。一個(gè)穩(wěn)定精練的驅(qū)動(dòng)是USB設(shè)備快速、無(wú)誤工作的基本保證。由于Cypress公司提供驅(qū)動(dòng)僅支持USB設(shè)備工作在同步模式下,這樣如果端口數(shù)據(jù)與讀寫不能同步,數(shù)據(jù)管道就會(huì)堵塞,照成死機(jī)。因此,需要在驅(qū)動(dòng)中增加異步傳輸模式,添加Startlo例程,避免數(shù)據(jù)丟失和系統(tǒng)死機(jī)。完成驅(qū)動(dòng)程序設(shè)計(jì)的方法一般有三種:基于DDK開發(fā)、基于Windriver開發(fā)相基于DriverStudio開發(fā)。由于WindriverDriverStudio對(duì)DDK中的函數(shù)進(jìn)行了一定程度的封裝,它們開發(fā)難度都比直接利用DDK開發(fā)要小,但開發(fā)靈活性和驅(qū)動(dòng)的效率不如DDK。本設(shè)計(jì)使用的驅(qū)動(dòng)是利用DDK開發(fā)的。完成了USB固件和驅(qū)動(dòng)開發(fā)以后,就可以比較方便地實(shí)現(xiàn)USB接口與計(jì)算機(jī)的通信。考慮到程序設(shè)計(jì)的通用性和日后升級(jí),首先開發(fā)USB與計(jì)算機(jī)通信的DLL(動(dòng)態(tài)鏈接庫(kù))文件。利用VC++軟件提供的API函數(shù)CreateFileCloseHandle實(shí)現(xiàn)USB設(shè)備的打開和關(guān)閉;DeviceIoControl函數(shù)實(shí)現(xiàn)設(shè)備數(shù)據(jù)的讀寫。

    這樣系統(tǒng)設(shè)計(jì)中的USB SLAVE接口設(shè)計(jì)就可以實(shí)現(xiàn)了。計(jì)算機(jī)利用VC編寫的應(yīng)用程序界面完全替代了手柄功能。另一個(gè)手柄通過USB HOST接口通過FPGA連接到游戲控制盒上。USB HOST接口設(shè)計(jì)采用Cypress SL811 HS芯片實(shí)現(xiàn)。

4  USB HOST主接口設(shè)計(jì)

    USB接口雖然具有眾多優(yōu)點(diǎn),但是它也有一個(gè)不容忽視的缺點(diǎn):USB設(shè)備在任何通信中都是從設(shè)備,它不能主動(dòng)請(qǐng)求通信開始,也不能終止任何通信。與USB設(shè)備相關(guān)的通信都是由某一個(gè)主設(shè)備發(fā)起和控制的,如計(jì)算機(jī)機(jī)或其他的HOST設(shè)備。無(wú)論是什么樣的USB控制芯片,它都是作為計(jì)算機(jī)的從設(shè)備出現(xiàn)的,即,它只能響應(yīng)計(jì)算機(jī)請(qǐng)求,不能向計(jì)算機(jī)發(fā)送請(qǐng)求。而USB HUB芯片是一個(gè)主控芯片,它打破了計(jì)算機(jī)在USB通信中的主宰地位。通過HUB芯片可以完成USB設(shè)備的枚舉、通信,是新一代USB開發(fā)技術(shù)的發(fā)展趨

勢(shì)。目前,比較常用的USB HUB芯片是Cypress公司的SL811HS芯片。

    SL811HS內(nèi)含主/從控制器,支持全速/低速數(shù)據(jù)傳輸,并能自動(dòng)識(shí)別低速或全速設(shè)備。內(nèi)部有一個(gè)256字節(jié)的內(nèi)部RAM,可用做控制寄存器或數(shù)據(jù)緩沖器。SL811HS所提供的接口遵從USBl.1標(biāo)準(zhǔn),可以與微處理器、微控制器和DSP相連。在本設(shè)計(jì)中,TMS320C5402 DSP控制HUB芯片。

    采用TMS320C5402 DSP控制SL811HS芯片。HUB芯片的固件編寫與USB芯片的大不相同,它遵循USBl.1標(biāo)準(zhǔn)中第11章的HUB標(biāo)準(zhǔn)。首先,HUB以默認(rèn)的端口0和地址0對(duì)下游USB設(shè)備進(jìn)行枚舉,若枚舉成功,就為這個(gè)設(shè)備分配地扯,接著通過端口0和新地址獲取設(shè)備描述符和配置描述符等。若檢測(cè)到HUB類,獲取HUB端口數(shù)等其他特性后,再枚舉USB設(shè)備。若檢測(cè)到USB設(shè)備就直接對(duì)設(shè)備進(jìn)行枚舉,完成通信。下面,集中討論HUB芯片的固件程序設(shè)計(jì)。

    該系統(tǒng)USB固件程序主要由幾個(gè)部分組成:對(duì)SL811HS進(jìn)行設(shè)置的初始化程序,這部分程序在系統(tǒng)復(fù)位后就立即執(zhí)行;發(fā)現(xiàn)USB設(shè)備接人的子程序,并判斷該設(shè)備是高速設(shè)備還是低速設(shè)備;對(duì)該USB設(shè)備進(jìn)行枚舉。固件程序?qū)?/span>USB設(shè)備的配置涉及到資源分配和設(shè)置USB地址等。這些功能的完成都需要控制傳輸函數(shù)usbxfer實(shí)現(xiàn)。圖3是這個(gè)函數(shù)的主流程圖。

    經(jīng)過多次的DSPSL811HS的通信,完成了SL811HS對(duì)下流USB設(shè)備的枚舉和識(shí)別。然后,手柄通過有效地址與FPGA進(jìn)行數(shù)據(jù)通信。

    FPGA是系統(tǒng)設(shè)計(jì)的中樞部分,它相當(dāng)于通信鏈路上的樞紐,因此FPGA內(nèi)部時(shí)序的有效運(yùn)行是確保手柄和計(jì)算機(jī)指令有效傳達(dá)到控制盒的關(guān)鍵。對(duì)于FPGA的程序設(shè)計(jì)重點(diǎn)在于防止來(lái)自不同接口的游戲指令沖突,包括時(shí)序沖突和內(nèi)存沖突。在適當(dāng)分配了DSPUSB接口和內(nèi)存后,利用控制邏輯進(jìn)行時(shí)序控制,防止沖突產(chǎn)生。

結(jié)束語(yǔ)

    本系統(tǒng)是一個(gè)對(duì)USB接口游戲硬件進(jìn)行測(cè)試的平臺(tái)。經(jīng)過廠家測(cè)試,本系統(tǒng)完全可以滿足測(cè)試需求,完成了設(shè)計(jì)任務(wù)。并且,系統(tǒng)硬件是基于FPGA的“軟”設(shè)計(jì),因此,通過軟件修改就可以滿足各個(gè)廠家不同的需要。同時(shí),USB通信協(xié)議也是由軟件控制的,所以對(duì)于各個(gè)廠家對(duì)游戲手柄與控制器的通信協(xié)議各有不同造成的差異,也可以有效地解決。

 

華利膠木手輪
北票市| 铁岭县| 托克逊县| 鹤峰县| 通化市| 吉安市| 辽中县| 广宗县| 山西省| 海南省| 油尖旺区| 桐乡市| 临猗县| 巴塘县| 南京市| 杭州市| 连云港市| 香河县| 光泽县| 石泉县| 木兰县| 六安市| 资源县| 五指山市| 布尔津县| 金平| 行唐县| 南康市| 茌平县| 安宁市| 夏津县| 青神县| 凯里市| 湟中县| 大连市| 盐池县| 湖南省| 电白县| 长子县| 英吉沙县| 双峰县|