<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 具有USB2.0接口的高速數(shù)據(jù)采集卡設(shè)計(jì)

          具有USB2.0接口的高速數(shù)據(jù)采集卡設(shè)計(jì)

          作者: 時(shí)間:2004-12-07 來(lái)源:網(wǎng)絡(luò) 收藏
          摘要:討論基于采集卡的設(shè)計(jì)與實(shí)現(xiàn)。詳細(xì)講述數(shù)據(jù)采集卡的硬件部分設(shè)計(jì),并簡(jiǎn)要介紹固件程序、驅(qū)動(dòng)程序和應(yīng)用軟件的設(shè)計(jì)。

          關(guān)鍵詞:2.0 FPFO FPGA 固件程序 主從系統(tǒng)

          引言

          數(shù)據(jù)采集在現(xiàn)代工業(yè)生產(chǎn)及科學(xué)研究中的重要地位日益突出,并且實(shí)時(shí)采集的要求也不斷提高。在信號(hào)測(cè)量、圖像處理、音頻信號(hào)處理等一些高速、高精度的測(cè)量中,都需要進(jìn)行采集?,F(xiàn)在通用的高速數(shù)據(jù)采集卡一般多是PCI卡或ISA卡,這些采集卡存在很多缺點(diǎn),比如安裝麻煩,價(jià)格昂貴,尤其是受計(jì)算機(jī)插槽數(shù)量、地址、中斷資源的限制,可擴(kuò)展性差。

          通用串行總線是用來(lái)連接外圍設(shè)備與計(jì)算機(jī)之間的新式標(biāo)準(zhǔn)總線。它是一種快速、雙向、同步傳輸、廉價(jià)的并可以實(shí)現(xiàn)熱拔插的串行。USB技術(shù)是為實(shí)現(xiàn)計(jì)算機(jī)和通信集成而提出的一種用于擴(kuò)充PC體系結(jié)構(gòu)的工業(yè)標(biāo)準(zhǔn)?;赨SB接口的高速數(shù)據(jù)采集卡,充分利用了USB總線的優(yōu)點(diǎn),它也必將被越來(lái)越多的用戶所接受。

          1 USB數(shù)據(jù)采集卡原理

          1.1 USB簡(jiǎn)介

          USB是英文Universal Serial Bus的縮寫,中文含義是“通用串行總線”。它支持在主機(jī)與各式各樣即插即用的外設(shè)之間進(jìn)行數(shù)據(jù)傳輸。它由主機(jī)預(yù)定傳輸數(shù)據(jù)的標(biāo)準(zhǔn)協(xié)議,在總線上的各種設(shè)備分享USB總線帶寬。當(dāng)總線上的外設(shè)和主機(jī)在運(yùn)行時(shí),允許自由添加、設(shè)置、使用以及拆除一個(gè)或多個(gè)外設(shè)。USB總線技術(shù)的提出就是想利用單一的總線技術(shù),來(lái)滿足多種應(yīng)用領(lǐng)域的需要。USB1.1協(xié)議支持兩種傳輸速度,即低速1.5Mbps和高速12Mbps。為了在高速接口之爭(zhēng)中占有一席之地,2000年發(fā)布了USB2.0協(xié)議,它向下兼容USB1.1協(xié)議,數(shù)據(jù)的最高傳輸速率提高到480Mbps,這就使USB對(duì)打印機(jī)和其它需要快速傳遞大容量數(shù)據(jù)的外設(shè)更具吸引力。

          為了滿足實(shí)際數(shù)據(jù)采集USB傳輸速度較高的需要,選擇了Cypress公司的內(nèi)置USB接口微控制器芯片EZUSB FX2系列,開發(fā)了具有USB接口的高速數(shù)據(jù)采集卡。

          1.2 系統(tǒng)框圖

          USB系統(tǒng)是一個(gè)主從系統(tǒng),而非對(duì)等(peer-to-peer)系統(tǒng)。在主從系統(tǒng)中,命令是由主設(shè)備發(fā)出,而從設(shè)備只能接收命令,只有在主設(shè)備讀取數(shù)據(jù)時(shí),從設(shè)備才能提交數(shù)據(jù)。如圖1所示,在USB控制器與外圍電路之間需要一個(gè)FIFO,來(lái)充當(dāng)數(shù)據(jù)的緩存區(qū)。那么,在USB從設(shè)備向主設(shè)備發(fā)送數(shù)據(jù)時(shí)存在一個(gè)問題:FIFO多大才能滿足要求。為了滿足數(shù)據(jù)采集中高速實(shí)時(shí)流數(shù)據(jù)垢應(yīng)用,避免FIFO溢出,在我們的系統(tǒng)中,通過FPGA及SDRAM構(gòu)造一個(gè)容量的FIFO(圖1虛線框內(nèi)所示),可以提供一個(gè)低成本并能滿足高速實(shí)時(shí)流數(shù)據(jù)傳輸?shù)慕鉀Q方案。

          圖2

          2 USB數(shù)據(jù)采集卡硬件

          2.1 EZ-USB FX2(CY7C68013)芯片

          Cypress公司的EZ-USB FX2系列芯片是最早符合USB2.0協(xié)議的微控制器之一,它集成了符合USB2.0協(xié)議的收發(fā)器(transceiver),串行接口引擎(SIE),增強(qiáng)型的8051內(nèi)核以及可編程的外圍接口。FX2系列芯片獨(dú)特的結(jié)構(gòu)使得數(shù)據(jù)傳輸速度最高可達(dá)56Mbps,最大限度地滿足了USB2.0的帶寬。

          EZ-USB FX2的微處理器是一個(gè)增強(qiáng)型的8051內(nèi)核,性能可達(dá)標(biāo)準(zhǔn)8051的5~10倍,并與標(biāo)準(zhǔn)8051的指令完全兼容。增強(qiáng)型的8051內(nèi)核使用RAM世馘 作程序指令和數(shù)據(jù)存儲(chǔ)器,從而使得EZ-USB FX2具有“軟”特性,也就是說,可以通過自行編寫程序指令來(lái)實(shí)現(xiàn)所需的功能。EZ-USB FZ2使用增強(qiáng)型SIE/USB接口(稱為USB核),通過執(zhí)行USB部本身的協(xié)議來(lái)簡(jiǎn)化8051代碼編寫的工作。這樣采用硬件完成USB塄,簡(jiǎn)化了固件代碼的編制。對(duì)于固件代碼的使用,主機(jī)通過軟件下載的方法實(shí)現(xiàn)。這種方法充分利用FZ2內(nèi)部的8KB RAM來(lái)裝載8051代碼和數(shù)據(jù)。由于EZ-USB FZ2具有重新枚舉的能力,所以在初始化枚舉時(shí),用戶并不需要斷天設(shè)備就可以裝載新的描述符。設(shè)備描述符和8051程序代碼都能通過主機(jī)中的磁盤文件下載,只有制造商號(hào)、產(chǎn)品號(hào)和設(shè)備號(hào)從啟動(dòng)時(shí)從一個(gè)16字節(jié)的EEPROM下載到硬件中的。通過這種方式,可以比較容易地從主機(jī)升級(jí)軟件和修改USB總線設(shè)備的固件代碼。

          EZ-USB FX2的通用可編程接口GPIF以及Master/Slave端點(diǎn)FIFO所對(duì)應(yīng)的8/16位數(shù)據(jù)總線,可以很容易地實(shí)現(xiàn)FX2與當(dāng)前一些主流通過接口(如ATA、UTOPIA、EPP、PCMCIA和大部分DSP處理器)的互連。它共有7個(gè)端點(diǎn),端點(diǎn)0,端點(diǎn)1和IN和OUT,還有端點(diǎn)2、4、6和8。其中,前3個(gè)端點(diǎn)的大小是固定的64字節(jié),后4個(gè)端點(diǎn)默認(rèn)大小是2級(jí)512字節(jié)的FIFO,端點(diǎn)2和端點(diǎn)4默認(rèn)是OUT端點(diǎn),端點(diǎn)6和端點(diǎn)8默認(rèn)是IN端點(diǎn),而端點(diǎn)2和6分別可以定義為2級(jí)、3級(jí)或4級(jí)的存儲(chǔ)器,每級(jí)的大小也可以是512字節(jié)或1024字節(jié)。從EZ-USB FX2方向來(lái)看,一個(gè)端點(diǎn)相當(dāng)于通過總線收發(fā)數(shù)據(jù)的緩沖區(qū),EZ-USB FX2從OUT緩沖區(qū)中讀取端點(diǎn)數(shù)據(jù),將通過USB傳的端點(diǎn)數(shù)據(jù)寫入IN緩沖區(qū)。它求全責(zé)備速(12 Mbps)和高速(480 Mbps)傳輸速率,并具有USB協(xié)議所規(guī)定的4種傳輸方式,即控制方式(control mode)、中斷傳輸方式(interrupt mode)、批量傳輸方式(bulk mode)和等時(shí)傳輸方式(isochronous mode)。

          EZ-USB FX2系列是基于RAM的“軟”結(jié)構(gòu),在開發(fā)過程中允許無(wú)限制設(shè)置和升級(jí);它支持全速USB總線吞吐量的傳輸,使用EZ-USB FX2進(jìn)行設(shè)計(jì),可以不受端點(diǎn)數(shù)、緩沖區(qū)大小和傳輸速度的限制;此外,其內(nèi)核中做了大量的輔助指令,簡(jiǎn)化了編碼,同時(shí)也加快了對(duì)USB特性的了解。基于以上EZ-USB FX2系列芯片的特性,在開發(fā)的過程中,采用了EZ-USB FX2系列中的CY7C68013芯片(128引腳),其簡(jiǎn)化結(jié)構(gòu)如圖2所示。

          FX2可配置成三種不同的接口模式Ports、GPIF Master和Slave FIFO,本項(xiàng)目采用Slave FIFO模式。在該模式下,外部邏輯或外部處理器直接連接到FX2的端點(diǎn)FIFO,GPIF沒有被激活,因?yàn)橥獠窟壿嬁梢灾苯涌刂艶IFO,所以FIFO的基本控制信號(hào)(標(biāo)志、片選、使能)由FX2的引腳引出。外部控制可以是同步或異步,可以使用內(nèi)部時(shí)鐘,也可以向FX2的接口提供外部時(shí)鐘。

          2.2 FPGA芯片EP1C6-Q240

          在本設(shè)計(jì)中,所用的FPGA采用Altera公司最新的CYCLONE芯片EP1C6-Q240。它是一款高速價(jià)比的FPCA芯片,工作電壓為1.5V,采用0.13μm工藝技術(shù),全銅SRAM工藝,其存儲(chǔ)器密度可達(dá)5980個(gè)邏輯單元,包含20個(gè)12836位的RAM塊,總的RAM空間達(dá)到92160位,內(nèi)嵌了2個(gè)鎖相環(huán)電路和一個(gè)用于連接SDRAM的特定雙數(shù)據(jù)率(deficated data rate)接口。此外,該芯片還支持多種不同的I/O標(biāo)準(zhǔn)(包括PCI接口,可連接ASSP和ASIC設(shè)備的接口以及串行設(shè)備接口等)。

          這里FPGA的作用除了與SDRAM構(gòu)成一個(gè)大容量的FIFO以外,還需要完成一些控制功能。對(duì)于本文的應(yīng)用,需要完成HDB3碼到NRZ碼的轉(zhuǎn)換及數(shù)據(jù)的串并轉(zhuǎn)換等。具體問題要具體分析,用戶可根據(jù)自己的需求對(duì)FPGA進(jìn)行編程。

          2.3 A/D轉(zhuǎn)換芯片MAX1180

          MAX1180是Maxim公司的雙通道105Msps、3.3V工作電壓、低功耗的高速A/D芯片,采樣數(shù)據(jù)10位電平量化。它是采用差分輸入,帶有寬帶跟蹤/保持(track-and-hold)的雙通道9級(jí)流水線型結(jié)構(gòu)的ADCs,如圖3所示。實(shí)際的芯片包括兩個(gè)圖示的電路,作為輸入的兩路通道,互不干擾。各路采樣信號(hào)每半個(gè)時(shí)鐘周期通過一個(gè)STAGE,完成連續(xù)轉(zhuǎn)換到數(shù)據(jù)輸出共需5個(gè)時(shí)鐘周期。每個(gè)流水線首先通過一個(gè)1.5位的快閃ADC對(duì)輸入電碼量化,然后再由DAC產(chǎn)生一個(gè)對(duì)應(yīng)于量化結(jié)果的電壓并與輸入電壓作差,輸出電壓放大2倍后送到下一級(jí)流水線處理。A/D-D/A兩次變化以及差分處理的目的在于進(jìn)行差錯(cuò)校正,以保證在流水線上的各個(gè)階段,ADC的偏移量得到補(bǔ)償并且無(wú)代碼丟失。

          2.4 硬件連接

          根據(jù)系統(tǒng)對(duì)數(shù)據(jù)傳輸?shù)乃俣群蛯?shí)時(shí)性的要求,配置CY7C68013工作的接口模式為Slave FIFO模式。當(dāng)進(jìn)行數(shù)據(jù)采集時(shí),硬件連接方式如圖4所示。

          A/D轉(zhuǎn)換器的采樣時(shí)鐘同時(shí)作為CY7C68013的Slave FIFO模式的讀寫控制時(shí)鐘,即CY7C68013的接口時(shí)鐘連接到IFCLK引腳。SCWR/SLRD是CY7C68013 Slave FIFO的寫使能/讀允許信號(hào)。FPGA向C7C68013 Slave FIFO提供Slave FIFO輸出允許信號(hào)SLOE,僅在數(shù)據(jù)輸出時(shí)有效。FD[15:0]為16位雙向數(shù)據(jù)總線。FIFOADR1:0》為端點(diǎn)FIFO選擇信號(hào)。在數(shù)據(jù)輸入時(shí)固定為00,選擇的是端點(diǎn)2;在數(shù)據(jù)輸出時(shí)固定為10,選擇的是端點(diǎn)6。

          3 USB數(shù)據(jù)采集卡軟件

          軟件設(shè)計(jì)是一個(gè)USB設(shè)備開發(fā)的必備環(huán)節(jié)。USB應(yīng)用系統(tǒng)軟件設(shè)計(jì)分為三部分:初始化軟件、主機(jī)操作系統(tǒng)上的客戶驅(qū)動(dòng)程序以及主機(jī)應(yīng)用程序。初始化軟件是下載到控制器中的固件代碼,它響應(yīng)各種來(lái)自系統(tǒng)的USB標(biāo)準(zhǔn)請(qǐng)求(包括USB設(shè)備的枚舉、驅(qū)動(dòng)程序的選擇加載等),完成連接設(shè)備和主機(jī)的任務(wù)。主機(jī)應(yīng)用軟件通過客戶驅(qū)動(dòng)程序與系統(tǒng)USBI(USB Device Interface)進(jìn)行通信,其主要任務(wù)是將采集進(jìn)來(lái)的數(shù)據(jù)流,根據(jù)所需處理功能的要求來(lái)完成各種基于Windows程序的處理。

          3.1 EZ-USB FX2的初始化

          通過固件程序的調(diào)度,主機(jī)才能得到設(shè)備的描述符以及完成端點(diǎn)數(shù)據(jù)的傳輸。對(duì)于固件程序的編程,其基本結(jié)構(gòu)如下:

          ①初始化,包括處理器和外圍電路的初始化;

          ②主函數(shù),包括完成符合設(shè)備特定要求的代碼;

          ③中斷處理,包括處理各種中斷的程序代碼。

          總的來(lái)說,固件程序的編寫有兩種方式。其一,對(duì)于熟悉8051匯編語(yǔ)言的用戶來(lái)說,可以直接利用匯編語(yǔ)言編寫結(jié)構(gòu)緊湊、高效率的固件代碼;其二,EZ-USB以利用現(xiàn)成的固件程序框架函數(shù),根據(jù)設(shè)備的需求添加相慶的用戶,來(lái)完成特定的目的。

          為了加快USB接口的開發(fā)過程,利用EZ-USB FX2提供的一些框架函數(shù)來(lái)簡(jiǎn)化用戶代碼,使用相應(yīng)端口(端口2輸入,端口6輸出)利用EZ-USB FX2的Slave FIFO結(jié)構(gòu)采用此處理傳輸,基本的固件程序框架函數(shù)如下:

          void TD_Init(void) //該函數(shù)用來(lái)完成EZ-USB FX2的初始化

          { CPUCS=0x10; //工作頻率48MHz

          IFCONFIG=0xC3; //決定FX2的工作模式(slave FIFO)及相關(guān)設(shè)置

          IN07VAL=bmEP2;

          OUT07VAL=bmEP6;//使能端點(diǎn)2輸入和端點(diǎn)6輸出

          EP2FIFOCFG=0x6D;//AUTOOUT=0,AUTOIN=1,WORDWIDE=1

          SYNCODELAY;

          EP6FIFOCFG=0x75;//AUTOOUT=1,AUTOIN=0,WORDWIDE=1

          SYNCDELAY; //對(duì)端點(diǎn)2和端點(diǎn)6的配置,WORDWIDE=1配置的是使用16位數(shù)據(jù)線。

          EP2CFG=0xEA; //端點(diǎn)2:輸入、批量傳輸、最大包字節(jié)為1024,雙緩沖

          SYNCDELAY;

          EP6CFG=0xAA; //端點(diǎn)6:輸出、批量傳輸、最大包字節(jié)為1024、雙緩沖

          SYNCDELAY;

          }

          void TD_Poll(void) //此函數(shù)在設(shè)備運(yùn)行時(shí)反復(fù)被調(diào)用,它包括完成用戶任務(wù)的函數(shù)

          {

          }

          BOOL TD_Suspend(void) //該函數(shù)在設(shè)備進(jìn)行掛起狀態(tài)前調(diào)用

          {

          return(TRUE);

          }

          BOOL TD_Resume(void)//設(shè)備重啟后調(diào)用

          {

          return(TRUE);

          }

          在整個(gè)固件程序中,EZ-USB FX2設(shè)備上電或復(fù)位后,首先對(duì)所有的內(nèi)部狀態(tài)變量初始化,隨后調(diào)用TD_Init()函數(shù),并開中斷,此時(shí)固件程序不斷檢測(cè)控制端口0是否收到SETUP包。一旦收到,固件程序就開始調(diào)用用戶函數(shù)TD_Poll(),其中用戶需要完成的功能代碼就在TD_Poll()函數(shù)一。調(diào)用完成后,重復(fù)檢測(cè)端口0是否收到SETUP包,若有,繼續(xù)執(zhí)行設(shè)備請(qǐng)求,調(diào)用TD_Poll()函數(shù);否則,檢測(cè)USB核是否有USB掛起事件,若有,調(diào)用TD_Suspend()函數(shù),其返為真時(shí),檢測(cè)USB核是否有重新開始事件,沒有時(shí),設(shè)備進(jìn)入掛起狀態(tài),反之,調(diào)用TD_Resume(),進(jìn)行下一次循環(huán);當(dāng)TD_Suspend()函數(shù)返回為假時(shí),直接轉(zhuǎn)入下次循環(huán)。

          此外,固件程序框架中還定義了許多中斷處理函數(shù),當(dāng)用到時(shí)可以在相應(yīng)的九加入自己編寫的代碼,這樣既清晰又便于理解,用戶就可以在不用改變整個(gè)程序的前提下,僅僅通過改變相應(yīng)的模塊,來(lái)實(shí)現(xiàn)自己的功能。

          3.2 主機(jī)軟件部分

          主機(jī)軟件部分包括USB客戶驅(qū)動(dòng)程序主和機(jī)應(yīng)用程序。USB客戶驅(qū)程序是支持即插即用功能的標(biāo)準(zhǔn)WDM驅(qū)動(dòng)程序,它為實(shí)現(xiàn)控制傳輸、中斷傳輸和批傳輸提供了標(biāo)準(zhǔn)接口函數(shù)。而主機(jī)應(yīng)用程序的作用在于與操作系統(tǒng)相互作用,當(dāng)操作系統(tǒng)認(rèn)為有新設(shè)備接入時(shí),就會(huì)自動(dòng)調(diào)用相應(yīng)的設(shè)備驅(qū)支以。加之該軟件需要一個(gè)圖形用戶界面來(lái)控制所用的函數(shù),這里采用VC++來(lái)編制應(yīng)用程序,利用CreateFile得到USB句柄,用DeviceIoControl來(lái)向設(shè)備驅(qū)動(dòng)程序發(fā)送請(qǐng)求,完成在EZ-USB FX2中的數(shù)據(jù)批傳輸?shù)淖x取與寫入。程序?qū)嵗缦拢?/P>

          HANDLE DeviceHandle;

          DeviceHandle=CreateFile(.ezusb0,GENERIC_WRITE,

          FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);

          //得到設(shè)備ezusb0的句柄

          DeviceIoControl (DeviceHandle,

          IOCTL_EZUSB_BULK_WRITE,

          LPVOID lpInBuffer,//;輸入數(shù)據(jù)存儲(chǔ)地址指針

          Sizeof(BULK_TRANSFER_CONTROL),

          LPVOID lpOutBuffer,//輸出數(shù)據(jù)存儲(chǔ)地址指針

          DWORD nOutBufferSize,//輸出緩存大小

          LPDWORD lpBytesReturned,//接收輸出數(shù)據(jù)字節(jié)計(jì)數(shù)器變量的指針

          NULL);

          //寫數(shù)據(jù)到EZ-USB FX2設(shè)備

          DeviceIoControl(DeviceHandle,IOCTL_EZUSB_BULK_READ,

          LPVOID lpInBuffer,//輸入數(shù)據(jù)存儲(chǔ)地址地

          Sizeof(BULK_TRANSFER_CONTROL),

          LPVOID lpOutBuffer,//輸出數(shù)據(jù)存儲(chǔ)地址批晚霞

          DWORD nOutBufferSize,//輸出緩存大小

          LPDWORD lpBytesReturned,//接收輸出數(shù)據(jù)字節(jié)計(jì)數(shù)器變量的指針

          NULL);

          //從EZ-USBFX2設(shè)備中讀數(shù)據(jù)

          ColseHandle(DeviceHandle); //關(guān)閉USB句柄

          結(jié)語(yǔ)

          本項(xiàng)目的目的是將信號(hào)處理電路中輸出的信號(hào)(I、Q兩路),通過模數(shù)轉(zhuǎn)換,在滿足10Mbps傳輸速率的基礎(chǔ)上,通過USB接口完成數(shù)據(jù)寫入硬盤的工作。事實(shí)證明,基于USB2.0接口的高速數(shù)據(jù)采集卡完全滿足設(shè)計(jì)要求??梢灶A(yù)見,基于USB2.0接口的高速數(shù)據(jù)采集卡一定會(huì)有廣闊的應(yīng)用空間。



          關(guān)鍵詞: USB 接口 高速數(shù)據(jù)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();