《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 基于ISP1581的USB數(shù)據(jù)采集系統(tǒng)的實(shí)現(xiàn)
基于ISP1581的USB數(shù)據(jù)采集系統(tǒng)的實(shí)現(xiàn)
來源:電子技術(shù)應(yīng)用2010年第6期
王之海1, 李 想2
1. 大連91550部隊(duì)93分隊(duì),, 遼寧 大連116023;2. 哈爾濱工程大學(xué) 水聲工程學(xué)院, 黑龍江 哈爾濱150001
摘要: 具有PCI總線等接口形式的采集卡雖然傳輸速率高,,但安裝麻煩,易受PC機(jī)插槽數(shù)量,、地址、中斷資源的限制,。為了解決以上問題,,設(shè)計(jì)了基于ISP1581的高速USB接口的多通道數(shù)據(jù)采集系統(tǒng),介紹了系統(tǒng)硬件組成以及軟件程序的開發(fā)過程,。經(jīng)驗(yàn)證,,系統(tǒng)最高傳輸速率可達(dá)60 Mb/s。
中圖分類號(hào): TP274+.2
文獻(xiàn)標(biāo)識(shí)碼: 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)用于信號(hào)檢測(cè),、信號(hào)處理、儀器儀表等領(lǐng)域,。目前,,有各種數(shù)據(jù)采集卡或采集系統(tǒng)可供選擇,但由于數(shù)據(jù)源以及用戶需求的多樣性,,有時(shí)并不能滿足要求,。特別是在某些應(yīng)用中,需要同時(shí)高速采集多個(gè)通道的數(shù)據(jù),,而且為了分析比較各通道信號(hào)間的相互關(guān)系,,常常要求所有通道的采集必須同步。目前常用的數(shù)據(jù)采集卡是具有ISA總線,、PCI總線等接口形式的A/D采集卡,,雖然數(shù)據(jù)傳輸率很高,但是還存在整個(gè)系統(tǒng)笨重,,缺乏靈活性,,不能實(shí)現(xiàn)即插即用,不適合小型,、便攜設(shè)備應(yīng)用等缺點(diǎn),。通用串行總線(USB)是為了解決日益增加的PC機(jī)外設(shè)與有限的主板插槽和端口之間的矛盾而制定的一種串行通信標(biāo)準(zhǔn)。USB的出現(xiàn)很好地解決了以上問題,。USB不僅具有快速的傳輸性能,,而且USB協(xié)議本身具有其糾錯(cuò)能力,它的即插即用模式和易擴(kuò)展性能都具有很強(qiáng)的發(fā)展前途和應(yīng)用價(jià)值[1],。根據(jù)項(xiàng)目實(shí)際需求,,本文設(shè)計(jì)了一種基于ISP1581的高速USB多通道數(shù)據(jù)采集系統(tǒng),系統(tǒng)最高采樣率每通道可達(dá)500 K字,并且具有增益控制調(diào)節(jié),、外觸發(fā)同步采集等功能,目前該系統(tǒng)已成功地應(yīng)用于某水下定位系統(tǒng)[2],。
1 系統(tǒng)硬件組成
    如圖1所示,系統(tǒng)由信號(hào)調(diào)理電路模塊,、A/D采集模塊,、USB數(shù)據(jù)傳輸模塊三個(gè)部分組成。

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

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

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

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

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