劉 杰,刁節(jié)濤,李 楠,孫兆林
(國防科學技術大學 電子科學與工程學院,湖南 長沙 410073)
?
基于EZ-USB FX3的驅動程序設計
劉杰,刁節(jié)濤,李楠,孫兆林
(國防科學技術大學 電子科學與工程學院,湖南 長沙 410073)
摘要USB3.0數(shù)據(jù)傳輸接口以其在傳輸速度方面具有的優(yōu)勢正逐漸取代USB2.0接口成為電子設備接口的主流,驅動開發(fā)需求也與日俱增。傳統(tǒng)的Driver Studio+WDM驅動設計方法難度大、耗時長,已無法滿足現(xiàn)實應用需求。文中采用全新的WDF驅動架構,通過通用驅動程序改進的方法,在Visual Studio2013+WDK8.1的開發(fā)、編譯環(huán)境下進行了USB3.0驅動程序設計。實驗結果表明,該方法設計的驅動可穩(wěn)定運行,有效地降低了驅動開發(fā)難度,并且縮短了開發(fā)周期。
關鍵詞USB3.0驅動;WDF; EZ-USB FX3
USB(UniversalSerialBus)接口自誕生以來已經(jīng)走過了10多年的歷史,其具有廉價、易用、傳輸速度快、兼容性好等一系列優(yōu)點,被廣泛用于電子設備的數(shù)據(jù)傳輸接口。以前,USB開發(fā)者采用WDM的驅動模式進行Windows操作系統(tǒng)下的USB驅動開發(fā),但在Windows操作系統(tǒng)經(jīng)歷了Win7、Win8和最新的Win10革新之后,原始的WDM模式已經(jīng)無法滿足現(xiàn)實的驅動開發(fā)需求。因此,WDF這種新的驅動開發(fā)模式應運而生。
賽普拉斯的EZ-USBFX3是新一代USB3.0外設控制器,其集成了USB3.0和USB2.0 傳輸接口和32位ARM926EJ-S微處理器[1],具有強大的數(shù)據(jù)處理能力,在數(shù)據(jù)傳輸領域充當著重要角色。本文利用賽普拉斯公司的EZ-USBFX3硬件平臺,采用WDF的驅動架構對USB3.0的驅動開發(fā)進行了探索,并在Win7操作系統(tǒng)下進行了驗證,對其他Windows驅動程序的開發(fā)具有重要的參考價值。
1EZ-USB FX3
EZ-USBFX3是賽普拉斯公司生產(chǎn)的新一代集成了ARM9處理器的USB3.0外設控制器,開發(fā)者利用EZ-USBFX3可方便地將USB3.0傳輸接口集成到任何數(shù)據(jù)傳輸系統(tǒng)中,實現(xiàn)海量數(shù)據(jù)的快速傳輸。FX3集成了USB3.0和USB2.0的物理層,利用ARM9強大的數(shù)據(jù)處理功能能訪問外設中的數(shù)據(jù)流并高效的處理數(shù)據(jù)。EZ-USBFX3集成了高速USB數(shù)據(jù)傳輸接口,支持USB外設功能,符合USB3.0規(guī)范,并能向下兼容USB2.0規(guī)范。EZ-USBFX3具有支持高速、全速和低速OTG角色轉換的功能,可支持16個輸入端點和16個輸出端點。當作為外設時,F(xiàn)X3具有實現(xiàn)超速、高速和全速的功能,作為主機時具有可實現(xiàn)高速、全速和低速的功能。
2USB3.0驅動設計及實現(xiàn)
2.1WDF驅動模式
WDF驅動模式包含了兩套子框架系統(tǒng),即KMDF框架和UMDF框架。其中,KMDF框架是用來編寫內核驅動的,而UMDF框架則是用來編寫用戶層驅動。如無特殊說明,WDF框架就指的是KMDF框架。
早期的驅動開發(fā)都是基于WDM驅動框架的。由于對IRP的管理、使用失措而導致的驅動問題是WDM程序的一大難點,微軟后來放棄了該驅動模型,開發(fā)出了基于對象技術的KMDF驅動模型。KMDF驅動模型大幅減少了驅動開發(fā)者的代碼書寫量,縮短了驅動程序開發(fā)周期,同時也大幅降低了驅動編寫出錯的概率。
KMDF驅動程序框架由對象和事件回調例程構成[2]。一個USB設備的KMDF驅動程序通常包括一個DriverEntry例程、一個EvtDriverDeviceAdd例程、一個或多個I/O隊列、一個或多個I/O事件回調例程、電源管理例程以及其他回調例程。這種基于對象的WDF驅動模式能夠兼容WDM模式的驅動,其優(yōu)越性是WDM驅動模式無法比擬的。
2.2驅動工作原理
USB接口傳輸數(shù)據(jù)時,首先由USB主控制器發(fā)出請求和數(shù)據(jù),通過根集線器逐層向下發(fā)給USB設備,從設備對接收到的請求做出響應后再逐層向上返回給USB主控制器,由主控制器將數(shù)據(jù)交給計算機CPU進行處理,如圖1所示。
圖1 USB接口信息傳遞模型
USB驅動程序在信息過程中起著重要的樞紐作用。應用程序將傳輸數(shù)據(jù)保存在內存緩沖區(qū)中,然后向相應的USB設備發(fā)出數(shù)據(jù)傳輸請求,USB設備的驅動程序對IRP(I/O請求包)做出響應,將接收到的數(shù)據(jù)轉化成USB協(xié)議中規(guī)定的事物處理格式。USB主控制器將接收到的每一個事物處理以數(shù)據(jù)幀的形式放進事物處理隊列中,然后通過USB接口電纜將事物處理以消息包的形式發(fā)送到USB總線上。USB功能設備從總線上接收到信息后對數(shù)據(jù)包進行解析,并將解析后的數(shù)據(jù)保存在端點緩沖區(qū)中。
2.3USB3.0驅動設計
USB驅動屬于設備驅動,是溝通USB主機與外部USB設備之間的橋梁。常見的USB驅動開發(fā)有兩種方法:一種是采用WDK程序生成的KMDF基本框架進行各種例程的設計,這種驅動開發(fā)過程相當復雜,耗時長,且在開發(fā)過程中極容易出現(xiàn)因USB主機內存泄露而導致藍屏或死機的情況;另一種方法就是在現(xiàn)有通用驅動的基礎上進行修改,通過添加或刪除相應的例程而完成驅動設計。其實現(xiàn)在有諸多優(yōu)秀的USB通用驅動程序,如微軟的通用USB驅動程序。這種通過合理利用通用驅動程序的方法可加快USB設備驅動程序開發(fā)的速度,降低開發(fā)難度,提高驅動的穩(wěn)定性。文中采用第二種方法,在VisualStudio2013+WDK8.1的開發(fā)和編譯環(huán)境下,利用微軟提供的通用USB2.0驅動程序完成了基于EZ-USBFX3硬件平臺的USB3.0驅動程序開發(fā)。
在Windows系統(tǒng)中,一個設備的驅動安裝程序包含兩個文件,后綴名為.sys的驅動文件和后綴名為.inf的驅動引導安裝文件。本文利用微軟官網(wǎng)提供的ezusb.sys通用USB驅動模板,通過修改IOCTL驅動接口開發(fā)USB3.0的.sys文件,其中主要差異如表1所示。上層應用程序通過調用DeviceIOControl()函數(shù)獲得IOCTL接口的返回值,從而實現(xiàn)與底層硬件設備的指令和數(shù)據(jù)交互[3-6]。完成.sys文件設計后,還要對.inf文件進行設計,提供對.sys文件的安裝支持,以確保硬件設備在連接主機之后能夠被正確配置。每一個USB設備均有一個獨特的VID和PID,需要根據(jù)實際情況來修改VID和PID的值以適應硬件的改動,本文對應設備的VID和PID的值如下:
[Microsoft.NT$ARCH$]
;USB系列芯片的ID
%USB
在inf文件的[string]節(jié)下列出了設備的字符串信息,開發(fā)者需要根據(jù)需求修改這些字符串,本文修改代碼如下
[Strings]
MSFT=”ESSS_LIUJIE”
MfgName=”ESSS”
Disk_Description=”EZ-USBFX3InstallationDisk”
USB
kmdf_CyUSB.SvcDesc=”WDFSampleBusDriverforEZ-USBFX3DevelopmentKit”
ClassName= “SampleDevice”
Switch.DeviceDesc= “EZ-USBFX3Sample”
SPSVCINST_ASSOCSERVICE= 0x00000002
通過對.inf文件和.inf文件的設計,可編譯生成一個完整的USB驅動程序,其他Windows驅動程序的開發(fā)過程與此類似。本文在VisualStudio2013+WDK8.1的配置環(huán)境下最終設計、編譯生成了EZ-USBFX3的設備驅動程序。
表1 ezusb.sys和cyusb3.sys的IOCTL接口對照表
2.4驅動安裝
USB設備驅動程序的安裝過程如圖2所示。USB設備插入主機后,操作系統(tǒng)會自動搜索驅動程序,當無法找到合適的驅動程序時,系統(tǒng)會提示安裝自定義驅動程序,此時找到.inf文件所在的目錄。操作系統(tǒng)讀取.inf文件中的硬件ID信息,并與USB設備的ID比對,當匹配成功后,操作系統(tǒng)會將驅動程序(.sys文件)和相應的.inf文件復制到系統(tǒng)驅動目錄下,并將硬件設備的基本信息保存在注冊表中,等到下一次插入該USB設備時,操作系統(tǒng)便會自動加載相應驅動程序,無需再次手動安裝。
3測試結果
將EZ-USBFX3設備連接到主機USB接口上,主機會對相應的接口進行枚舉操作,當檢測到有硬件設備接入后,系統(tǒng)會提示安裝驅動程序。指定.inf文件所在的目錄,操作系統(tǒng)讀取.inf文件中的硬件ID信息,并與USB設備的ID比對,匹配成功后,操作系統(tǒng)會將驅動程序(.sys文件)和相應的.inf文件復制到系統(tǒng)驅動目錄下,實際驅動安裝效果如圖3所示。成功安裝驅動程序后,通過設備管理器可以看到設備的詳細信息。打開USBControlCenter客戶端,可在左側面板上看到該USB設備的一些基本信息,該USB設備即可正常工作,如圖4所示。
圖2 USB設備驅動程序安裝流程
圖3 USB設備驅動程序安裝效果圖
圖4 USB設備驅動驗證結果
4結束語
本文分析了USB設備驅動程序的工作機制,采用WDF的驅動模式,在VisualStudio2013+WDK8.1環(huán)境下通過通用USB驅動程序改進的方法設計了基于賽普拉斯公司EZ-USBFX3硬件設備的驅動程序。該設計方法大幅降低了USB3.0驅動開發(fā)難度,縮短了開發(fā)周期,且所設計的驅動程序具有較好的穩(wěn)定性、兼容性與可移植性。經(jīng)過測試,所設計的USB3.0驅動程序在Win7操作系統(tǒng)下運行穩(wěn)定、可靠,為其他驅動程序的開發(fā)提供了參考。
參考文獻
[1]鄭杰.USB3.0編程寶典[M].北京:電子工業(yè)出版社,2013.
[2]武安河.Windows設備驅動程序WDF開發(fā)[M].北京:電子工業(yè)出版社,2009.
[3]CypressSemiconductor.CypressCyAPIprogrammer’sreference[M].SanJose,CA,USA:CypressSemiconductor,2011.
[4]SkottKim.USB3.0EZ-USBFX3orientation[M].SanJose,CA,UAS:CypressSemiconductor,2011.
[5]CypressSemiconductor.CypressCyAPIprogrammer’sreference[M].SanJose,CA,USA:CypressSemiconductor,2011.
[6]CypressSemiconductor.EZ-USBFX3developmentkitguide[M].SanJose,CA,UAS:CypressSemiconductor,2011.
[7]代月松.USB3.0在存儲測試系統(tǒng)中的研究[D].太原:中北大學,2013.
[8]張佩,馬勇,董鑒源.竹林蹊徑:深入淺出Windows驅動開發(fā)[M].北京:電子工業(yè)出版社,2011.
[9]文治洪,胡文東,李曉京,等.基于PL2303的USB接口設計[J].電子設計工程,2010,18(1):32-34.
[10]范玉磊,謝昌斌,付麗琴.基于DriverStudio的WDM型USB設備驅動的開發(fā)[J].核電子學與探測技術,2011,31(2):232-234.
[11]周立功.USB2.0與OTG規(guī)范及開發(fā)指南[M].北京:北京航空航天大學出版社,2004.
Driver Design Based on EZ-USB FX3
LIUJie,DIAOJietao,LINan,SUNZhaolin
(SchoolofElectronicScienceandEngineering,NationalUniversityofDefenseTechnology,
Changsha410073,China)
AbstractUSB3.0 data transfer interface is gradually replacing the USB2.0 interface as the protagonist of the electronic device interface with its significant advantages in terms of transmission speed and the needs for driven development are also increasing. The traditional driver design approach with Driver Studio + WDM structure fails to meet the needs for real-world applications due to the complex structure and the huge time consumption. In this paper, the USB3.0 driver is designed with a new WDF driver architecture in Visual Studio2013 + WDK8.1 development and compilation environment by the universal driver improved method. Results show that the driver designed by this method works stably, effectively reducing the driver development effort and shortens the development cycle.
KeywordsUSB3.0 driver; WDF; EZ-USB FX3
收稿日期:2015- 11- 18
作者簡介:劉杰(1992-),男,碩士研究生。研究方向:嵌入式系統(tǒng)與固態(tài)存儲技術。
doi:10.16180/j.cnki.issn1007-7820.2016.07.020
中圖分類號TP334.7
文獻標識碼A
文章編號1007-7820(2016)07-068-04