由于信息網(wǎng)絡(luò)化的發(fā)展,,經(jīng)常需要將各種設(shè)備與主機(jī)相連,,傳統(tǒng)的外設(shè)與主機(jī)的通訊接口一般是基于PCI總線、ISA總線或者是RS-232C串行總線,。 PCI總線雖具有高的傳輸速度(132Mbps)С即插即用"功能,,但其缺點(diǎn)是插拔麻煩,且擴(kuò)展槽有限(一般為5~6個(gè)),。ISA總線顯然存在著同樣的問(wèn)題,。RS-232C串行總線雖然連接簡(jiǎn)單,但其缺點(diǎn)是傳輸速度慢(56kbps). 而通用串行總線(Universal Serial Bus,簡(jiǎn)稱USB)的出現(xiàn)能很好地解決以上這些沖突,。我們利用新型高性能單片機(jī)Aduc831設(shè)計(jì)了基于USB總線的數(shù)據(jù)采集系統(tǒng),。
1.USB簡(jiǎn)介
1.1USB特點(diǎn)
USB的英文全稱為Universal Serial Bus,它是一種快速、雙向,、同步傳輸?shù)牧畠r(jià)的并可以進(jìn)行熱拔插的串行接口,。它的特點(diǎn)主要有:
1)速度快,。USB有高速和低速兩種方式,主模式為高速模式,,速率為12Mbps,,另外為了適應(yīng)一些不需要很大吞吐量和很高實(shí)時(shí)性的設(shè)備,如鼠標(biāo)等,,USB還提供低速方式,,速率為1.5Mb/s。
2) 設(shè)備安裝和配置容易,。安裝USB設(shè)備不必再打開(kāi)機(jī)箱,,加減已
安裝過(guò)的設(shè)備完全不用關(guān)閉計(jì)算機(jī)。所有USB設(shè)備均支持熱插拔,,且易于擴(kuò)展,。
3) 使用靈活。USB共有4種傳輸模式:控制傳輸(control),、同步傳輸(Synchronization),、中斷傳輸(interrupt)、批量傳輸(bulk),,以適應(yīng)不同設(shè)備的需要,。
1.2 USB總線協(xié)議
USB總線屬一種輪訊方式的總線,主機(jī)控制端口初始化所有的數(shù)據(jù)傳輸,。
每一總線執(zhí)行動(dòng)作最多傳送三個(gè)數(shù)據(jù)包,。按照傳輸前制定好的原則,在每次傳送開(kāi)始時(shí),,主機(jī)控制器發(fā)送一個(gè)描述傳輸運(yùn)作的種類,、方向,USB設(shè)備地址和終端號(hào)的USB數(shù)據(jù)包,,這個(gè)數(shù)據(jù)包通常稱為標(biāo)志包(token packet),。USB設(shè)備從解碼后的數(shù)據(jù)包的適當(dāng)位置取出屬于自己的數(shù)據(jù)。數(shù)據(jù)傳輸方向不是從主機(jī)到設(shè)備就是從設(shè)備到主機(jī),。在傳輸開(kāi)始時(shí),,由標(biāo)志包來(lái)標(biāo)志數(shù)據(jù)的傳輸方向,然后發(fā)送端開(kāi)始發(fā)送包含信息的數(shù)據(jù)包或表明沒(méi)有數(shù)據(jù)傳送,。接收端也要相應(yīng)發(fā)送一個(gè)握手的數(shù)據(jù)包表明是否傳送成功,。發(fā)送端和接收端之間的 USB數(shù)據(jù)傳輸,在主機(jī)和設(shè)備的端口之間,,可視為一個(gè)通道,。存在兩種類型的通道:流和消息。流的數(shù)據(jù)不像消息的數(shù)據(jù),它沒(méi)有USB所定義的結(jié)構(gòu),,而且通道與數(shù)據(jù)帶寬,、傳送服務(wù)類型,端口特性(如方向和緩沖區(qū)大?。┯嘘P(guān),。多數(shù)通道在USB設(shè)備設(shè)置完成后即存在。USB中有一個(gè)特殊的通道——缺省控制通道,,它屬于消息通道,,當(dāng)設(shè)備一啟動(dòng)即存在,從而為設(shè)備的設(shè)置,、查詢狀況和輸入控制信息提供一個(gè)入口,。
2. 硬件設(shè)計(jì)
2.1 Aduc831簡(jiǎn)介
ADuC831 是一個(gè)完全綜合的247 k采樣保持?jǐn)?shù)據(jù)采集系統(tǒng),在同一片中 結(jié)合了高性能的自校準(zhǔn)12位 ADC 多路通道,,雙12位 DAC通道和可編程8位 MCU,。微處理器核心是 8052,提供片內(nèi) 62 kB 非易失性閃速/電擦除程序存儲(chǔ)器。還提供片內(nèi) 4 kB 非易失性閃速/電擦除數(shù)據(jù)存儲(chǔ)器,、256 b RAM 和2 kB 擴(kuò)展 RAM,。
ADuC831 還提供額外的電源監(jiān)視器, 和一個(gè)高精度參考源。片內(nèi)數(shù)字外圍設(shè)備包括2個(gè)16位Σ-Δ DAC, 雙輸出16位 PWM,看門(mén)狗定時(shí)器, 定時(shí)間隔計(jì)數(shù)器,3個(gè)定時(shí)器/計(jì)數(shù)器, 定時(shí)器 3用于波特率產(chǎn)生核 串行接口 I/O (I2C, SPI 和UART) ,。
并且片內(nèi)提供串行下載和調(diào)試模式 (通過(guò) UART), 并且通過(guò)EA引腳提供單引腳競(jìng)爭(zhēng)模式,。ADuC831 支持 QuickStart 和 QuickStart Plus 升級(jí)系統(tǒng)和低成本的軟件和硬件工具。
2.2 USBN9603簡(jiǎn)介
USBN9603是一個(gè)集成的USB端點(diǎn)控制器,,具有增強(qiáng)的DMA功能,。USBN9603集成了一個(gè)帶有3.3V的調(diào)節(jié)器的收發(fā)器,1個(gè)SIE(串行接口引擎),,1個(gè)8 b并行接口,,1個(gè)時(shí)鐘發(fā)生器和1個(gè)MICROWIRE/PLUS接口。USBN9603可以進(jìn)行7個(gè)端點(diǎn)的數(shù)據(jù)傳輸,,除了1個(gè)端點(diǎn)必須為控制傳輸端點(diǎn)以外,,其他的6個(gè)端點(diǎn)可以被配置成中斷傳輸端點(diǎn)、批量傳輸端點(diǎn)或者等時(shí)傳輸端點(diǎn),;每一個(gè)端點(diǎn)都有一個(gè)專門(mén)的FIFO,控制端點(diǎn)的FIFO長(zhǎng)度為8B,,其他的為64B,。8 b并行接口可以支持多路復(fù)用或者非多路復(fù)用2種與CPU的接口方式。USBN9603的突出特點(diǎn)為:低EMI(電磁干擾),,低等待電流,,24M晶振,增強(qiáng)的DMA功能;可使用5V或3.3V電源,;總線操作具有異步喚醒的全速靜態(tài)HALT模式,;改進(jìn)的3.3V電壓輸入的電壓調(diào)節(jié)器,所有非雙向端點(diǎn)都有64B 的FIFO,;外部控制器接口簡(jiǎn)單,,編程方便。
2.3 原理圖設(shè)計(jì)
USB數(shù)據(jù)采集系統(tǒng)硬件模塊主要由Aduc831芯片,、USB接口芯片USBN9603組成,。硬件結(jié)構(gòu)簡(jiǎn)單,硬件總體結(jié)構(gòu)框圖如圖1所示.
模擬輸入信號(hào)A/D轉(zhuǎn)換器,轉(zhuǎn)換結(jié)果存儲(chǔ)在FIFO存儲(chǔ)器中;一旦FIFO存滿,,SIE立刻對(duì)數(shù)據(jù)進(jìn)行處理,,然后Aduc831系統(tǒng)將數(shù)據(jù)從FIFO存儲(chǔ)器中讀出,由收發(fā)器通過(guò)數(shù)據(jù)線(D+、D-)送至主機(jī),。
當(dāng)USB控制器從USB總線檢測(cè)到主機(jī)啟動(dòng)的某一傳輸請(qǐng)求后,,通過(guò)中斷方式將此請(qǐng)求通知Aduc831系統(tǒng),Aduc831系統(tǒng)通過(guò)訪問(wèn)USB控制器的狀態(tài)寄存器和數(shù)據(jù)寄存器獲得與此次傳輸有關(guān)的各種參數(shù),,并根據(jù)具體的傳輸參數(shù),,對(duì)USB控制器的控制寄存器和數(shù)據(jù)寄存器進(jìn)行相應(yīng)的操作,以完成主機(jī)的傳輸請(qǐng)求,。Aduc831與USBN9603接口電路如圖2所示,。
3. 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件主要包括:控制程序和USB設(shè)備驅(qū)動(dòng)程序。
3.1 控制程序
控制程序就是指在Aduc831中運(yùn)行的程序,對(duì)USB控制器的操作是嚴(yán)格按照USB協(xié)議1.1進(jìn)行的,。在實(shí)際開(kāi)發(fā)中使用了控制傳輸和塊傳輸兩種傳輸方式,。控制傳輸主要用來(lái)完成主機(jī)對(duì)設(shè)備的各種控制操作,,也就是用來(lái)實(shí)現(xiàn)位于主機(jī)上的USB總線驅(qū)動(dòng)程序 (USBD.SYS)以及編寫(xiě)的功能驅(qū)動(dòng)程序?qū)υO(shè)備的各種控制操作,。塊傳輸主要用來(lái)完成主機(jī)和設(shè)備間的大批量數(shù)據(jù)傳輸以及對(duì)傳輸數(shù)據(jù)進(jìn)行錯(cuò)誤檢測(cè)(若發(fā)生錯(cuò)誤,它支持“重傳”功能)。
控制程序主要功能有控制A/D采樣, 控制USBN9603接受并處理USB驅(qū)動(dòng)程序的請(qǐng)求及應(yīng)用程序的控制指令,。因?yàn)锳duc831帶有串口下載功能,所以可以很方便的通過(guò)串口將程序下載到Aduc831中,不用仿真機(jī),不用傳統(tǒng)的方法向EEPROM中燒制程序,所以調(diào)試起來(lái)非常方便,。控制程序流程,、中斷處理程序如圖3,、4所示。
3.2 USB設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)
USB設(shè)備驅(qū)動(dòng)程序基于WDM,。WDM
型驅(qū)動(dòng)程序是內(nèi)核程序,,與標(biāo)準(zhǔn)的Win32用戶態(tài)程序不同。采用了分層處理的方法, 較高級(jí)的USB設(shè)備驅(qū)動(dòng)程序和較低級(jí)的USB函數(shù)層,。其中USB函數(shù)層由兩部分組成:較高級(jí)的通用串行總線模塊(USBD)和較低級(jí)的主控制器驅(qū)動(dòng)程序模塊(HCD),。USB設(shè)備驅(qū)動(dòng)程序不必具體對(duì)硬件編程,,所有的USB命令、讀寫(xiě)操作通過(guò)總線驅(qū)動(dòng)程序轉(zhuǎn)給USB設(shè)備,。但是,,USB設(shè)備驅(qū)動(dòng)程序必須定義與外部設(shè)備的通訊接口和通訊的數(shù)據(jù)格式,也必須定義與應(yīng)用程序的接口,。Windows 98/2000提供了一系列的系統(tǒng)驅(qū)動(dòng)程序,,他們具有為許多標(biāo)準(zhǔn)類型設(shè)備服務(wù)所需的所有基本功能,用戶按照提示可以定義設(shè)備的配置和功能,,然后做功能的修改即可,。可以把USB設(shè)備驅(qū)動(dòng)程序的功能劃分成4個(gè)不同的模塊來(lái)實(shí)現(xiàn):初始化模塊,、即插即用管理模塊,、電源管理模塊以及I/O功能實(shí)現(xiàn)模塊。初始化模塊提供1個(gè)入口函數(shù)DriverEntry(),,在DriverEntry中,,需要提供一個(gè)AddDevice例程,把驅(qū)動(dòng)程序添加到驅(qū)動(dòng)程序堆棧中去,。另外,,所有對(duì)各種IRP(I/O請(qǐng)求包)的處理例程都在此入口函數(shù)中作為定義。
DriverEntry(IN PDRIVER_OBJECT DriverObject,…) //驅(qū)動(dòng)程序入口
{
DriverObject->DriverExtension->AddDevice=USBAddDevice;
DriverObject->DriverUnload=USBUnload;
DriverObject->MajorFunction[IRP_MJ_READ]=USBRead;
DriverObject->MajorFunction[IRP_MJ_WRITE]=USBWrite,;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = USBDeviceControl;
RegisterForPnpNotification(DriverObject);
return status;
}
功能,。
電源管理模塊負(fù)責(zé)設(shè)備的掛起與喚醒。
I/O功能實(shí)現(xiàn)模塊完成I/O請(qǐng)求的大部分工作,。若應(yīng)用程序想對(duì)設(shè)備進(jìn)行I/O操作,,它便使用Windows API函數(shù),對(duì)WIN32子系統(tǒng)進(jìn)行WIN32調(diào)用,。此調(diào)用由I/O系統(tǒng)服務(wù)接收并通知I/O管理器,,I/O管理將此請(qǐng)求構(gòu)造成一個(gè)合適的I/O請(qǐng)求包(IRP)并把它傳遞給USB設(shè)備驅(qū)動(dòng)程序。USB設(shè)備驅(qū)動(dòng)程序接收到這個(gè)IRP以后,,根據(jù)IRP中包含的具體操作代碼,,構(gòu)造相應(yīng)的USB請(qǐng)求塊并把此 URB(USB請(qǐng)求塊)放到一個(gè)新的IRP中。然后,,把此IRP傳遞到USB總線驅(qū)動(dòng)程序,,USB總線驅(qū)動(dòng)程序根據(jù)IRP中所含的URB執(zhí)行相應(yīng)的操作(如從USB設(shè)備讀取數(shù)據(jù)等),并把操作結(jié)構(gòu)通過(guò)IRP返還給USB設(shè)備驅(qū)動(dòng)程序,。USB設(shè)備驅(qū)動(dòng)程序接收到此IRP后,,將操作結(jié)果通過(guò)IRP返還給 I/O管理器。最后,,I/O管理器將此IRP中操作結(jié)果返還給應(yīng)用程序,至此應(yīng)用程序?qū)SB設(shè)備的一次I/O操作完成。
結(jié)束語(yǔ):
USB為計(jì)算機(jī)外設(shè)輸入輸出提供了新的接口標(biāo)準(zhǔn),。它使設(shè)備具有熱插拔,,即插即用,自動(dòng)配置的能力,,并標(biāo)準(zhǔn)化設(shè)備連接, 還可與MAX
485結(jié)合起來(lái)實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)程采集,。該系統(tǒng)具有可靠性高、性價(jià)比高和多點(diǎn)采集等優(yōu)點(diǎn),。而USB2.0標(biāo)準(zhǔn)具有更高的傳輸速率,,更具有美好的應(yīng)用前景。
參考文獻(xiàn):
1. Aduc831 datasheet.Analog device.
2. USB1.1.Universal serial bus specification S.
3. 張念淮,、江浩.《USB總線接口開(kāi)發(fā)指南》 國(guó)防工業(yè)出版社.
即插即用管理模塊用來(lái)實(shí)現(xiàn)USB設(shè)備的熱插拔及動(dòng)態(tài)配置,。當(dāng)硬件檢測(cè)到有USB設(shè)備接入時(shí),Windows98查找響應(yīng)的驅(qū)動(dòng)程序,,并調(diào)用它的 DriverEntry例程,。PnP(即插即用)管理器調(diào)用驅(qū)動(dòng)程序的AddDevice例程,告訴它添加了一個(gè)設(shè)備,。在此處理過(guò)程中,,驅(qū)動(dòng)程序收到一個(gè)設(shè)備啟動(dòng)請(qǐng)求(IRP_MN_START_DEVICE)的IRP。同理,,當(dāng)要拔除時(shí),,PnP管理器會(huì)發(fā)出一個(gè)設(shè)備刪除請(qǐng)求(IRP_MN_REMOVE_DEVICE)的IRP,由驅(qū)動(dòng)程序進(jìn)行處理,。通過(guò)對(duì)這些PnP請(qǐng)求的處理,,可支持設(shè)備的熱插拔和即插即用