摘 要:本文提出了一種基于USB總線傳輸協(xié)議的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)方法。該系統(tǒng)應(yīng)用CH372USB控制器與SPCE061A單片機(jī)完成設(shè)備與主機(jī)的通信。文中介紹了數(shù)據(jù)采集系統(tǒng)的總體設(shè)計(jì)思想及層次結(jié)構(gòu),并介紹了固件程序,設(shè)備功能驅(qū)動(dòng)程序和應(yīng)用程序的設(shè)計(jì)方法。該系統(tǒng)應(yīng)用CH372內(nèi)置固件模式屏蔽了相關(guān)USB協(xié)議,并使用SPCE061A自帶的模數(shù)轉(zhuǎn)換器對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換控制,使得硬件電路十分簡(jiǎn)單, 可以廣泛的應(yīng)用與對(duì)各種數(shù)據(jù)的采集。
關(guān)鍵詞:USB總線 ; 數(shù)據(jù)采集 ; CH372
0 .引言:
在現(xiàn)代科學(xué)研究中,經(jīng)常要對(duì)數(shù)據(jù)進(jìn)行采集分析。目前比較通用的是在PC內(nèi)安裝數(shù)據(jù)采集卡(如A/D卡及422、485卡),但是這些數(shù)據(jù)采集設(shè)備由于安裝麻煩、價(jià)格昂貴、受計(jì)算機(jī)插槽數(shù)量、地址、中斷資源的限制,可擴(kuò)展性差,以及無(wú)法做電磁屏蔽而導(dǎo)致采集的數(shù)據(jù)失真。隨著客戶對(duì)系統(tǒng)數(shù)據(jù)采集速度要求的不斷提高,USB以其使用方便、易于擴(kuò)展、速度快等優(yōu)點(diǎn)而越來(lái)越多的應(yīng)用于數(shù)據(jù)采集系統(tǒng)中。
USB (Universal Serial Bus,通用串行總線)作為一種新的外設(shè)連接技術(shù),可以簡(jiǎn)化計(jì)算機(jī)與外設(shè)的連接過(guò)程,提高低速和高速的兼容,為用戶提供一種可共享的,可擴(kuò)充的使用方便的串行總線。
1. USB數(shù)據(jù)采集系統(tǒng)的組成及工作原理
一個(gè)實(shí)用的USB數(shù)據(jù)采集系統(tǒng)包括A/D轉(zhuǎn)換器,DIO ,微控制器,USB控制芯片以及PC機(jī)端的應(yīng)用程序。外部的被測(cè)信號(hào)經(jīng)過(guò)傳感器變換為模擬電壓信號(hào),經(jīng)屏蔽電纜傳入A/D轉(zhuǎn)換模塊將其轉(zhuǎn)換為數(shù)字信號(hào)。在主機(jī)端,當(dāng)外圍USB設(shè)備接入系統(tǒng),經(jīng)過(guò)總線枚舉被檢測(cè)、配置可用后,主機(jī)端的應(yīng)用程序就可以控制數(shù)據(jù)采集系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行采集。微控制器根據(jù)所需的采樣速率進(jìn)行數(shù)據(jù)采集,并將采集來(lái)的數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)存儲(chǔ)器中,再通過(guò)USB接口控制芯片,將根據(jù)USB總線傳輸協(xié)議打包的數(shù)據(jù)放到USB總線傳給主機(jī),由主機(jī)端的應(yīng)用程序?qū)?shù)據(jù)進(jìn)行顯示、分析處理。
2.系統(tǒng)硬件設(shè)計(jì)
USB總線接口控制器是USB設(shè)備與主機(jī)通信的重要器件。目前,市場(chǎng)上的USB控制器有很多種,大致可分為兩種,一種是帶USB接口的單片機(jī),如cypress的cy系列;另一種是僅處理USB通信的,必須有一個(gè)外部微控制器來(lái)進(jìn)行協(xié)議處理的純粹USB控制器。根據(jù)USB控制器的分類,要實(shí)現(xiàn)USB設(shè)備與主機(jī)的通信就有兩種方法(1)帶微處理器的USB控制器(2)獨(dú)立的USB控制器加微處理器。
本系統(tǒng)根據(jù)數(shù)據(jù)采集卡的功能,采用帶7通道10位精度A/D轉(zhuǎn)換器的SPCE061A單片機(jī)和CH372的USB控制芯片組成外部數(shù)據(jù)采集設(shè)備實(shí)現(xiàn)與主機(jī)的通信。
2.1 CH372控制器的主要特點(diǎn):
?。?) 支持全速設(shè)備接口,兼容USB2.0規(guī)范,即插即用,外圍元器件只需要晶體和電容。
?。?) 提供一對(duì)主端點(diǎn)和一對(duì)輔助端點(diǎn),支持控制傳輸、批量傳輸、中斷傳輸。
?。?) 具有8位數(shù)據(jù)總線和讀、寫(xiě)、片選控制線以及中斷輸出,可以方便的掛接到單片機(jī)/DSP/MPU等控制器的系統(tǒng)總線上。
?。?) 內(nèi)置了USB通訊中的底層協(xié)議,具有省事的內(nèi)置固件模式和靈活的外置固件模式。在內(nèi)置固件模式下,CH372自動(dòng)處理默認(rèn)端點(diǎn)0的所有事務(wù),自動(dòng)完成標(biāo)準(zhǔn)的USB枚舉配置過(guò)程,本地端單片機(jī)只要負(fù)責(zé)數(shù)據(jù)交換,所以單片機(jī)程序非常簡(jiǎn)潔[1]。
2.2 SPCE061A的主要性能特點(diǎn)
SPCE061A擁有16位的微處理器核心,CPU工作時(shí)鐘頻率0.32—49.152MHz,2個(gè)10位數(shù)字模擬轉(zhuǎn)換輸出通道,7個(gè)10位模擬數(shù)字轉(zhuǎn)換器輸入通道,具有較高的處理速度,能夠更容易,更快速的處理復(fù)雜的數(shù)字信號(hào).[2]
根據(jù)功能模塊的集成和CH372內(nèi)置固件模式的特點(diǎn),本系統(tǒng)的硬件電路十分簡(jiǎn)單。
[align=center]

圖1 系統(tǒng)硬件連接示意圖[/align]
模擬信號(hào)經(jīng)外部的放大由IOA[6:0]輸入,CH372芯片的讀選通輸出RD#和寫(xiě)選通輸出WR#連接到單片機(jī)。CS#由地址譯碼電路驅(qū)動(dòng),可用于當(dāng)單片機(jī)具有多個(gè)外圍器件時(shí)進(jìn)行設(shè)備選擇,在本系統(tǒng)中要求CS#常為低電平,所以直接接地。INT#輸出的中斷請(qǐng)求是低電平有效,單片機(jī)可以使用中斷方式或者查詢方式獲知中斷請(qǐng)求。
當(dāng)WR#為高電平并且CS#和RD#及A0 都為低電平時(shí),CH372 中的數(shù)據(jù)通過(guò)D7~D0輸出;當(dāng)RD#為高電平并且CS#和WR#及A0 都為低電平時(shí),D7~D0上的數(shù)據(jù)被寫(xiě)入CH372 芯片中;當(dāng)RD#為高電平并且CS#和WR#都為低電平而A1 為高電平時(shí),D7~D0 上的數(shù)據(jù)被作為命令碼寫(xiě)入CH372芯片中[1]。
3.軟件設(shè)計(jì)
USB數(shù)據(jù)采集系統(tǒng)的軟件部分包括三個(gè)方面:?jiǎn)纹瑱C(jī)中的固件程序,設(shè)備驅(qū)動(dòng)程序,和主機(jī)上的應(yīng)用程序。
3.1 固件程序是與USB控制器相連的單片機(jī)執(zhí)行的代碼,主要負(fù)責(zé)兩項(xiàng)任務(wù)。
?。?) 響應(yīng)主機(jī)對(duì)設(shè)備的枚舉實(shí)現(xiàn)對(duì)設(shè)備的配置,也就是使主機(jī)檢測(cè)并識(shí)別設(shè)備,為主機(jī)和設(shè)備之間的數(shù)據(jù)傳輸做準(zhǔn)備。
?。?) 根據(jù)PC機(jī)上的應(yīng)用程序的要求,傳輸數(shù)據(jù)。
由于本系統(tǒng)使用的CH372USB控制器內(nèi)置固件模式屏蔽了相關(guān)的USB協(xié)議,自動(dòng)完成主機(jī)的USB枚舉配置過(guò)程,完全不需要本地端控制器做任何處理,所以固件程序只需要實(shí)現(xiàn)涉及對(duì)采集數(shù)據(jù)的傳輸、采集參數(shù)設(shè)置的要求即可。
SPCE061A共有7個(gè)A/D轉(zhuǎn)換通道,但只有一個(gè)ADC,在使用前必須查看P_ADC_MUX_Ctrl單元/P_ADC_Ctrl單元的RDY的值,以確定ADC為空閑狀態(tài),通過(guò)設(shè)置P_ADC_MUX_Ctrl的第2-3位來(lái)實(shí)現(xiàn)通道切換,而且SPCE061A的A/D轉(zhuǎn)換只能通過(guò)讀取P_ADC_LINEIN_Data單元的數(shù)據(jù)來(lái)觸發(fā)[2]。數(shù)據(jù)采集依靠讀P_ADC_LINEIN_Data單元的數(shù)據(jù)進(jìn)行連續(xù)的數(shù)據(jù)采集。由于USB的傳輸速度遠(yuǎn)遠(yuǎn)大于數(shù)據(jù)采集的速度,所以在SPCE061A內(nèi)部RAM中定義雙數(shù)據(jù)緩沖區(qū),利用緩沖區(qū)buf[0]做為緩沖區(qū)滿標(biāo)志位和讀指針p來(lái)確定讀數(shù)據(jù)順序,實(shí)現(xiàn)輪流從兩個(gè)緩沖區(qū)讀取數(shù)據(jù)。當(dāng) buf_i[0]==1&&p==buf_i時(shí),表示i緩沖區(qū)滿且讀數(shù)據(jù)順序正確,則從此緩沖區(qū)讀數(shù)據(jù)。在數(shù)據(jù)發(fā)送完后,改變緩沖區(qū)滿標(biāo)志并設(shè)置讀指針,繼續(xù)讀下一個(gè)緩沖區(qū)。為使前一次的數(shù)據(jù)傳輸與后一次的數(shù)據(jù)傳輸連續(xù),主機(jī)查詢的時(shí)間間隔要小于緩沖被寫(xiě)滿一次所需要的時(shí)間。
CH372的端點(diǎn)0 是默認(rèn)端點(diǎn),在內(nèi)置固件模式下,自動(dòng)處理USB各種標(biāo)準(zhǔn)事務(wù); 端點(diǎn)1 的下傳端點(diǎn)作為輔助端點(diǎn),用來(lái)傳輸數(shù)據(jù)采集的控制命令,如數(shù)據(jù)采集的開(kāi)始、停止、設(shè)置數(shù)據(jù)采集的各項(xiàng)參數(shù)等; 端點(diǎn)2 作為批量數(shù)據(jù)傳輸端點(diǎn),用于對(duì)采集數(shù)據(jù)的傳輸。
CH372 在計(jì)算機(jī)應(yīng)用層與本地端單片機(jī)之間提供了端對(duì)端的連接,本系統(tǒng)采用請(qǐng)求加應(yīng)答方式進(jìn)行通訊。計(jì)算機(jī)應(yīng)用層按事先約定的命令碼加傳輸數(shù)據(jù)的格式將數(shù)據(jù)請(qǐng)求發(fā)送給CH372芯片,CH372 芯片再以中斷方式通知單片機(jī),進(jìn)入中斷服務(wù)程序。中斷服務(wù)程序通過(guò)執(zhí)行GET_STUTAS命令獲取并分析中斷狀態(tài),是發(fā)送數(shù)據(jù)成功,執(zhí)行RD_USB_DATA命令從CH372讀取接收到的數(shù)據(jù);是上傳數(shù)據(jù)成功,執(zhí)行WR_USB_DATA命令向CH372寫(xiě)入下一組要發(fā)送的數(shù)據(jù);是中斷數(shù)據(jù),分析控制命令類型并轉(zhuǎn)入執(zhí)行相應(yīng)的數(shù)據(jù)采集控制。
3.2 設(shè)備驅(qū)動(dòng)程序
USB總線設(shè)備的客戶端驅(qū)動(dòng)程序設(shè)計(jì)是開(kāi)發(fā)USB總線外設(shè)的關(guān)鍵。USB總線設(shè)備采用分層的WDM驅(qū)動(dòng)模型,通過(guò)它用戶不需要直接和硬件打交道,而只需通過(guò)下層驅(qū)動(dòng)程序提供的接口來(lái)訪問(wèn)硬件。驅(qū)動(dòng)程序操作的核心是I/O請(qǐng)求包(IRP),各層驅(qū)動(dòng)程序都要通過(guò)IRP來(lái)進(jìn)行通信。當(dāng)應(yīng)用程序需要對(duì)設(shè)備進(jìn)行I/O操作,就調(diào)用Windows API函數(shù),WIN32子系統(tǒng)通知I/O管理器根據(jù)請(qǐng)求構(gòu)造一個(gè)合適的IRP并把該請(qǐng)求傳遞至下一層。分發(fā)例程常常只執(zhí)行對(duì)IRP的初始處理,如檢查所有的參數(shù)是否合法的,然后把IRP 分發(fā)到下層驅(qū)動(dòng)去處理 [4]。USB功能驅(qū)動(dòng)程序通過(guò)USB總線驅(qū)動(dòng)程序接口訪問(wèn)USB總線,所有低層I/O都由USB總線驅(qū)動(dòng)程序處理,所以功能驅(qū)動(dòng)程序只關(guān)心數(shù)據(jù)傳輸類型、傳輸時(shí)序、傳輸管道以及如何處理數(shù)據(jù)等操作。本系統(tǒng)直接應(yīng)用CH372芯片開(kāi)發(fā)商提供的包含創(chuàng)建、關(guān)閉設(shè)備、設(shè)備控制、設(shè)備PnP等操作的設(shè)備驅(qū)動(dòng)程序。
3.3應(yīng)用程序
客戶應(yīng)用程序由Visual C++編寫(xiě),向用戶提供設(shè)備打開(kāi)、關(guān)閉,對(duì)數(shù)據(jù)采集的參數(shù)調(diào)整,并對(duì)采集數(shù)據(jù)進(jìn)行顯示等控制功能。當(dāng)設(shè)備連接好并經(jīng)配置可使用后,應(yīng)用程序需要與設(shè)備進(jìn)行通信,就可以啟動(dòng)一次傳輸。
[align=center]

圖2 應(yīng)用程序流程圖[/align]
USB設(shè)備對(duì)應(yīng)用程序來(lái)說(shuō)只是一個(gè)擁有設(shè)備名的文件,所以就可以使用Win32的API中的文件函數(shù)來(lái)對(duì)設(shè)備進(jìn)行控制。在應(yīng)用程序中利用多線程編程思想實(shí)現(xiàn)系統(tǒng)的實(shí)時(shí)性,主線程完成系統(tǒng)參數(shù)設(shè)置,顯示數(shù)據(jù)等,輔助線程單獨(dú)完成對(duì)數(shù)據(jù)的采集工作。
4.結(jié)束語(yǔ)
隨著USB傳輸數(shù)據(jù)速度的提高,傳輸實(shí)時(shí)性的增強(qiáng),會(huì)出現(xiàn)越來(lái)越多的USB設(shè)備。本文則根據(jù)數(shù)據(jù)采集系統(tǒng)安裝麻煩,價(jià)格昂貴,可擴(kuò)展性差的現(xiàn)狀,設(shè)計(jì)了一個(gè)基于USB總線接口的數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)不僅硬件電路十分簡(jiǎn)單,而且安裝方便,即插即用,有很好的可靠性和穩(wěn)定性,可以廣泛的應(yīng)用與對(duì)各種數(shù)據(jù)的采集。
本文作者創(chuàng)新點(diǎn):
本系統(tǒng)對(duì)于USB傳輸應(yīng)用CH372USB控制芯片的內(nèi)置固件模式屏蔽了相關(guān)的USB協(xié)議,默認(rèn)端點(diǎn)0自動(dòng)處理主機(jī)的USB枚舉配置過(guò)程,完全不需要本地端控制器做任何處理, 單片機(jī)程序非常簡(jiǎn)潔,并且對(duì)數(shù)據(jù)采集部分的硬件采用自帶模擬數(shù)字轉(zhuǎn)換功能的單片機(jī),使得整個(gè)系統(tǒng)的控制和硬件電路都十分簡(jiǎn)單。
參考文獻(xiàn)
[1] 南京沁恒電子有限公司 CH372S使用手冊(cè) [M] 2005
[2] 羅亞非 凌陽(yáng)16位單片機(jī)應(yīng)用基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社 2005
[3] Jan Axelson . USB大全 [M]. 北京: 中國(guó)電力出版社 2001
[4] Chris Cant . Windows WDM設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)指南[M]. 北京: 機(jī)械工業(yè)出版社 2003
[5] 曹利鋼 USB總線數(shù)據(jù)采集控制系統(tǒng)的開(kāi)發(fā)與應(yīng)用 [D].南昌:南昌大學(xué)碩士畢業(yè)論文 2005
[6] 邊海龍.賈少華USB 2.0設(shè)備設(shè)計(jì)與開(kāi)發(fā) [M]. 北京:人民郵電出版社 2004
[7] 石曉瑛 許智榜 基于AT90S8515和USB接口數(shù)據(jù)采集系統(tǒng) [J].微計(jì)算機(jī)信息 2005
[8] 張弘. USB接口設(shè)計(jì) [M]. 西安 : 西安電子科技大學(xué)出版社 2002