李健鐸 孟憲華
(東軟醫(yī)療系統(tǒng)股份有限公司,遼寧 沈陽110034)
在醫(yī)療診斷過程中,人體的心電(ECG)在診斷高血壓性心臟病上的臨床意義和應用價值。本設計心電模塊Physio 系統(tǒng)如圖1 主要包括連接電腦端的ECG 組合電纜,處理ECG 信號的邏輯電路,Cypress 型號CY7C64713(FX1)芯片以及Physio 探頭接口插件。

圖1 心電模塊系統(tǒng)
WDF(Windows Driver Foundation)是微軟繼WDM(Windows Driver Model)之后提出的全新的驅(qū)動程序模型,目前在主流Windows7/8/10 操作系統(tǒng)中應用廣泛,相比WDM框架,WDF 框架擁有高度靈活,可擴展,實現(xiàn)了公共驅(qū)動程序功能(如電源管理、PNP 支持)。
本文驅(qū)動設計主要以Windows10 操作系統(tǒng)1803 版為基礎,USB 驅(qū)動主要使用的驅(qū)動程序堆棧是USB 3.0 stack,與USB 2.0 差別在于USB 協(xié)議層加載的基礎驅(qū)動程序堆棧不同,見表1,這導致了WDF 編寫風格的不同。

表1 驅(qū)動程序堆棧
WDF 提供了兩個框架,內(nèi)核模式驅(qū)動程序框架(KMDF)和用戶模式驅(qū)動程序框架(UMDF),本文設計使用的是KMDF 驅(qū)動程序架構(gòu)。
無論是內(nèi)核模式還是用戶模式的驅(qū)動程序,都采用同一套對象模型構(gòu)建,采用了同一個基礎承載,如表2 所示,通過調(diào)用WdfDriverCreate 函數(shù)創(chuàng)建一個驅(qū)動對象,貫穿整體驅(qū)動框架。在WDF 框架中,設備對象是驅(qū)動對象的核心成員,調(diào)用EvtDriverDeviceAdd 函數(shù)來創(chuàng)建所需的設備對象。與WDM不同的是,EvtDriverDeviceAdd 函數(shù)不僅完成創(chuàng)建設備對象,還會創(chuàng)建電源管理模塊、IO 隊列、設備驅(qū)動接口GUID 等一系列功能。

表2 基礎框架接口
KMDF 驅(qū)動不能直接與Physio 心電模塊通信,所以驅(qū)動需要創(chuàng)建請求并將其提交到USB 驅(qū)動程序堆棧進行處理,而每個請求中包含了一個URB 請求塊(USB request block),KMDF 驅(qū)動程序通過URBs 執(zhí)行所有設備特定的操作,包括數(shù)據(jù)傳輸。在將URB 提交到USB 驅(qū)動程序堆棧之前,KMDF 驅(qū)動程序必須用該請求的相關信息對其進行初始化。在Windows10 操作系統(tǒng)下,URBs 初始化方式也有明確的要求。主要分為四個步驟:URB請求包創(chuàng)建、URB 初始化、URB 信息填充、URB 發(fā)送。

表3 URB 基本操作函數(shù)
IO 讀寫函數(shù)不同于WDF 的BULK Write/Read 函數(shù),為了與超聲系統(tǒng)兼容,讀寫函數(shù)在PhysioEvtIoDeviceControl()函數(shù)中執(zhí)行,以讀功能為例,通過FindUsbPipeType()函數(shù)獲取上下文句柄UsbPipeHandle,調(diào)用WdfUsbTargetPipeIsInEndpoint()函數(shù)獲取當 前 管 道 是 IN 還 是 OUT ( 讀 取 為 IN), 利 用WdfUsbTargetPipeFormatRequestForRead()函數(shù),當數(shù)據(jù)被讀取后執(zhí)行后回調(diào)函數(shù)EvtRequestReadCompletionRoutine(),至此,來自心電模塊的采集數(shù)據(jù)就傳遞到系統(tǒng)軟件中。
根據(jù)Cypress 芯片CY7C64713 設計要求,在設備加載驅(qū)動過程中需要下載兩次bix 固件,分別是引導文件physioFX1.bix和功能文件physio.bix。圖2 所示的是正確的加載引導及功能文件后,設備正常枚舉的情況。

圖2 設備枚舉成功
結(jié)合超聲系統(tǒng)環(huán)境,在成人心臟的預設下如圖3 所示,利用心電模擬器進行波形仿真:

圖3 心電模塊模擬仿真圖
本文主要介紹了Windows10 操作系統(tǒng)下的心電模塊的驅(qū)動開發(fā),并在超聲系統(tǒng)中模擬波形驗證,同時圍繞心電模塊進行了相關通道控制測試,確保了設備的安全性及可靠性。