《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測試測量 > 設(shè)計應(yīng)用 > 基于ISP1581的USB數(shù)據(jù)采集系統(tǒng)的實現(xiàn)
基于ISP1581的USB數(shù)據(jù)采集系統(tǒng)的實現(xiàn)
來源:電子技術(shù)應(yīng)用2010年第6期
王之海1, 李 想2
1. 大連91550部隊93分隊, 遼寧 大連116023;2. 哈爾濱工程大學(xué) 水聲工程學(xué)院, 黑龍江 哈爾濱150001
摘要: 具有PCI總線等接口形式的采集卡雖然傳輸速率高,但安裝麻煩,易受PC機插槽數(shù)量、地址、中斷資源的限制。為了解決以上問題,設(shè)計了基于ISP1581的高速USB接口的多通道數(shù)據(jù)采集系統(tǒng),介紹了系統(tǒng)硬件組成以及軟件程序的開發(fā)過程。經(jīng)驗證,系統(tǒng)最高傳輸速率可達60 Mb/s。
中圖分類號: TP274+.2
文獻標(biāo)識碼: A
Realization of USB data acquisition system based on ISP1581
WANG Zhi Hai1, LI Xiang2
1. 91550 Army 93th Unit in Dalian, Dalian 116023, China;2. College of Underwater Acoustic Engineering , Harbin Engineering University, Harbin 150001, China
Abstract: Acquisition card with PCI bus interface has high speed, but its installation is very complex, and there is some limit in slot number and address interrupt resource of computer. In order to solve these problems, a multi-channel high speed USB interface data acquisition system based on ISP 1581 is designed. The hardware structure and the software development process is introduced. By testing, the transmission speed up to 60 Mb/s.
Key words : data acquisition; ISP1581; USB

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

1.1 信號調(diào)理電路模塊
 由于從傳感器進來的信號一般都比較小(大約在微伏量級),A/D無法直接對這些信號進行采集,需要通過信號調(diào)理電路模塊對其進行放大,以滿足A/D采集的量程范圍。另外,由于信號容易受到外界噪聲以及電噪聲的干擾,通過信號調(diào)理電路所具有的濾波功能,可以濾除信號頻帶外的噪聲。
1.2 A/D采集模塊
 A/D采集模塊由1片F(xiàn)PGA和2片A/D組成,完成4路信號的模/數(shù)轉(zhuǎn)換。模數(shù)轉(zhuǎn)換器選擇的是AD7655芯片。AD7655是一款高速、低功耗4通道16位模數(shù)轉(zhuǎn)換器,采用5 V單電源供電,模擬輸入信號范圍為0 V~5 V;高輸入阻抗,可對4路模擬輸入同時高速采樣并進行數(shù)字化轉(zhuǎn)換,采樣速率最高可達1 MS/s,支持并行或串行接口。由于本采集系統(tǒng)要求對各路信號的相位嚴(yán)格一致,而AD7655只能同時對4個通道中的2路信號同時進行采樣,因此,1片A/D僅連接了2路模擬信號。另外,為了保證所有通道信號的相位一致性,2片A/D需要使用同一個轉(zhuǎn)換信號來控制轉(zhuǎn)換的進行,故在電路連接時,把每個A/D芯片的轉(zhuǎn)換信號(CNVST)管腳連接在一起,然后連接到FPGA上的轉(zhuǎn)換信號輸出管腳上,由FPGA輸出的轉(zhuǎn)換信號驅(qū)動。FPGA與A/D之間的數(shù)據(jù)讀取采用總線的方式,將每一片A/D的讀控制信號都獨立連接到FPGA上,由FPGA控制各路采樣數(shù)據(jù)的讀取。采集電路連接如圖2所示。

1.3 USB數(shù)據(jù)傳輸模塊
 USB數(shù)據(jù)傳輸模塊是本系統(tǒng)的核心。要開發(fā)USB功能設(shè)備,首先需要對設(shè)計產(chǎn)品的功能進行全面了解,包括數(shù)據(jù)傳輸速率、傳輸類型、所需要的硬件資源等。在充分了解設(shè)計的產(chǎn)品后,要選擇合適的USB接口芯片,如果選擇得好,可以大大節(jié)省開發(fā)時間和費用。
 USB接口芯片是一種集成了USB協(xié)議的微處理器,能自動對各種USB事件作出響應(yīng),以處理USB總線上的數(shù)據(jù)傳輸。所有的主機和設(shè)備上都至少含有1塊實現(xiàn)其功能的USB接口芯片。按照不同的標(biāo)準(zhǔn),USB接口芯片有如下幾種分類方式,以功能分類則可以分為:主控制器芯片、集線器芯片、功能設(shè)備芯片;以使用方式進行分類則可以分為:帶USB接口的專用MCU、帶USB接口的通用MCU、純粹的USB接口芯片。
 本設(shè)計中選用了Philips公司的USB2.0接口芯片ISP1581,該芯片屬于純粹的USB接口芯片。這類USB接口芯片價格較低,接口方便,靈活性高,針對不同的硬件環(huán)境可以配合多種MCU使用,如單片機、DSP、FPGA[3-4]。ISP1581支持2種工作模式:通用處理器模式和斷開總線模式。本設(shè)計中采用DSP來控制ISP1581,連接方式選用通用處理器模式,原理圖如圖3所示。

2 USB接口軟件開發(fā)
 軟件分為USB固件程序開發(fā)和USB設(shè)備驅(qū)動程序開發(fā)兩大部分。
2.1 USB固件程序開發(fā)
 所有基于微處理器及其外圍電路的功能設(shè)備的正常工作都離不開固件的參與,固件的作用就是輔助硬件,即控制硬件來完成預(yù)期的功能,如沒有固件的參與和控制,硬件設(shè)備只是芯片簡單的堆砌,無法實現(xiàn)預(yù)期的功能,如同一臺沒有安裝操作系統(tǒng)的計算機,無法正常工作。因此,用戶必須編寫固件程序來輔助硬件完成USB通信任務(wù)[5]。具體如下:
    (1)初始化。主要是設(shè)置一些特殊寄存器的初值,以實現(xiàn)所需的設(shè)備屬性或功能,例如開中斷、使能端點、配置端口等。
 (2)輔助硬件完成設(shè)備的重新枚舉(ReNumeration)過程。包括模擬設(shè)備的斷開與重新連接,對收到的設(shè)置包進行分析判斷,從而對主設(shè)備請求做出適當(dāng)?shù)捻憫?yīng),完成對設(shè)備的配置任務(wù)。
 (3)對中斷的處理。
 (4)數(shù)據(jù)的接收和發(fā)送。
 (5)外圍電路的控制。
 固件程序設(shè)計成中斷驅(qū)動模式,采用模塊化設(shè)計,其總體結(jié)構(gòu)如圖4所示。

 各模塊的主要功能如下:
 (1)主程序:完成DSP及USB接口芯片的初始化、數(shù)據(jù)發(fā)送/接收標(biāo)志位的判斷及中斷請求等待。
 (2)中斷服務(wù)程序:中斷服務(wù)程序是整個固件程序設(shè)計的重點。首先通過讀取ISP1581中斷寄存器的值判斷所發(fā)生中斷的類型,然后根據(jù)具體的中斷類型進入相應(yīng)的處理子程序或設(shè)置相應(yīng)的標(biāo)志位。中斷服務(wù)程序中需要處理的有總線復(fù)位中斷、高速狀態(tài)變化中斷、SETUP中斷及端點的IN/OUT中斷。在所有的中斷處理程序中,EP0SETUP中斷處理是最重要的,它是USB設(shè)備與PC機間建立通信鏈路的基礎(chǔ)。
 (3)請求處理程序:USB標(biāo)準(zhǔn)請求處理程序負(fù)責(zé)處理枚舉階段主機發(fā)給設(shè)備的標(biāo)準(zhǔn)請求,以及正常工作時主機發(fā)送的廠商請求。USB2.0協(xié)議中規(guī)定了11種USB標(biāo)準(zhǔn)請求,對這11種標(biāo)準(zhǔn)請求作出正確的響應(yīng)是設(shè)備成功枚舉的重中之重。當(dāng)固件接收到第1個SETUP中斷后,就進入USB枚舉過程,其過程是由主機發(fā)出一系列USB標(biāo)準(zhǔn)設(shè)備請求并要求及時得到設(shè)備響應(yīng),如果不需要進行操作,也必須指示一個空響應(yīng),使主機能為該設(shè)備準(zhǔn)備其所請求的資源,建立好兩者之間的信息溝通機制。
 (4)數(shù)據(jù)接收/發(fā)送程序:當(dāng)用戶通過主機端應(yīng)用程序向設(shè)備索要數(shù)據(jù)或向設(shè)備發(fā)送數(shù)據(jù)時,DSP調(diào)用數(shù)據(jù)發(fā)送/接收子程序完成數(shù)據(jù)的發(fā)送/接收。數(shù)據(jù)的發(fā)送和接收過程如下:
 發(fā)送數(shù)據(jù):選擇端點索引→寫發(fā)送緩沖區(qū)長度寄存器→寫發(fā)送數(shù)據(jù)到數(shù)據(jù)端口寄存器→等待發(fā)送完畢標(biāo)志。
   接收數(shù)據(jù):選擇端點索引→讀接收緩沖區(qū)長度寄存器→從數(shù)據(jù)端口寄存器讀取接收到的數(shù)據(jù)。
 (5)硬件接口訪問程序:硬件接口程序負(fù)責(zé)完成DSP對ISP1581的讀寫操作,它是整個固件程序中最底層也是使用最頻繁的部分,在這里主要定義了2種類型的函數(shù):ISP1581常用寄存器訪問函數(shù)和數(shù)據(jù)端口寄存器訪問函數(shù)。
 常用寄存器訪問函數(shù):
 void outport(unsigned int *reg_addr, unsigned short value);
 unsigned short inport(unsigned int *reg_addr);
 數(shù)據(jù)端口寄存器訪問函數(shù):
 void write_ep(unsigned short *addr, unsigned short size);
 unsigned short read_ep(unsigned short *addr);
 write_ep為寫端點發(fā)送緩沖區(qū)函數(shù),其中參數(shù)*addr為指向待發(fā)送緩沖區(qū)的起始地址指針,參數(shù)size為要發(fā)送數(shù)據(jù)的字節(jié)數(shù);read_ep為讀端點接收緩沖區(qū)函數(shù),參數(shù)含義與write_ep函數(shù)相同,返回值為接收數(shù)據(jù)的字節(jié)數(shù)。
2.2 驅(qū)動程序開發(fā)
 Windows環(huán)境下驅(qū)動程序有3種模型:VxD模型、KMD模型、WDM模型。WDM模型是微軟力推的全新驅(qū)動程序模型,現(xiàn)在主流的操作系統(tǒng)都是采用基于WDM模型的驅(qū)動程序,因此本采集系統(tǒng)也采用WDM驅(qū)動程序模型來開發(fā)USB設(shè)備的驅(qū)動程序[6]。
 對于USB設(shè)備,其WDM驅(qū)動程序分為USB底層(總線)驅(qū)動程序和USB功能(設(shè)備)驅(qū)動程序。USB底層驅(qū)動程序由操作系統(tǒng)提供,負(fù)責(zé)與實際的硬件打交道,實現(xiàn)底層通信。USB功能驅(qū)動程序由設(shè)備開發(fā)者編寫,不對實際的硬件進行操作,而是通過向USB底層驅(qū)動程序發(fā)送包含請求塊URB(USB Request Block)的IRP,以實現(xiàn)對USB設(shè)備信息的發(fā)送和接收。
 目前,WDM驅(qū)動程序開發(fā)工具有3種:Microsoft公司的DDK、Numega公司的DriverStudio和Jungo公司的WinDriver。其中,DDK的開發(fā)難度較大,開發(fā)者需要對整個體系結(jié)構(gòu)和WDM規(guī)范有很好的理解和把握,還要熟悉上千個DDK函數(shù)的功能和使用場合,且測試流程繁瑣;DriverStudio的開發(fā)難度低一些,它將DDK函數(shù)按照邏輯功能進行組織,把很多常用功能封裝成類,建立了一個基于C++語言的面向?qū)ο蟮木幊汰h(huán)境,開發(fā)者面對的不再是上千個復(fù)雜凌亂的DDK函數(shù),而是邏輯清晰的類庫;WinDriver的開發(fā)幾乎沒有難度,開發(fā)者所編寫的只是定制和調(diào)用它提供的通用驅(qū)動,開發(fā)周期較短,特別適合于驅(qū)動程序初學(xué)者使用。
 利用WinDriver開發(fā)設(shè)備驅(qū)動程序,有2種方法:(1)用Wizard自動生成驅(qū)動程序的框架代碼,根據(jù)實際要求修改代碼,加入定制的功能,再在用戶態(tài)執(zhí)行和調(diào)試代碼,并將性能要求苛刻的部分插入到核心態(tài),從而完成整個驅(qū)動程序的編寫。在使用這種方法時,WinDriver已經(jīng)完成了驅(qū)動程序編寫的大部分工作,減少了工作量,使編寫驅(qū)動成為相對較簡單。但此方法生成的設(shè)備驅(qū)動程序,其通用性和可移植性較差;(2)完全用WinDriver提供的API函數(shù)來寫驅(qū)動程序。這樣要比修改由Wizard生成的框架代碼靈活得多,并且編寫的程序更簡短。但這要求開發(fā)者熟悉驅(qū)動程序的框架,能熟練運用WinDriver API函數(shù)。
 為了縮短開發(fā)周期,在實際應(yīng)用中選用了第1種方法生成驅(qū)動程序。具體步驟如下:
 (1) 啟動Driver Wizard,檢測連接的USB設(shè)備,生成inf文件,這個inf文件和WinDriver包含的windrvr6.sys一起,就是新開發(fā)USB設(shè)備的驅(qū)動程序。
 (2) 點擊Next按鈕,進入資源列表窗口,窗口中顯示了管道(Pipe)的一些基本信息。此窗口還可以用于對外設(shè)進行讀寫,測試硬件資源的正確性,窗口中的Log部分即為測試結(jié)果。
 (3) 點擊Next按鈕,進入代碼生成窗口,在窗口中選擇生成C語言代碼。之后Driver Wizard將自動生成針對ISP1581的樣本程序和工程文件(包括代碼文件、說明文件以及適用于VC++編譯器的項目文件)。
 (4)重新安裝這個USB設(shè)備的驅(qū)動程序,利用DriverWizard生成的文件,就可開發(fā)應(yīng)用程序了。
 經(jīng)過反復(fù)測試發(fā)現(xiàn),在現(xiàn)有硬件上批量傳輸?shù)乃俣仍?0 Mb/s左右,可以滿足當(dāng)前系統(tǒng)采樣頻率為500 kHz時的數(shù)據(jù)采集要求,即500K×4路×16=32 Mb/s。但與USB2.0規(guī)范的極限速度相比,現(xiàn)有的批量傳輸速度還不及其13%,分析其原因:
 (1) USB2.0規(guī)范定義的最大速度為480 Mb/s,但它是包含令牌包在內(nèi)的傳輸,因此,若扣除通信協(xié)議中的令牌,實際傳輸速度要遠(yuǎn)低于480 Mb/s。
 (2) 從訪問寄存器的時序參數(shù)可以看出,讀/寫周期最小為80 ns,即DSP對ISP1581讀寫的最高頻率是12.5 MHz,由于每次讀寫操作的數(shù)據(jù)為2 B,所以DSP與接口芯片之間數(shù)據(jù)傳輸?shù)淖罡咚俾适?5 MB/s,最后的實際值應(yīng)該小于此值。
 (3) 利用WinDriver開發(fā)驅(qū)動,事實上它只是定制和調(diào)用WinDriver提供的通用驅(qū)動而已,所以并非有針對性地對特定硬件編程,程序執(zhí)行效率上也不免大打折扣。
 (4) 計算機與USB設(shè)備的通信中還包含對計算機硬盤的寫操作,使用測試軟件對所用機器硬盤進行寫測試,測得平均速度在22~25 MB/s之間,因此硬盤的寫速度也是影響USB數(shù)據(jù)傳輸速度的原因之一。
    因此若想在現(xiàn)有硬件平臺上獲得更高的速度可以在以下幾個方面進行:采用端點的雙緩沖模式、采用ISP1581的DMA模式、采用效率更高的驅(qū)動開發(fā)方式及優(yōu)化固件程序以提高硬件的工作效率等。
參考文獻
[1]  廖濟林.USB2.0應(yīng)用系統(tǒng)開發(fā)實例精講[M].北京:電子工業(yè)出版社,2006.
[2]  張建鵬,解國明,李剛.基于ISP1581型接口電路的USB2.0接口設(shè)計[J].國外電子元器件, 2005(9).
[3]  黎美. 基于USB2.0的接口芯片ISP1581的應(yīng)用與設(shè)計[J].集成電路應(yīng)用,2005(7).
[4]  Compaq, Intel, Lucent, Microsoft, NEC, Philips.Universal serial bus specification, Revision2.0[S].2000.
[5]  周立功.PDIUSBD12 USB固件編程與驅(qū)動開發(fā)[M].北京:北京航空航天大學(xué)出版社,2003.
[6]  武安河,邰銘,于洪濤. Windows 2000/XP WDM 設(shè)備驅(qū)動程序開發(fā)[M].北京:電子工業(yè)出版社,2002.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。