基于EZ-USB的數據傳輸接口設計
?。啊∫?/FONT>
?。眨樱驴刂破鞑捎猛ㄓ眠B接技術(shù)以實(shí)現與外設的簡(jiǎn)單快速連接,具有連接靈活、使用方便、速度快、擴展能力強等優(yōu)點(diǎn),使得其一些高速、高精度的信號采集領(lǐng)域中, 具有極大的應用價(jià)值[1]?!。牛冢眨樱滦蛄行酒粒危玻保常保咽牵茫穑颍澹螅蠊镜膬惹段⒖刂破鞯模福埃穑椋畹模眨樱陆涌诳刂菩酒?,它采用了一種基于內部RAM的解決方案,允許客戶(hù)隨時(shí)不斷地設置和升級,不受端口數、緩沖大小、傳輸速度及傳輸方式的限制[2]。片內嵌有一個(gè)增強型8051微控制器,與標準的8051相比,其速度快3倍。本文將USB控制器EZ-USB2131Q用于基于TMS320C5409的水聲信號采集及混沌特性研究系統中,實(shí)現了數據的高速傳輸。
?。薄。眨樱驴刂破髋cDSP的連接
?。保薄 。粒危玻保常保押停裕停樱常玻埃茫担矗埃沟挠布B接
在TMS320C5409和USB控制器AN2131Q硬件連接中,采用FIFO(first?。椋睢。妫椋颍螅簟。铮酰簟。樱遥粒停┻B接方法,除了能確保DSP和主機間的數據傳輸速度只受USB協(xié)議限制外,還能使USB控制器和DSP之間的最大數據交換速度超過(guò)USB總線(xiàn)的速度。
由于USB控制器AN2131Q內嵌有加強型的8051處理器,可使用兩片FIFO(FIFO選用IDT72V02,它具有1K×9位的內存)可以實(shí)現USB控制器和DSP之間的雙向通信。從USB控制器AN2131Q或者DSP傳輸的數據首先保存在FIFO中,然后再由DSP或者AN2131Q讀走,從而使得數據的傳輸不會(huì )出現堵塞情況,其硬件連接框圖如圖1所示。
圖1 ?。粒危玻保常保押停裕停樱常玻埃茫担矗埃沟倪B接圖
?。保病 。粒危玻保常保押停桑模裕罚玻郑埃驳倪B接
?。桑模裕罚玻郑埃矤顟B(tài)信號有空(EF)、半滿(mǎn)(HF)和滿(mǎn)(FF),它們都在FIFO為低電平時(shí)有效。其與AN2131Q的連接如圖2所示。
圖2 ?。粒危玻保常保押停桑模裕罚玻郑埃驳倪B接圖
?。保场 。粒危玻保常保押停裕停樱常玻埃茫担矗埃沟能浖B接
?。眨樱驴刂破鳎粒危玻保常保押停模樱兄g的軟件部分包括4個(gè)部分,分別是USB控制器AN213lQ對FIF01的寫(xiě)、USB控制器AN2131Q對FIF02的讀、TMS320C5409對FIF01的讀、TMS320C5409對FIFO2的寫(xiě)。為了描述的方便,將FIF01的3個(gè)狀態(tài)信號分別稱(chēng)為 、 和 ,對應FIF02的為 、 、 。
?。ǎ保眨樱驴刂破鳎粒危玻保常保褜?xiě)FIFO1
當USB總線(xiàn)上有數據要傳送至TMS320C5409時(shí),?。粒危玻保常保巡樵?xún) ,若 無(wú)效,?。粒危玻保常保岩淮蜗颍疲桑疲希睂?xiě)入一個(gè)數據包(數據包要小于或等于FIFO1容量的一半),而且AN2131Q一次向FIFO1寫(xiě)入每一個(gè)字節時(shí)不需再查詢(xún) 。
?。ǎ玻。裕停樱常玻埃茫担矗埃棺xFIFO1
?。裕停樱常玻埃茫担矗埃姑看螐模疲桑疲希敝凶x入一個(gè)數據包,每讀一個(gè)字節前,DSP需要查詢(xún) ,只有當 無(wú)效(FIFO1不為空)時(shí),DSP才能進(jìn)行讀操作。
?。ǎ常。裕停樱常玻埃茫担矗埃箤?xiě)FIFO2
當TMS320C5409有數據要傳送至主機時(shí),TMS320C5409把數據打包,每次向FIFO2中寫(xiě)入一包數據,方法與USB控制器AN2131Q寫(xiě)FIFO1相同,惟一不同的是TMS320C5409查詢(xún)的信號是 。寫(xiě)完一包數據后,TMS320C5409通過(guò)操作控制字向USB控制AN2131Q發(fā)一個(gè)中斷信號,TMS320C5409在寫(xiě)下一包數據時(shí)必須等到AN2131Q應答。AN2131Q應答的方法是利用TMS320C5409的外部中斷INT1中斷DSP。
?。ǎ矗眨樱驴刂破鳎粒危玻保常保炎xFIFO2
?。眨樱驴刂破鳎粒危玻保常保咽盏剑裕停樱常玻埃茫担矗埃拱l(fā)出的中斷信號,應答DSP后,從FIFO2中讀入一包數據,不用再查詢(xún) 。
?。病。眨樱陆涌谲浖O計
?。眨樱陆涌谲浖饕譃槿糠郑汗碳绦?、驅動(dòng)程序、主機應用程序。主機應用程序通過(guò)驅動(dòng)程序與系統USBDI(?。眨樱隆。模澹觯椋悖濉。桑睿簦澹颍妫幔悖澹┻M(jìn)行通信,由系統產(chǎn)生USB數據的傳送動(dòng)作,固件程序則響應來(lái)自系統的USB標準請求,完成各種數據的交換的時(shí)間處理。
?。玻薄。牛冢眨樱鹿碳绦蜷_(kāi)發(fā)
固件代碼存儲在AN2131Q內部的8KBR?。粒椭?,它是用來(lái)初始化USB總線(xiàn)設備的。固件代碼包括了設備的信息,它以描述符形式指定了制造商號、產(chǎn)品號和其他USB總線(xiàn)協(xié)議中所需要的信息,其主要功能是實(shí)現設備枚舉過(guò)程[3]。
為了簡(jiǎn)化和加速用戶(hù)對EZ-USB芯片的開(kāi)發(fā)過(guò)程,Cypress公司提供了Keil?。茫担薄…h(huán)境下編寫(xiě)固件程序的框架。該框架集成了開(kāi)發(fā)USB總線(xiàn)設備所需的基本函數,用戶(hù)可以在此基礎上加入自己的代碼實(shí)現特定的要求。固件程序框架如圖3所示。
圖3 ?。牛谝唬眨樱鹿碳绦蚩蚣?/FONT>
?。牛谝唬眨樱鹿碳绦蚩蚣苁紫瘸跏蓟械膬炔繝顟B(tài)變量,然后調用用戶(hù)初始化函數TD_Init(),然后初始化USB總線(xiàn)設備接口為非配置狀態(tài),并同時(shí)打開(kāi)中斷。當完成上面的任務(wù)后,EZ一USB 固件程序就開(kāi)始重新枚舉設備直到端點(diǎn)0收到SETUP包為止。一旦EZ-USB收到SETUP包,固件程序就開(kāi)始進(jìn)行任務(wù)分配[4]。任務(wù)分配就是依次重復地執行下面的過(guò)程:
?。ǎ保≌{用用戶(hù)函數TD_Poll()。
?。ǎ玻z測是否有標準的設備請求,如果有,則執行指令并做出相應的操作。
?。ǎ常z測USB核是否有USB掛起事件。如果有USB掛起事件,則調用用戶(hù)程序TD_Suspend()。當TD_Suspend()返回為真時(shí),USB核檢測是否有重新開(kāi)始事件。當檢測到有重新開(kāi)始的事件,USB調用用戶(hù)程序TD_Resume(),并繼續執行步驟3.
固件代碼在Keil?。郑椋螅椋铮睿箔h(huán)境中編譯后,最終生成ezusb.hex文件。用USB線(xiàn)把DSP開(kāi)發(fā)板接到PC機上,啟動(dòng)“EZ-USB?。茫铮睿簦颍铮臁。校幔睿澹臁?,就可以把ezusb.hex文件下載到ANZ13lQ內部的8K?。遥粒汀≈?。
?。玻病。牛冢眨樱买寗?dòng)程序開(kāi)發(fā)
驅動(dòng)程序(USBD)是USB總線(xiàn)系統中負責管理USB的工作.?。眨樱驴偩€(xiàn)客戶(hù)軟件包含了用來(lái)控制不同USB總線(xiàn)外設的功能程序,它通過(guò)一個(gè)Windows定義的軟件接口與根集線(xiàn)器驅動(dòng)程序進(jìn)行通信;而USB總線(xiàn)根集線(xiàn)器驅動(dòng)程序則通過(guò)包含在USBD中的USBDI(USB驅動(dòng)程序接口。)實(shí)現USBD的通信;然后,USBD 會(huì )選擇兩種主控制器之一同下方的主控制器進(jìn)行通信;最后,主控制器驅動(dòng)程序會(huì )通過(guò)PCI枚舉器軟件直接實(shí)現對USB物理總線(xiàn)的訪(fǎng)問(wèn)。
?。眨樱驴偩€(xiàn)設備驅動(dòng)程序必須遵循Win32驅動(dòng)程序模型(WDM),其擴展名為.Sys。驅動(dòng)程序主要實(shí)現的功能包括:設備初始化;即插即用設備的創(chuàng )建和刪除;處理Win32打開(kāi)和關(guān)閉文件句柄請求;類(lèi)功能定義IO?。茫裕蹋ǎ桑稀。茫铮睿簦颍铮欤?、功能實(shí)現;IRP(I/O?。遥澹瘢酰澹螅簟。校幔悖耄澹簦┑恼{用處理;訪(fǎng)問(wèn)硬件。
為幫助設備和軟件的開(kāi)發(fā)者測試USB總線(xiàn)設備請求和數據傳輸的能力,Cypress公司提供了EZ_?。眨樱峦ㄓ抿寗?dòng)程序GPD(General?。校酰颍穑铮螅濉。模颍椋觯澹颍?。GPD是用來(lái)和基于EZ_?。眨樱峦庠O接口的通用設備驅動(dòng)程序,提供公共USB總線(xiàn)設備請求和數據傳輸的用戶(hù)態(tài)接口。使用GPD作為起始點(diǎn),可以創(chuàng )建用戶(hù)特有的驅動(dòng)程序。
?。ǎ保〗ⅲ牛冢撸眨樱隆。牵校?/FONT>
建立GDP需要微軟的WDM?。模模撕臀④浀模郑椋螅酰幔臁。茫叮?。EZ-USB的GPD?。澹酰螅猓螅笫且粋€(gè)不用修改就可用的驅動(dòng)程序,在自行開(kāi)發(fā)外部設備的時(shí),可以采用這個(gè)驅動(dòng)程序作為USB驅動(dòng)。
?。ǎ玻∮脩?hù)態(tài)和GPD的接口
對于用戶(hù)態(tài)的應用,可以使用VC++編譯工具CreateFile()和DeviceIoControl()。所有的用戶(hù)態(tài)通過(guò)I/O控制調用來(lái)訪(fǎng)問(wèn)EZ_USB?。牵校牡?。一個(gè)用戶(hù)態(tài)程序首先通過(guò)調用一個(gè)Win32函數CreateFile(?。﹣?lái)獲得設備驅動(dòng)程序的句柄。然后用Win32函數DeviceIoControl()通過(guò)CreateFile(?。┖瘮捣祷氐木浔?,來(lái)提交I/O控制代碼和相關(guān)的輸入輸出緩沖區到驅動(dòng)程序。
?。玻场。校脵C用戶(hù)程序開(kāi)發(fā)
后臺PC機用戶(hù)程序采用Visual?。茫叮啊【帉?xiě),主要功能是利用開(kāi)發(fā)的USB驅動(dòng)程序完成數據的發(fā)送和接收,并將數據保存為自己定義的格式。下面將詳細介紹利用USB驅動(dòng)程序中定義的控制通道和塊傳輸通道進(jìn)行數據接收和保存的過(guò)程,并給出部分關(guān)鍵代碼。
?。ǎ保┐蜷_(kāi)USB設備
?。拢希希獭。酰螅猓停幔颍?; ∥當前選定的USB 設備是否打開(kāi)標志。
?。酰螅猓停幔颍耄剑希穑澹睿眨樱拢ǎ?;∥OpenUSB函數的功能是調用設備對應的驅動(dòng)程序,并獲得設備的描述,其返回值為?。拢希希绦?,可以依此判斷設備是否正確工作。
?。ǎ玻┒x命令請求和數據結構。
?。悖瑁幔颉。猓酰妫妫澹颍郏叮矗?;∥定義數據緩沖區;
?。眨蹋希危恰。觯澹睿洌澹颍欤铮睿纾剑?;
?。遥牛眩眨牛樱裕撸模粒裕痢。酰螅猓遥澹瘢酰澹螅?;∥定義USB 數據傳輸的請求結構。
所有的?。眨樱隆≡O備是通過(guò)缺省控制通道對主機的請求發(fā)出響應,這些請求是由驅動(dòng)程序控制傳送而完成的,請求以及請求的參數通過(guò)包的形式發(fā)向設備,這里定義的usbRequest就是請求的數據包,
?。ǎ常┨顚?xiě)數據傳輸的請求并發(fā)送數據傳輸請求。
?。眨樱拢樱澹睿洌遥澹瘢ǎΓ酰螅猓遥澹瘢酰澹螅?,&buffer[0],vender-long);∥函數將請求交給USB 驅動(dòng)程序,由驅動(dòng)程序完成向USB設備的發(fā)送,USB設備接到請求后根據固件中的程序將數據發(fā)送回后臺PC機。
?。ǎ矗┻M(jìn)行數據的接收,本文采用的是塊傳輸模式。
?。拢眨蹋耍撸模粒裕痢。酰螅猓拢酰欤耄洌幔簦?;∥定義塊傳輸結構;
?。猓酰欤耄茫铮睿簦颍铮欤穑椋穑澹危酰恚剑?;∥選擇傳輸管道;
?。猓酰妫妫澹颍剑Γ颍澹悖澹椋觯澹洌幔簦郏埃?;∥定義接收緩存區;
?。眨蹋希危恰。欤澹睿纾簦瑁剑叮?;∥預接收的數據長(cháng)度;
?。拢酰欤耄洌幔簦幔樱澹睿洌ǎΓ酰螅猓拢酰欤耄洌幔簦?,buffer,length);
∥BulkdataSend為數據接收函數, 函數調用后傳回的數據保存在buffer中。
經(jīng)過(guò)上述步驟即可把數據從DSP保存到后臺PC機內存中。
?。场〗Y語(yǔ)
本文使用USB控制器AN2131Q芯片實(shí)現了對高速信號的數據傳輸, 安裝簡(jiǎn)單, 支持即插即用; 無(wú)需外接電源;并將其應用到基于TMS320C5409的水聲信號采集及混沌特性研究系統通信中,充分驗證了此接口電路的可行性和具體設計的正確性。
本文作者創(chuàng )新點(diǎn): 通用串行總線(xiàn)USB是近年來(lái)一種新興的計算機外圍設備串行通信接口,它具有傳輸可靠、易于擴展、低價(jià)并可熱插撥等特性。本文將EZ-USB 序列芯片AN2131Q用于水聲信號采集及混沌特性研究系統中,實(shí)現DSP與PC機間的通信,并在AN2131Q與DSP間加入兩片IDT72V02,使得數據的傳輸不會(huì )出現堵塞情況,提高了傳輸的速度。
評論