基于USB接口的VSAT基帶數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)
0 引言
在眾多的衛(wèi)星通信系統(tǒng)中,vsat(甚小口徑衛(wèi)星終端)衛(wèi)星通信系統(tǒng)由于具有眾多特點(diǎn),近年來(lái)發(fā)展很快,特別在專(zhuān)業(yè)通信網(wǎng)領(lǐng)域存在廣闊的市場(chǎng),利用此系統(tǒng)進(jìn)行通信具有靈活性強(qiáng)、可靠性高、成本低、使用方便及小站可直接裝在用戶(hù)端等特點(diǎn),并且vsat用戶(hù)數(shù)據(jù)終端可直與計(jì)算機(jī)聯(lián)網(wǎng),完成數(shù)據(jù)傳遞、文件交換、圖像傳輸?shù)韧ㄐ湃蝿?wù),從而擺脫了遠(yuǎn)距離通信地面中繼站的問(wèn)題,因此,此系統(tǒng)廣泛用于石油、銀行、鐵路、民航、軍事等行業(yè)。
在vsat系統(tǒng)中,用戶(hù)終端通常是由數(shù)字衛(wèi)星接收機(jī)和計(jì)算機(jī)終端組成,數(shù)字衛(wèi)星接收機(jī)包括下變頻器、解碼器、fec(前向糾錯(cuò)),解復(fù)用器、數(shù)字基帶處理器和頻率合成器等部分,接收機(jī)輸出的數(shù)據(jù)一般通過(guò)rs-232,rs-422/449以1.2kbit/s-64kbit/s的數(shù)據(jù)率交給計(jì)算機(jī)完成應(yīng)用處理,有些高速衛(wèi)星數(shù)據(jù)接收設(shè)備解調(diào)以后,數(shù)據(jù)通過(guò)額外高速數(shù)據(jù)卡送入計(jì)算機(jī)。這種傳統(tǒng)的數(shù)據(jù)卡不僅安裝麻煩,且易受機(jī)箱內(nèi)環(huán)境的干擾,特別是這種卡通常只能接收單路數(shù)據(jù),受計(jì)算機(jī)插槽數(shù)量和地址,中斷資源的限制,不可能掛接多個(gè)設(shè)備,因此,資源浪費(fèi)尤其嚴(yán)重。
針對(duì)這種情況,本文結(jié)合衛(wèi)星接收設(shè)備數(shù)據(jù)采集的實(shí)際需要,設(shè)計(jì)了一種基于usb(通用串行總線)接口的usat基帶數(shù)據(jù)采集系統(tǒng),該系統(tǒng)通過(guò)對(duì)usb接口控制邏輯的合理設(shè)計(jì)和芯片內(nèi)部fifo的有效運(yùn)用,充分應(yīng)用了cpld(復(fù)雜可編程邏輯器件)的靈活性,僅采用單片usb接口控制芯片就實(shí)現(xiàn)了對(duì)多路多速率數(shù)字信號(hào)的實(shí)時(shí)采集,這與以往采用usb集線器來(lái)實(shí)現(xiàn)對(duì)多路多速率數(shù)字信號(hào)采集的系統(tǒng)相比,具有成本低、實(shí)現(xiàn)方便等優(yōu)點(diǎn)。
該系統(tǒng)最多可同時(shí)采集8路數(shù)字信號(hào),單路最高速率可達(dá)2mbit/s,系統(tǒng)用于控制的cpld采用altera公司的epm7128slc84;usb接口控制芯片采用cypress公司ez-usb
fx2系列cy7c68013。
1 系統(tǒng)原理
1.1 usb簡(jiǎn)介
usb(通用串行總線)是一種應(yīng)用在pc領(lǐng)域的新型接口技術(shù),支持在主機(jī)與各種即插即用外設(shè)之間進(jìn)行數(shù)據(jù)傳輸,它由主機(jī)預(yù)定傳輸數(shù)據(jù)的標(biāo)準(zhǔn)協(xié)議,在總線上的各種設(shè)備分享usb總線帶寬,它的主要優(yōu)點(diǎn)是:數(shù)據(jù)傳輸速率明顯快于一般的串口,支持控制傳輸、中斷傳輸、塊傳輸?shù)暮屯絺鬏?種傳輸方式,以滿(mǎn)足不同外設(shè)的需要,最多可連接127個(gè)外設(shè),支持熱拔插和即插即用,占用的系統(tǒng)資源少(只占用1個(gè)irp(i/o請(qǐng)求包));無(wú)總線競(jìng)爭(zhēng)等。usb總線技術(shù)的提出就是想利用單一的總線技術(shù)來(lái)滿(mǎn)足多種應(yīng)用領(lǐng)域的需要,usb1.1協(xié)議支持低速1.5mbit/s和全速12mbit/s兩種傳輸速度。2000年發(fā)布了usb2.0協(xié)議,它向下兼容usb1.1協(xié)議,但在usb1.1的基礎(chǔ)上有了質(zhì)的提高,其理論傳輸速度可到480mbit/s。
1.2 系統(tǒng)結(jié)構(gòu)
該系統(tǒng)總體框架分采集控制部分、usb接口控制部分和主機(jī)3部分,系統(tǒng)框圖如圖1所示。
外部輸入的8路信號(hào)中時(shí)鐘、數(shù)據(jù)均為ttl電平,采集用的統(tǒng)一時(shí)鐘為3m赫茲,是由usb控制芯片的外部時(shí)鐘經(jīng)八分頻得到的。
系統(tǒng)的工作過(guò)程如下:每路信號(hào)在cpld的控制下,按采集時(shí)鐘的統(tǒng)一節(jié)拍,各路信號(hào)的數(shù)據(jù)和時(shí)鐘都被采集進(jìn)cpld。在cpld內(nèi),先進(jìn)行各路信號(hào)的時(shí)鐘上升沿檢測(cè),如檢測(cè)到時(shí)鐘上升沿,則在相應(yīng)路數(shù)的標(biāo)志位置1,這表明此時(shí)采到的數(shù)據(jù)有效,若沒(méi)檢測(cè)到時(shí)鐘上升沿,則在相應(yīng)路數(shù)地標(biāo)志位置0,表明此時(shí)采集的數(shù)據(jù)無(wú)效,這樣形成的各路信號(hào)數(shù)據(jù),再加上各路信號(hào)數(shù)據(jù)是否有效的標(biāo)志,形成2字節(jié)的數(shù)據(jù)送入usb控制芯片的fifo中,數(shù)據(jù)進(jìn)入usb控制芯片后,通過(guò)usb接口將數(shù)據(jù)傳輸?shù)街鳈C(jī),數(shù)據(jù)在主機(jī)中用軟件進(jìn)行處理,按照各路信號(hào)數(shù)據(jù)是否有效的標(biāo)志位,將有效數(shù)據(jù)取出,組合成各路數(shù)據(jù)。
數(shù)據(jù)送入主機(jī)時(shí)的格式如圖2所示,前一字節(jié)為各路信號(hào)數(shù)據(jù)是否有效的標(biāo)志,緊跟著的字節(jié)為各路信號(hào)的實(shí)際數(shù)據(jù),采用這種特殊的數(shù)據(jù)格式,以區(qū)分各路信號(hào),便于采用統(tǒng)一的時(shí)鐘來(lái)實(shí)現(xiàn)對(duì)多路多速率數(shù)字信號(hào)的實(shí)時(shí)采集,從而減少了很多硬件電路,降低了成本和復(fù)雜性,實(shí)現(xiàn)更為方便,這也是本系統(tǒng)的一個(gè)創(chuàng)新點(diǎn)。
2 硬件構(gòu)成
2.1 ez-usb fx2(cy7c68013)芯片
cy7c68013屬于cypress公司的fx2系列產(chǎn)品,它提供了對(duì)usb2.0的完整解決方案,該芯片雖然采用低價(jià)的8051單片機(jī),但仍然能獲得很高的速度,主要包括usb2.0收發(fā)器、sie(串行接口引擎)、增強(qiáng)型8051處理器、8.5kb的片上ram,4kb
fifo存儲(chǔ)器、i/o口、數(shù)據(jù)總線、地址總線和gpif(通用可編程接口)。
cy7c68013與外設(shè)有可編程接口gpie和從fifo兩種接口方式??删幊探涌趃pif是主機(jī)方式,可以由軟件設(shè)置讀寫(xiě)控制波形,靈活性很大,幾乎可以對(duì)任何8bit/16bit接口的控制器、存儲(chǔ)器和總線進(jìn)行數(shù)據(jù)的主動(dòng)讀寫(xiě),使用非常靈活,從fifo方式是從機(jī)方式,外部控制器可像對(duì)普通fifo一樣對(duì)fx2的多層緩沖fifo進(jìn)行讀寫(xiě)。在本設(shè)計(jì)中為了方便控制,采用從fifo方式。
2.2 cpld芯片epm7128slc84
在本設(shè)計(jì)中,所用的cpld采用altera公司的epm7128slc84。它屬于max7000系列,是altera公司的基于第2代max結(jié)構(gòu)的cpld。它提供多達(dá)5000個(gè)可用門(mén)、128個(gè)宏單元,其引腳到引腳延時(shí)快達(dá)6ns??梢匀菁{各種獨(dú)立的組合邏輯和時(shí)序邏輯功能,epm7128s的優(yōu)點(diǎn)是它基于e2prom,可以通過(guò)jtag口進(jìn)行在線編輯,設(shè)計(jì)者可將設(shè)計(jì)內(nèi)容從pc機(jī)上通過(guò)下載電纜和jtag口對(duì)epm7128s進(jìn)行任意次修改,它有多達(dá)100個(gè)i/o引腳可供編程使用,方便系統(tǒng)擴(kuò)展存儲(chǔ)空間和外設(shè)。
本系統(tǒng)使用epm7128s的主要功能是對(duì)各路信號(hào)的時(shí)鐘上升沿進(jìn)行檢測(cè),另外還需要完成一些控制功能,完成各路信號(hào)數(shù)據(jù)的合路,形成特定的數(shù)據(jù)格式,送入usb控制芯片的fifo中。
2.3 硬件連接
根據(jù)系統(tǒng)對(duì)數(shù)據(jù)傳輸?shù)乃俣群蛯?shí)時(shí)性的要求,配置cy7c6013的工作接口模式為從fifo模式,硬件連接方式如圖3所示。
cpld控制采集外部數(shù)據(jù)的時(shí)鐘可同時(shí)作為cy7c68013的從fifo模式的讀寫(xiě)控制時(shí)鐘,即cy7c68013的接口時(shí)鐘連接到ifclk引腳,flaga-flagd為fifo標(biāo)志引腳,用于映射fifo的當(dāng)前狀態(tài),slwr/slrd是cy7c68013從fifo的寫(xiě)使能/讀允許信號(hào),cpld向cy7c68013從fifo提供從fifo輸出允許信號(hào)sloe,僅在數(shù)據(jù)輸出時(shí)有效,fd[15:0]為16位雙向數(shù)據(jù)總線。fifoadr[1:0]為端點(diǎn)fifo選擇信號(hào)。
3 軟件設(shè)計(jì)
本系統(tǒng)軟件設(shè)計(jì)部分包括固件、驅(qū)動(dòng)程序和應(yīng)用程序的設(shè)計(jì)。
3.1 usb設(shè)備固件程序設(shè)計(jì)
固件程序是指運(yùn)行在設(shè)備cpu中的程序,是整個(gè)程序設(shè)備的核心,可采用匯編語(yǔ)言和c語(yǔ)言設(shè)計(jì),cypress為用戶(hù)提供了一個(gè)固件程序框架,幫助用戶(hù)完成相當(dāng)一部分usb協(xié)議相關(guān)的工作,用戶(hù)只需根據(jù)外設(shè)功能的具體要求,在相應(yīng)的函數(shù)中填寫(xiě)函數(shù)體。cypress提供的這一框架程序簡(jiǎn)化了用戶(hù)的固件程序設(shè)計(jì)。
本系統(tǒng)固件開(kāi)發(fā)所使用的編程語(yǔ)言為德國(guó)keil公司的c51編譯器,集成開(kāi)發(fā)環(huán)境為μvision2,該固件共包含以下5個(gè)文件:
1)ez-usb.lib
是ez usb函數(shù)庫(kù)對(duì)象程序代碼。
2)usbjmptb.obj
定義了fx2中int2和int4的中斷跳轉(zhuǎn)表。
3)dscr.a51
包含描述符的表數(shù)據(jù),包括設(shè)備描述符、設(shè)置描述符、接口描述符、端點(diǎn)描述符和字串描述符等,用來(lái)定義設(shè)備的id號(hào)、端點(diǎn)的設(shè)置特性,主機(jī)就是通過(guò)讀取設(shè)備的描述符來(lái)獲取usb外設(shè)的功能特性,從而給設(shè)備加載相應(yīng)的驅(qū)動(dòng)程序并配置設(shè)備。
4)fw.c
是固件運(yùn)行的主程序文件,負(fù)責(zé)處理主機(jī)發(fā)出的各種usb設(shè)備請(qǐng)求,該程序首先初始化所有的內(nèi)部狀態(tài)變量,然后調(diào)用td_init函數(shù)進(jìn)行初始化,并打開(kāi)中斷。之后,固件程序開(kāi)始列舉usb設(shè)備,直至在端點(diǎn)0上接收到setup令牌包時(shí)為止。一旦接收到stup令牌,其將重復(fù)執(zhí)行下面的任務(wù)分配過(guò)程:調(diào)用用戶(hù)函數(shù)td_poll,以完成用戶(hù)指定的任務(wù);檢測(cè)是否有usb設(shè)備請(qǐng)求(setup令牌)如果有,則執(zhí)行指令并作出相應(yīng)的操作,如果沒(méi)有,則繼續(xù)向下執(zhí)行,檢測(cè)usb核是否有usb掛起實(shí)踐,如果有usb掛起事件,則調(diào)用用戶(hù)程序td_suspend,交由用戶(hù)處理;當(dāng)td_suspend返回為真時(shí),usb核檢測(cè)是否重新開(kāi)始事件,如果沒(méi)有usb掛起事件,則使處理器處于掛起狀態(tài),當(dāng)檢測(cè)有重新開(kāi)始的事件,usb核調(diào)用用戶(hù)程序td_resume,并繼續(xù)執(zhí)行本步驟,當(dāng)td_suspend返回為假時(shí),則繼續(xù)執(zhí)行本步驟。
5)periph.c
包含各種用戶(hù)功能函數(shù)(如td_init、td_poll等)及其int2中斷服務(wù)子程序的定義,它實(shí)現(xiàn)了本系統(tǒng)的主要功能。
在本系統(tǒng)中,把端點(diǎn)2配置為批量傳輸、in方向,封包大小為512字節(jié),每微幀包含2個(gè)封包,數(shù)據(jù)傳輸速率為64mbit/s為就可滿(mǎn)足實(shí)際需要,終端0作為默認(rèn)的控制傳輸管道來(lái)處理usb事件。
3.2 驅(qū)動(dòng)程序設(shè)計(jì)
fx2的設(shè)備驅(qū)動(dòng)程序有兩種:一種用來(lái)在設(shè)備接入時(shí)從主機(jī)下載固件到ram中,稱(chēng)為固件下載驅(qū)動(dòng)程序(ezloader.sys);另一種是在設(shè)備重新列舉后加載的設(shè)備驅(qū)動(dòng)程序(ezusb.sys)。應(yīng)用軟件通過(guò)該設(shè)備驅(qū)動(dòng)程序與fx2通信。
固件的程序代碼既可以通過(guò)外部e2prom下載,也可以通過(guò)主機(jī)下載在本系統(tǒng)中選擇從主機(jī)下載,此時(shí)外接e2prom中存放的是固件下載的pid/vid,且第1個(gè)字節(jié)是0xc0h,系統(tǒng)通過(guò)該pid/vid找到固件下載驅(qū)動(dòng)程序(ezloader.sys)將相應(yīng)的固件代碼下載到fx2的ram中。ezloader.sys的生成是利用cypress公司提供的固件下載驅(qū)動(dòng)程序源代碼和用戶(hù)編譯成功的固件代碼。在win2000
ddk中創(chuàng)建的,并根據(jù)e2prom提供的pid/vid修改相應(yīng)的.inf文件,在將固件下載ram中后,系統(tǒng)清楚內(nèi)存中的固件下載驅(qū)動(dòng)程序,并進(jìn)行重新列舉,讓c8051固件控制fx2,此時(shí),系統(tǒng)獲得由c8051固件提供的pid/vid(與e2prom中的不同),認(rèn)為有新的usb設(shè)備接入,并據(jù)此加載相應(yīng)的設(shè)備驅(qū)動(dòng)程序。
ezusb.sys是本系統(tǒng)運(yùn)行時(shí)所使用的主要驅(qū)動(dòng)程序,它定義了幾個(gè)ioctl代碼,其中:ioctl_ezusb_get_device_descriptor用于讀取usb設(shè)備描述符;ioctl_ezusb_get_configuration_descriptor用于讀取usb設(shè)備的配置信息,ioctl_ezusb_bulk_read用于主機(jī)讀取usb設(shè)備發(fā)出的塊數(shù)據(jù),ioctl_ezusb_get_current_frame_number,用于讀取usb傳輸過(guò)程中當(dāng)前的幀序號(hào)。
3.3 用戶(hù)程序設(shè)計(jì)
應(yīng)用程序開(kāi)發(fā)中,可用vc++編制應(yīng)用程序。所有的用戶(hù)程序是通過(guò)i/o控制調(diào)用來(lái)訪問(wèn)ez-usb的設(shè)備驅(qū)動(dòng)程序的,可以把ez-usb設(shè)備當(dāng)成文件來(lái)操作,利用createfile得到ez-usb句柄,通過(guò)得到的句柄,用一個(gè)win32函數(shù)deviceiocontrol(),把ioctl和相關(guān)的輸入輸出緩沖區(qū)提交給驅(qū)動(dòng)程序,來(lái)進(jìn)行控制傳輸,用readfile,writefile進(jìn)行批量傳輸。當(dāng)應(yīng)用軟件退出時(shí),用closehandle()關(guān)閉設(shè)備。
4 結(jié)束語(yǔ)
本文結(jié)合實(shí)際工程的需要,提出了基于usb接口的vsat基帶數(shù)據(jù)采集的設(shè)計(jì)方案,并給出了硬件系統(tǒng)及軟件設(shè)計(jì)方法,在usat通信的實(shí)際應(yīng)用中,該系統(tǒng)與后端軟件結(jié)合,很容易實(shí)現(xiàn)對(duì)vsat數(shù)據(jù)的分析與處理,可廣泛應(yīng)用于vsat通信系統(tǒng)中。
評(píng)論