<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

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

具有USB2.0接口的高速數據采集卡設計

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

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

引言

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

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

1 USB數據采集卡原理

1.1 USB簡(jiǎn)介

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

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

1.2 系統框圖

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

圖2

2 USB數據采集卡硬件

2.1 EZ-USB FX2(CY7C68013)芯片

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

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

EZ-USB FX2的通用可編程接口GPIF以及Master/Slave端點(diǎn)FIFO所對應的8/16位數據總線(xiàn),可以很容易地實(shí)現FX2與當前一些主流通過(guò)接口(如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字節,后4個(gè)端點(diǎn)默認大小是2級512字節的FIFO,端點(diǎn)2和端點(diǎn)4默認是OUT端點(diǎn),端點(diǎn)6和端點(diǎn)8默認是IN端點(diǎn),而端點(diǎn)2和6分別可以定義為2級、3級或4級的存儲器,每級的大小也可以是512字節或1024字節。從EZ-USB FX2方向來(lái)看,一個(gè)端點(diǎn)相當于通過(guò)總線(xiàn)收發(fā)數據的緩沖區,EZ-USB FX2從OUT緩沖區中讀取端點(diǎn)數據,將通過(guò)USB傳的端點(diǎn)數據寫(xiě)入IN緩沖區。它求全責備速(12 Mbps)和高速(480 Mbps)傳輸速率,并具有USB協(xié)議所規定的4種傳輸方式,即控制方式(control mode)、中斷傳輸方式(interrupt mode)、批量傳輸方式(bulk mode)和等時(shí)傳輸方式(isochronous mode)。

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

FX2可配置成三種不同的接口模式Ports、GPIF Master和Slave FIFO,本項目采用Slave FIFO模式。在該模式下,外部邏輯或外部處理器直接連接到FX2的端點(diǎn)FIFO,GPIF沒(méi)有被激活,因為外部邏輯可以直接控制FIFO,所以FIFO的基本控制信號(標志、片選、使能)由FX2的引腳引出。外部控制可以是同步或異步,可以使用內部時(shí)鐘,也可以向FX2的接口提供外部時(shí)鐘。

2.2 FPGA芯片EP1C6-Q240

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

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

2.3 A/D轉換芯片MAX1180

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

2.4 硬件連接

根據系統對數據傳輸的速度和實(shí)時(shí)性的要求,配置CY7C68013工作的接口模式為Slave FIFO模式。當進(jìn)行數據采集時(shí),硬件連接方式如圖4所示。

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

3 USB數據采集卡軟件

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

3.1 EZ-USB FX2的初始化

通過(guò)固件程序的調度,主機才能得到設備的描述符以及完成端點(diǎn)數據的傳輸。對于固件程序的編程,其基本結構如下:

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

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

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

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

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

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

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

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

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; //對端點(diǎn)2和端點(diǎn)6的配置,WORDWIDE=1配置的是使用16位數據線(xiàn)。

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

SYNCDELAY;

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

SYNCDELAY;

}

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

{

}

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

{

return(TRUE);

}

BOOL TD_Resume(void)//設備重啟后調用

{

return(TRUE);

}

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

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

3.2 主機軟件部分

主機軟件部分包括USB客戶(hù)驅動(dòng)程序主和機應用程序。USB客戶(hù)驅程序是支持即插即用功能的標準WDM驅動(dòng)程序,它為實(shí)現控制傳輸、中斷傳輸和批傳輸提供了標準接口函數。而主機應用程序的作用在于與操作系統相互作用,當操作系統認為有新設備接入時(shí),就會(huì )自動(dòng)調用相應的設備驅支以。加之該軟件需要一個(gè)圖形用戶(hù)界面來(lái)控制所用的函數,這里采用VC++來(lái)編制應用程序,利用CreateFile得到USB句柄,用DeviceIoControl來(lái)向設備驅動(dòng)程序發(fā)送請求,完成在EZ-USB FX2中的數據批傳輸的讀取與寫(xiě)入。程序實(shí)例如下:

HANDLE DeviceHandle;

DeviceHandle=CreateFile(.ezusb0,GENERIC_WRITE,

FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);

//得到設備ezusb0的句柄

DeviceIoControl (DeviceHandle,

IOCTL_EZUSB_BULK_WRITE,

LPVOID lpInBuffer,//;輸入數據存儲地址指針

Sizeof(BULK_TRANSFER_CONTROL),

LPVOID lpOutBuffer,//輸出數據存儲地址指針

DWORD nOutBufferSize,//輸出緩存大小

LPDWORD lpBytesReturned,//接收輸出數據字節計數器變量的指針

NULL);

//寫(xiě)數據到EZ-USB FX2設備

DeviceIoControl(DeviceHandle,IOCTL_EZUSB_BULK_READ,

LPVOID lpInBuffer,//輸入數據存儲地址地

Sizeof(BULK_TRANSFER_CONTROL),

LPVOID lpOutBuffer,//輸出數據存儲地址批晚霞

DWORD nOutBufferSize,//輸出緩存大小

LPDWORD lpBytesReturned,//接收輸出數據字節計數器變量的指針

NULL);

//從EZ-USBFX2設備中讀數據

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

結語(yǔ)

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



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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>