基于ISP1581的USB數據采集系統的實(shí)現

發(fā)布時(shí)間:2011-1-29 19:59    發(fā)布者:conniede
關(guān)鍵詞: FPGA , ISP1581 , USB
數據采集廣泛應用于信號檢測、信號處理、儀器儀表等領(lǐng)域。目前,有各種數據采集卡或采集系統可供選擇,但由于數據源以及用戶(hù)需求的多樣性,有時(shí)并不能滿(mǎn)足要求。特別是在某些應用中,需要同時(shí)高速采集多個(gè)通道的數據,而且為了分析比較各通道信號間的相互關(guān)系,常常要求所有通道的采集必須同步。目前常用的數據采集卡是具有ISA總線(xiàn)、PCI總線(xiàn)等接口形式的A/D采集卡,雖然數據傳輸率很高,但是還存在整個(gè)系統笨重,缺乏靈活性,不能實(shí)現即插即用,不適合小型、便攜設備應用等缺點(diǎn)。通用串行總線(xiàn)(USB)是為了解決日益增加的PC機外設與有限的主板插槽和端口之間的矛盾而制定的一種串行通信標準。USB的出現很好地解決了以上問(wèn)題。USB不僅具有快速的傳輸性能,而且USB協(xié)議本身具有其糾錯能力,它的即插即用模式和易擴展性能都具有很強的發(fā)展前途和應用價(jià)值。根據項目實(shí)際需求,本文設計了一種基于ISP1581的高速USB多通道數據采集系統,系統最高采樣率每通道可達500 K字,并且具有增益控制調節、外觸發(fā)同步采集等功能,目前該系統已成功地應用于某水下定位系統。

1 系統硬件組成

如圖1所示,系統由信號調理電路模塊、A/D采集模塊、USB數據傳輸模塊三個(gè)部分組成。


1.1 信號調理電路模塊

由于從傳感器進(jìn)來(lái)的信號一般都比較小(大約在微伏量級),A/D無(wú)法直接對這些信號進(jìn)行采集,需要通過(guò)信號調理電路模塊對其進(jìn)行放大,以滿(mǎn)足A/D采集的量程范圍。另外,由于信號容易受到外界噪聲以及電噪聲的干擾,通過(guò)信號調理電路所具有的濾波功能,可以濾除信號頻帶外的噪聲。

1.2 A/D采集模塊

A/D采集模塊由1片FPGA和2片A/D組成,完成4路信號的模/數轉換。模數轉換器選擇的是AD7655芯片。AD7655是一款高速、低功耗4通道16位模數轉換器,采用5 V單電源供電,模擬輸入信號范圍為0 V~5 V;高輸入阻抗,可對4路模擬輸入同時(shí)高速采樣并進(jìn)行數字化轉換,采樣速率最高可達1 MS/s,支持并行或串行接口。由于本采集系統要求對各路信號的相位嚴格一致,而AD7655只能同時(shí)對4個(gè)通道中的2路信號同時(shí)進(jìn)行采樣,因此,1片A/D僅連接了2路模擬信號。另外,為了保證所有通道信號的相位一致性,2片A/D需要使用同一個(gè)轉換信號來(lái)控制轉換的進(jìn)行,故在電路連接時(shí),把每個(gè)A/D芯片的轉換信號(CNVST)管腳連接在一起,然后連接到FPGA上的轉換信號輸出管腳上,由FPGA輸出的轉換信號驅動(dòng)。FPGA與A/D之間的數據讀取采用總線(xiàn)的方式,將每一片A/D的讀控制信號都獨立連接到FPGA上,由FPGA控制各路采樣數據的讀取。采集電路連接如圖2所示。


1.3 USB數據傳輸模塊

USB數據傳輸模塊是本系統的核心。要開(kāi)發(fā)USB功能設備,首先需要對設計產(chǎn)品的功能進(jìn)行全面了解,包括數據傳輸速率、傳輸類(lèi)型、所需要的硬件資源等。在充分了解設計的產(chǎn)品后,要選擇合適的USB接口芯片,如果選擇得好,可以大大節省開(kāi)發(fā)時(shí)間和費用。

USB接口芯片是一種集成了USB協(xié)議的微處理器,能自動(dòng)對各種USB事件作出響應,以處理USB總線(xiàn)上的數據傳輸。所有的主機和設備上都至少含有1塊實(shí)現其功能的USB接口芯片。按照不同的標準,USB接口芯片有如下幾種分類(lèi)方式,以功能分類(lèi)則可以分為:主控制器芯片、集線(xiàn)器芯片、功能設備芯片;以使用方式進(jìn)行分類(lèi)則可以分為:帶USB接口的專(zhuān)用MCU、帶USB接口的通用MCU、純粹的USB接口芯片。

本設計中選用了Philips公司的USB2.0接口芯片ISP1581,該芯片屬于純粹的USB接口芯片。這類(lèi)USB接口芯片價(jià)格較低,接口方便,靈活性高,針對不同的硬件環(huán)境可以配合多種MCU使用,如單片機、DSP、FPGA[3-4]。ISP1581支持2種工作模式:通用處理器模式和斷開(kāi)總線(xiàn)模式。本設計中采用DSP來(lái)控制ISP1581,連接方式選用通用處理器模式,原理圖如圖3所示。


2 USB接口軟件開(kāi)發(fā)

軟件分為USB固件程序開(kāi)發(fā)和USB設備驅動(dòng)程序開(kāi)發(fā)兩大部分。

2.1 USB固件程序開(kāi)發(fā)

所有基于微處理器及其外圍電路的功能設備的正常工作都離不開(kāi)固件的參與,固件的作用就是輔助硬件,即控制硬件來(lái)完成預期的功能,如沒(méi)有固件的參與和控制,硬件設備只是芯片簡(jiǎn)單的堆砌,無(wú)法實(shí)現預期的功能,如同一臺沒(méi)有安裝操作系統的計算機,無(wú)法正常工作。因此,用戶(hù)必須編寫(xiě)固件程序來(lái)輔助硬件完成USB通信任務(wù)。具體如下:

(1)初始化。主要是設置一些特殊寄存器的初值,以實(shí)現所需的設備屬性或功能,例如開(kāi)中斷、使能端點(diǎn)、配置端口等。

(2)輔助硬件完成設備的重新枚舉(ReNumeration)過(guò)程。包括模擬設備的斷開(kāi)與重新連接,對收到的設置包進(jìn)行分析判斷,從而對主設備請求做出適當的響應,完成對設備的配置任務(wù)。

(3)對中斷的處理。

(4)數據的接收和發(fā)送。

(5)外圍電路的控制。

固件程序設計成中斷驅動(dòng)模式,采用模塊化設計,其總體結構如圖4所示。


各模塊的主要功能如下:

(1)主程序:完成DSP及USB接口芯片的初始化、數據發(fā)送/接收標志位的判斷及中斷請求等待。

(2)中斷服務(wù)程序:中斷服務(wù)程序是整個(gè)固件程序設計的重點(diǎn)。首先通過(guò)讀取ISP1581中斷寄存器的值判斷所發(fā)生中斷的類(lèi)型,然后根據具體的中斷類(lèi)型進(jìn)入相應的處理子程序或設置相應的標志位。中斷服務(wù)程序中需要處理的有總線(xiàn)復位中斷、高速狀態(tài)變化中斷、SETUP中斷及端點(diǎn)的IN/OUT中斷。在所有的中斷處理程序中,EP0SETUP中斷處理是最重要的,它是USB設備與PC機間建立通信鏈路的基礎。

(3)請求處理程序:USB標準請求處理程序負責處理枚舉階段主機發(fā)給設備的標準請求,以及正常工作時(shí)主機發(fā)送的廠(chǎng)商請求。USB2.0協(xié)議中規定了11種USB標準請求,對這11種標準請求作出正確的響應是設備成功枚舉的重中之重。當固件接收到第1個(gè)SETUP中斷后,就進(jìn)入USB枚舉過(guò)程,其過(guò)程是由主機發(fā)出一系列USB標準設備請求并要求及時(shí)得到設備響應,如果不需要進(jìn)行操作,也必須指示一個(gè)空響應,使主機能為該設備準備其所請求的資源,建立好兩者之間的信息溝通機制。

(4)數據接收/發(fā)送程序:當用戶(hù)通過(guò)主機端應用程序向設備索要數據或向設備發(fā)送數據時(shí),DSP調用數據發(fā)送/接收子程序完成數據的發(fā)送/接收。數據的發(fā)送和接收過(guò)程如下:

發(fā)送數據:選擇端點(diǎn)索引→寫(xiě)發(fā)送緩沖區長(cháng)度寄存器→寫(xiě)發(fā)送數據到數據端口寄存器→等待發(fā)送完畢標志。

接收數據:選擇端點(diǎn)索引→讀接收緩沖區長(cháng)度寄存器→從數據端口寄存器讀取接收到的數據。

(5)硬件接口訪(fǎng)問(wèn)程序:硬件接口程序負責完成DSP對ISP1581的讀寫(xiě)操作,它是整個(gè)固件程序中最底層也是使用最頻繁的部分,在這里主要定義了2種類(lèi)型的函數:ISP1581常用寄存器訪(fǎng)問(wèn)函數和數據端口寄存器訪(fǎng)問(wèn)函數。

常用寄存器訪(fǎng)問(wèn)函數:

void outport(unsigned int *reg_addr, unsigned short value);

unsigned short inport(unsigned int *reg_addr);

數據端口寄存器訪(fǎng)問(wèn)函數:

void write_ep(unsigned short *addr, unsigned short size);

unsigned short read_ep(unsigned short *addr);

write_ep為寫(xiě)端點(diǎn)發(fā)送緩沖區函數,其中參數*addr為指向待發(fā)送緩沖區的起始地址指針,參數size為要發(fā)送數據的字節數;read_ep為讀端點(diǎn)接收緩沖區函數,參數含義與write_ep函數相同,返回值為接收數據的字節數。

2.2 驅動(dòng)程序開(kāi)發(fā)

Windows環(huán)境下驅動(dòng)程序有3種模型:VxD模型、KMD模型、WDM模型。WDM模型是微軟力推的全新驅動(dòng)程序模型,現在主流的操作系統都是采用基于WDM模型的驅動(dòng)程序,因此本采集系統也采用WDM驅動(dòng)程序模型來(lái)開(kāi)發(fā)USB設備的驅動(dòng)程序。

對于USB設備,其WDM驅動(dòng)程序分為USB底層(總線(xiàn))驅動(dòng)程序和USB功能(設備)驅動(dòng)程序。USB底層驅動(dòng)程序由操作系統提供,負責與實(shí)際的硬件打交道,實(shí)現底層通信。USB功能驅動(dòng)程序由設備開(kāi)發(fā)者編寫(xiě),不對實(shí)際的硬件進(jìn)行操作,而是通過(guò)向USB底層驅動(dòng)程序發(fā)送包含請求塊URB(USB Request Block)的IRP,以實(shí)現對USB設備信息的發(fā)送和接收。

目前,WDM驅動(dòng)程序開(kāi)發(fā)工具有3種:Microsoft公司的DDK、Numega公司的DriverStudio和Jungo公司的WinDriver。其中,DDK的開(kāi)發(fā)難度較大,開(kāi)發(fā)者需要對整個(gè)體系結構和WDM規范有很好的理解和把握,還要熟悉上千個(gè)DDK函數的功能和使用場(chǎng)合,且測試流程繁瑣;DriverStudio的開(kāi)發(fā)難度低一些,它將DDK函數按照邏輯功能進(jìn)行組織,把很多常用功能封裝成類(lèi),建立了一個(gè)基于C++語(yǔ)言的面向對象的編程環(huán)境,開(kāi)發(fā)者面對的不再是上千個(gè)復雜凌亂的DDK函數,而是邏輯清晰的類(lèi)庫;WinDriver的開(kāi)發(fā)幾乎沒(méi)有難度,開(kāi)發(fā)者所編寫(xiě)的只是定制和調用它提供的通用驅動(dòng),開(kāi)發(fā)周期較短,特別適合于驅動(dòng)程序初學(xué)者使用。

利用WinDriver開(kāi)發(fā)設備驅動(dòng)程序,有2種方法:

(1)用Wizard自動(dòng)生成驅動(dòng)程序的框架代碼,根據實(shí)際要求修改代碼,加入定制的功能,再在用戶(hù)態(tài)執行和調試代碼,并將性能要求苛刻的部分插入到核心態(tài),從而完成整個(gè)驅動(dòng)程序的編寫(xiě)。在使用這種方法時(shí),WinDriver已經(jīng)完成了驅動(dòng)程序編寫(xiě)的大部分工作,減少了工作量,使編寫(xiě)驅動(dòng)成為相對較簡(jiǎn)單。但此方法生成的設備驅動(dòng)程序,其通用性和可移植性較差;

(2)完全用WinDriver提供的API函數來(lái)寫(xiě)驅動(dòng)程序。這樣要比修改由Wizard生成的框架代碼靈活得多,并且編寫(xiě)的程序更簡(jiǎn)短。但這要求開(kāi)發(fā)者熟悉驅動(dòng)程序的框架,能熟練運用WinDriver API函數。

為了縮短開(kāi)發(fā)周期,在實(shí)際應用中選用了第1種方法生成驅動(dòng)程序。具體步驟如下:

(1) 啟動(dòng)Driver Wizard,檢測連接的USB設備,生成inf文件,這個(gè)inf文件和WinDriver包含的windrvr6.sys一起,就是新開(kāi)發(fā)USB設備的驅動(dòng)程序。

(2) 點(diǎn)擊Next按鈕,進(jìn)入資源列表窗口,窗口中顯示了管道(Pipe)的一些基本信息。此窗口還可以用于對外設進(jìn)行讀寫(xiě),測試硬件資源的正確性,窗口中的Log部分即為測試結果。

(3) 點(diǎn)擊Next按鈕,進(jìn)入代碼生成窗口,在窗口中選擇生成C語(yǔ)言代碼。之后Driver Wizard將自動(dòng)生成針對ISP1581的樣本程序和工程文件(包括代碼文件、說(shuō)明文件以及適用于VC++編譯器的項目文件)。

(4)重新安裝這個(gè)USB設備的驅動(dòng)程序,利用DriverWizard生成的文件,就可開(kāi)發(fā)應用程序了。

經(jīng)過(guò)反復測試發(fā)現,在現有硬件上批量傳輸的速度在60 Mb/s左右,可以滿(mǎn)足當前系統采樣頻率為500 kHz時(shí)的數據采集要求,即500K×4路×16=32 Mb/s。但與USB2.0規范的極限速度相比,現有的批量傳輸速度還不及其13%,分析其原因:

(1) USB2.0規范定義的最大速度為480 Mb/s,但它是包含令牌包在內的傳輸,因此,若扣除通信協(xié)議中的令牌,實(shí)際傳輸速度要遠低于480 Mb/s。

(2) 從訪(fǎng)問(wèn)寄存器的時(shí)序參數可以看出,讀/寫(xiě)周期最小為80 ns,即DSP對ISP1581讀寫(xiě)的最高頻率是12.5 MHz,由于每次讀寫(xiě)操作的數據為2 B,所以DSP與接口芯片之間數據傳輸的最高速率是25 MB/s,最后的實(shí)際值應該小于此值。

(3) 利用WinDriver開(kāi)發(fā)驅動(dòng),事實(shí)上它只是定制和調用WinDriver提供的通用驅動(dòng)而已,所以并非有針對性地對特定硬件編程,程序執行效率上也不免大打折扣。

(4) 計算機與USB設備的通信中還包含對計算機硬盤(pán)的寫(xiě)操作,使用測試軟件對所用機器硬盤(pán)進(jìn)行寫(xiě)測試,測得平均速度在22~25 MB/s之間,因此硬盤(pán)的寫(xiě)速度也是影響USB數據傳輸速度的原因之一。

因此若想在現有硬件平臺上獲得更高的速度可以在以下幾個(gè)方面進(jìn)行:采用端點(diǎn)的雙緩沖模式、采用ISP1581的DMA模式、采用效率更高的驅動(dòng)開(kāi)發(fā)方式及優(yōu)化固件程序以提高硬件的工作效率等。
本文地址:http://selenalain.com/thread-51070-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
lzy89c55 發(fā)表于 2011-2-14 10:49:07
頂一下
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页