基于VC的USB2.0數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)
USB設(shè)備驅(qū)動(dòng)程序主要是使操作系統(tǒng)能夠識(shí)別USB設(shè)備,建立起主機(jī)端與設(shè)備端之間的通信,它們之間的通信是通過(guò)Windows提供的API函數(shù)實(shí)現(xiàn)的,這些函數(shù)可以控制顯示器、處理信息、訪問(wèn)存儲(chǔ)器、讀寫磁盤和其他設(shè)備。
圖2是USB設(shè)備驅(qū)動(dòng)程序的整體結(jié)構(gòu)圖。
USB設(shè)備驅(qū)動(dòng)的整體結(jié)構(gòu)包括如下5個(gè)主要部分:USB應(yīng)用程序接口、USB設(shè)備驅(qū)動(dòng)函數(shù)、USB中斷服務(wù)程序、USB回調(diào)接口程序、USB標(biāo)準(zhǔn)事件處理程序。
2.2.1 USB應(yīng)用程序接口
USB應(yīng)用程序接口主要功能是對(duì)USB驅(qū)動(dòng)器進(jìn)行軟硬件初始化、打開(kāi)端口、關(guān)閉端口、讀端口、寫端口和端口控制操作。當(dāng)設(shè)備驅(qū)動(dòng)器裝入系統(tǒng)設(shè)備表時(shí),I/O系統(tǒng)就調(diào)用該應(yīng)用程序接口。
USB應(yīng)用程序接口的一個(gè)例程主要包含:
a)對(duì)USB端口安裝、初始化和硬件配置(USB_init())。初始化步驟為:將USB設(shè)備驅(qū)動(dòng)器安裝到I/O系統(tǒng)設(shè)備表中,獲取USB控制器使用的中斷號(hào),初始化USB驅(qū)動(dòng)器數(shù)據(jù)結(jié)構(gòu)與USB端口狀態(tài)寄存器,啟動(dòng)USB標(biāo)準(zhǔn)事件處理程序。
b)打開(kāi)USB端口(USB_open())。USB_open函數(shù)允許應(yīng)用程序打開(kāi)一個(gè)USB端口和選擇DMA數(shù)據(jù)傳輸方式。
c)關(guān)閉USB端口(USB_close())。USB_close函數(shù)允許應(yīng)用程序關(guān)閉一個(gè)端口,并關(guān)閉DMA通道。
d)對(duì)USB端口進(jìn)行讀操作(USB_read())。USB_read函數(shù)允許應(yīng)用程序從輸出端口或控制端口讀取一定量的數(shù)據(jù)。
e)對(duì)USB端口進(jìn)行寫操作(USB_write())。USB_write函數(shù)與USB_read函數(shù)功能類似,允許應(yīng)用程序?qū)憯?shù)據(jù)到輸入端口或控制端口。
f)對(duì)USB設(shè)備進(jìn)行I/O控制操作(USB_ioctl())。
2.2.2 USB中斷服務(wù)程序
USB控制器產(chǎn)生單一中斷,多個(gè)端口共享。每個(gè)端口產(chǎn)生ACK、NACK/ERROR中斷;輸出端口產(chǎn)生接收零字節(jié)包或短包中斷;控制端口0接收設(shè)置包時(shí)產(chǎn)生中斷;USB控制器產(chǎn)生USB事件中斷,如幀起始(SOF)、掛起、恢復(fù)和復(fù)位。先識(shí)別發(fā)生USB中斷的類型以清除中斷產(chǎn)生的條件,再讀USB狀態(tài)寄存器,獲取當(dāng)前配置、接口或幀起始時(shí)間戳狀態(tài)信息,最后向USB控制器消息隊(duì)列或回調(diào)函數(shù)的接收消息隊(duì)列發(fā)送中斷消息。
2.2.3 USB標(biāo)準(zhǔn)事件處理程序
USB驅(qū)動(dòng)器初始化后,啟動(dòng)USB標(biāo)準(zhǔn)事件處理程序負(fù)責(zé)處理枚舉過(guò)程和異步USB事件。事件處理程序使用控制端口0,直到完成枚舉過(guò)程。當(dāng)USB應(yīng)用程序處于非活動(dòng)狀態(tài)時(shí),除控制端口0以外端口均不可訪問(wèn)。事件處理程序在端口0上執(zhí)行控制操作,響應(yīng)USB標(biāo)準(zhǔn)請(qǐng)求,并負(fù)責(zé)通知USB應(yīng)用程序枚舉完成和接口活動(dòng)狀態(tài),USB事件通過(guò)回調(diào)接口傳遞到USB外設(shè)應(yīng)用程序。當(dāng)對(duì)USB端口枚舉操作完成,USB應(yīng)用程序就可打開(kāi)并使用USB端口。
評(píng)論