基于USB總線的數據采集設備的設計與實現
3 設備驅動程序設計
USB設備驅動程序的設計是基于WDM(Windows Driver Model,Windows驅動程序模型)的4。WDM采用分層驅動程序模型,對于USB設備來說,可分為USB總線驅動程序和USB功能驅動程序(見圖2)。
USB總線驅動程序由操作系統提供,它位于USB功能驅動程序的下面,負責與實際的硬件打交道,實現煩瑣的低層通信。USB功能驅動程序由設備開發者編寫,位于USB總線驅動程序的上面,不與實際的硬件打交道,而是通過向USB總線驅動程序發送包含URB(USB Request Block,USB請求塊)的IRP(I/O Request Packet,I/O請求包),來實現對USB設備信息的發送或接收。采用這種分層驅動程序的設計方法有兩個優點:(1)多個USB設備可以通過USB總線驅動程序來協調它們的工作;(2)編寫分層驅動程序較之編寫單一驅動程序相對簡單,且可以節省內存和資源,不易出錯。 USB設備驅動程序的工作原理可以通過圖2簡單描述。
若應用程序想對設備進行I/O操作,它便使用Windows API 函數(如DeviceloControl 函數)對WIN32子系統進行WIN32調用。此調用由I/O系統服務接收并通知I/O管理器,I/O管理器將此請求構造成一個合適的I/O請求包(I/O Request Packet,IRP)并把它傳遞給USB功能驅動程序。USB功能驅動程序接收到這個IRP以后,根據IRP中包含的具體操作代碼,構造相應的USB請求塊并把此URB放到一個新的IRP中,然后把此IRP傳遞到USB總線驅動程序,USB總線驅動程序根據IRP中所含的URB執行相應的操作(如從USB設備讀取數據),并把操作結果通過IRP返還給USB功能驅動程序。USB功能驅動程序接收到此IRP后,將操作結果通過IRP返還給I/O管理器,最后I/O管理器將此IRP中操作結果返還給應用程序,至此應用程序對USB設備的一次I/O操作完成。
USB功能驅動程序除負責處理應用程序的I/O請求外,還要處理PnP管理器發送給它的PnP請求(如設備啟動請求IRP_MN_START_DEVICE,設備刪除請求IRP_MN_REMOVE_DEVICE等)。通過對這些PnP請求的處理,USB功能驅動程序可支持設備的熱插拔和即插即用功能。
驅動程序的入口函數是DriverEntry( ),所有對各種IRP的處理例程都在此入口函數中做出定義。
開發USB設備驅動程序的工具有Microsoft公司的Win98DDK,Compuware公司的Numega DriverStudio等。筆者在實際開發中使用了Win98DDK。
4 應用軟件的設計
用戶態的軟件設計由兩個部分組成:動態鏈接庫和應用程序。動態連接庫負責與內核態的USB功能驅動程序通信并接受應用程序的各種操作請求,而應用程序負責對所采集的數據進行實時顯示、分析和存盤。
動態鏈接庫的工作原理如下:當它收到應用程序開始采樣的請求后,便創建兩個線程:采樣線程和顯示存盤線程。采樣線程負責將采集數據寫到應用程序提交的內存;而顯示存盤線程由多媒體定時器控制(每隔一段時間多媒體定時器就調用一次此線程),此線程負責給應用程序發送顯示和存盤消息。當應用程序接收到此消息后,便從它提交的內存中讀取數據并顯示和存盤。此處需要注意的是采樣線程和顯示存盤線程在讀寫應用程序提交的內存時要保持同步(如當采樣線程正在向內存進行寫操作時顯示存盤線程就不能對此段內存進行讀操作,否則就有可能導致讀寫錯誤)。保持線程同步的方法很多,如互斥量(Mutex)、信號量(Semiphore)和事件(Event)。此處使用了互斥量。
USB總線的特點使其非常適合于作為醫療儀器與主機之間的通訊接口,實現主機和醫學儀器之間的簡單、快速和可靠的連接。
基于USB總線的醫學數據采集設備,在實際應用中取得了良好的效果。同時,它也為數據采集提供了一種新穎的、方便的和可靠的解決方案。
參考文獻
1 USB1.1. Universal serial bus specification S
2 曾樂朋,高小榕,李明毅. 12導聯同步心電采集測量系統及QT/QTd分析J. 清華大學學報2000;4095~8
3 李全政 高小榕 歐陽婧. 胸阻抗信號中的呼吸波的去除J. 清華大學學報200040 9 13~16
4 Chris Cant著,孫義譯.Windows WDM 設備驅動程序開發指南M. 北京:機械工業出版社 2000
評論