USB驅(qū)動(dòng)編程培訓(xùn)uload_第1頁
USB驅(qū)動(dòng)編程培訓(xùn)uload_第2頁
USB驅(qū)動(dòng)編程培訓(xùn)uload_第3頁
USB驅(qū)動(dòng)編程培訓(xùn)uload_第4頁
USB驅(qū)動(dòng)編程培訓(xùn)uload_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

USB驅(qū)動(dòng)編程2023/1/181簡介USB編碼以及總線數(shù)據(jù)結(jié)構(gòu)USB數(shù)據(jù)流模型USB的PNP管理USB的電源管理USB數(shù)據(jù)包與應(yīng)用程序2023/1/182USB編碼以及總線數(shù)據(jù)結(jié)構(gòu)USB編碼USB總線數(shù)據(jù)結(jié)構(gòu)包傳輸事務(wù)幀結(jié)構(gòu)2023/1/183USB編碼USB接口針腳結(jié)構(gòu):同步時(shí)鐘+數(shù)據(jù):采用了NRZI(NonReturntoZeroInvert)反向非歸零編碼;既能保證數(shù)據(jù)傳送的完整,也不需要獨(dú)立的時(shí)鐘信號(hào)2023/1/184包(Package)包的格式:令牌包,數(shù)據(jù)包,握手包2023/1/185用7個(gè)0和1個(gè)1作為同步序列USB傳輸事務(wù)(Transaction)2023/1/186每個(gè)傳輸事務(wù)由三個(gè)包組成。幀結(jié)構(gòu)(Frame)每個(gè)幀內(nèi)數(shù)據(jù)由傳輸事務(wù)組合組成2023/1/187USB總線數(shù)據(jù)結(jié)構(gòu)由于有許多設(shè)備都接到了USB上,因此每1ms產(chǎn)生的傳輸幀是混合的。其中中斷傳輸(Interrupt)和同步傳輸(Isochronous)對(duì)時(shí)間要求高,因此占用了約90%的總帶寬,控制傳輸(Control)占用了約10%的帶寬,而批量傳輸(Bulk)則使用剩下的可用帶寬2023/1/188USB數(shù)據(jù)流模型USB協(xié)議簡介USB外設(shè)與總線數(shù)據(jù)流模型模型整體框架參與通信抽象對(duì)象實(shí)際數(shù)據(jù)流向驅(qū)動(dòng)程序與系統(tǒng)內(nèi)核之間的關(guān)系USB驅(qū)動(dòng)例程中的一些回調(diào)接口2023/1/189USB協(xié)議簡介USB協(xié)議:USB采用輪詢的廣播機(jī)制傳輸數(shù)據(jù),即“令牌包,數(shù)據(jù)包,握手包”;根據(jù)包標(biāo)識(shí)符PID字段,用于識(shí)別數(shù)據(jù)包類型;字段->包->傳輸事務(wù)->幀;不同傳輸模式是通過相應(yīng)的傳輸事務(wù)序列下實(shí)現(xiàn)的。2023/1/1810USB外設(shè)與總總線2023/1/411PC機(jī)上USB接口設(shè)備備的連接接拓?fù)浣Y(jié)結(jié)構(gòu)數(shù)據(jù)流模模型USB必須分層層理解::用戶應(yīng)用用程序;;IO管理器層層;驅(qū)動(dòng)程序序;硬件抽象象層(HAL);硬件外設(shè)設(shè)2023/1/412模型整體體框架客戶軟件件:對(duì)設(shè)備功功能進(jìn)行行操作軟軟件,它它是針對(duì)對(duì)物理理設(shè)備功功能開發(fā)發(fā)的。USB系統(tǒng):它包括括操作系系統(tǒng)對(duì)USB支持,USB控制器總總線驅(qū)動(dòng)動(dòng),既占占硬件也也占軟件件,好比比一個(gè)翻翻譯。USB設(shè)備驅(qū)動(dòng)動(dòng):客戶端端軟件與與USB系統(tǒng)的之之間的接接口。USB控制器將IRP譯碼成USB協(xié)議數(shù)據(jù)據(jù)傳輸?shù)降経SB總線上;;2023/1/413參與通信的的抽象對(duì)象象通道(pipe):就是主機(jī)機(jī)與設(shè)備之之間傳輸?shù)牡臄?shù)據(jù)的模模型共有兩兩種類型的的管道:無格式的流流管道(StreamPipe)和有格式的信信息管道((MessagePipe)2023/1/414參與通信的的抽象對(duì)象象邏輯設(shè)備(device):驅(qū)動(dòng)程序?qū)?duì)應(yīng)硬件實(shí)實(shí)際功能暴暴露給操作作系統(tǒng)內(nèi)核核接口的抽抽象對(duì)象;;每個(gè)設(shè)備備都有一個(gè)個(gè)默認(rèn)的控控制端點(diǎn)。配置(Configuration):用于設(shè)置一一些結(jié)構(gòu)來來設(shè)定設(shè)備備功能接口口。接口(Interface):邏輯設(shè)備中中功能相近近相同的一一些端點(diǎn)的的集合。端點(diǎn)(EndPonit):位于USB設(shè)備或主機(jī)機(jī)上的一個(gè)個(gè)數(shù)據(jù)緩沖沖區(qū),用來來存放和發(fā)發(fā)送USB的各種數(shù)據(jù)據(jù),每一個(gè)個(gè)端點(diǎn)都有有惟一的確確定地址,,有不同的的傳輸特性性(如輸入入端點(diǎn)、輸輸出端點(diǎn)、、配置端點(diǎn)點(diǎn)、批量傳傳輸端點(diǎn)))2023/1/415實(shí)際數(shù)據(jù)流流如右圖所示示:客戶軟件通通過USB設(shè)備驅(qū)動(dòng)(USBD)發(fā)送IRQ請(qǐng)求請(qǐng)求傳傳送數(shù)據(jù);;主機(jī)控制器器驅(qū)動(dòng)(HCD)將接收IRQ請(qǐng)求解析成成USB傳輸和傳輸輸事務(wù)。主機(jī)控制器器將這些USB傳輸和傳輸輸事務(wù)打包包成USB協(xié)議數(shù)據(jù)包包通過USB總線傳輸給給USB設(shè)備交互2023/1/416驅(qū)動(dòng)動(dòng)程程序序與與操操作作系系統(tǒng)統(tǒng)之之間間的的關(guān)關(guān)系系USB總線線的的設(shè)設(shè)備備也也屬屬于于即即插插即即用用設(shè)設(shè)備備,,由由上上一一小小節(jié)節(jié)可可知知,,USB驅(qū)動(dòng)動(dòng)程程序序主主要要還還是是通通過過IRP包進(jìn)進(jìn)行行數(shù)數(shù)據(jù)據(jù)交交換換,,操操作作系系統(tǒng)統(tǒng)主主要要就就是是通通過過PNP管理理器器與與IO管理理器器與與以以及及部部分分內(nèi)內(nèi)核核對(duì)對(duì)USB驅(qū)動(dòng)動(dòng)程程序序的的中中斷斷,,內(nèi)內(nèi)存存資資源源進(jìn)進(jìn)行行管管理理;;2023/1/417操作系統(tǒng)用戶模式IO管理器即插即用PNP管理器操作系統(tǒng)內(nèi)核USB驅(qū)動(dòng)程序硬件抽象層USB硬件設(shè)備USB驅(qū)動(dòng)動(dòng)程程序序一一些些例例程程函函數(shù)數(shù)接接口口在USB驅(qū)動(dòng)程序入口口例程DriverEntry中,DRVER_OBJECT對(duì)象專門在majorFuction數(shù)組預(yù)留以下下接口處理相相對(duì)應(yīng)的IRP:IRP_MJ_CREATE以文件件形式式打開開設(shè)備備準(zhǔn)備備讀寫寫,調(diào)用其其做準(zhǔn)準(zhǔn)備;;IRP_MJ_CLOSE當(dāng)前用用戶關(guān)關(guān)閉文文件((closeHandle)時(shí),,調(diào)用用它清清掃系系統(tǒng);;IRP_MJ_PNP處理即即插即即用的的操作作IRP_MJ_READ處理讀讀文件件操作作(ReadFile)IRP_MJ_WRITE處理寫寫文件件操作作(WriteFile)IRP_MJ_DEVICE_CONTROL處理來之硬硬件對(duì)操作作系統(tǒng)的IO控制碼。2023/1/418IRP_MJ_CREAT以文件形形式打開開設(shè)備,,檢查設(shè)設(shè)備狀態(tài)態(tài),是否否正常工工作;取消設(shè)備備掛起,,打開管管道,并并將此管管道與文文件的變變量相關(guān)關(guān)聯(lián);OpenHandleCount內(nèi)核對(duì)象象計(jì)數(shù)加加一;這是creafile相關(guān)聯(lián)的的;2023/1/419檢查設(shè)備工作狀態(tài)打開設(shè)備管道內(nèi)核對(duì)象計(jì)數(shù)加一IRP_MJ_READ和IRP_MJ_WRITE初始化初始化URB取得管道建立緩沖區(qū)檢查MDL設(shè)置URB標(biāo)志位內(nèi)存交換映像數(shù)據(jù)構(gòu)造URB請(qǐng)求單獨(dú)一個(gè)個(gè)例程完完成他們們:初始化URB,并判斷斷通道工工作方式式,并從從文件中中獲取管管道信息息。檢查IRP的MDL(amemorydescriptorlist),根據(jù)讀寫寫變量設(shè)設(shè)置URB標(biāo)志位。。根據(jù)MDL開辟內(nèi)存存,上層層用戶模模式數(shù)據(jù)據(jù)映像,,構(gòu)造URB請(qǐng)求;2023/1/420PNP即插即用用管理器器PNP管理器概概述以及及相關(guān)組組件即插即用用IRPPNP管理器在在USB驅(qū)動(dòng)程序序的操作作2023/1/421PNP管理器概述什么是PNP管理器呢?PNPplugandplay即插即用設(shè)備備管理,其主主要有以下四四個(gè)作用:操作系統(tǒng)能檢檢測新設(shè)備插插入,也能檢檢測得到設(shè)備備的拔出;如果總線接口口允許,設(shè)備備可以實(shí)現(xiàn)熱熱插拔,并保保證操作系統(tǒng)統(tǒng)正常工作;;設(shè)備允許軟件件配置。操作系統(tǒng)應(yīng)該該知道哪些是是正確的驅(qū)動(dòng)動(dòng)程序,并智智能地加載。。2023/1/422PNP即插即用管理理器相關(guān)組件件2023/1/423即插即用管理程序(用戶模式)用戶模式內(nèi)核模式注冊表IO管理器執(zhí)行體即插即用管理理程序電源管理程序序設(shè)備wdm驅(qū)動(dòng)程序總線驅(qū)動(dòng)程序硬件抽象層HAL即插即用IRP即插即用IRP(IRP_MJ_PNP):由即插即用管管理器發(fā)送給給設(shè)備驅(qū)動(dòng)程程序的;在驅(qū)動(dòng)對(duì)象的的主功能函數(shù)數(shù)內(nèi)有一個(gè)回回調(diào)派遣函數(shù)數(shù)用于處理PNP的IRP包;不用的IRP代表不同的功功能,如下表表所示:2023/1/4242023/1/425子功能代碼描述IRP_MN_START_DEVICE配置并初始化設(shè)備IRP_MN_QUERY_REMOVE_DEVICE設(shè)備可以被安全的刪除IRP_MN_REMOVE_DEVICE關(guān)閉并刪除設(shè)備IRP_MN_CANCEL_REMOVE_DEVICE忽略以前的QIERY_REMOVEIRP_MN_STOP_DEVICE關(guān)閉設(shè)備IRP_MN_QUERY_STOP_DEVICE詢問設(shè)備可以關(guān)閉了嗎IRP_MN_CANCEL_STOP_DEVICE忽略以前的QUERY_STOPIRP_MN_DEVICE_RELATIONS給出指定特征的設(shè)備列表IRP_MN_QUERY_INTERFACE獲得調(diào)用函數(shù)接口地址IRP_MN_CAPABILITIES取得設(shè)備能力IRP_MN_QUERY_RESOURCES取得引導(dǎo)配置IRP_MN_QUERY_RESOURCES_REQUIREMENTS取IO資源需求IRP_MN_QUERY_DEVICE_TEXT獲得描述信息或位置串IRP_MN_QUERY_PNP_DEIVCE_STATE獲取設(shè)備狀態(tài)IRP_MN_QUERY_BUS_INFORMATION*獲取父總線類型IRP_MN_SUPPRISE_REMOVE通知設(shè)備意外被刪除PNP管理理器器對(duì)對(duì)USB總線線的的管管理理2023/1/426USB驅(qū)動(dòng)動(dòng)程程序序在在完完成成即即插插即即拔拔PNP整過過所所操操作作數(shù)數(shù)據(jù)據(jù)結(jié)結(jié)構(gòu)構(gòu)::URP(USBRequstPackage)USB請(qǐng)求求包包,,這這個(gè)個(gè)數(shù)數(shù)據(jù)據(jù)結(jié)結(jié)構(gòu)構(gòu)也也是是通通過過操操作作IRP的內(nèi)內(nèi)核核函函數(shù)數(shù)傳傳送送直直總總線線驅(qū)驅(qū)動(dòng)動(dòng)層層上上。。通過過操操作作URP進(jìn)行行對(duì)對(duì)USB設(shè)備備熱熱插插拔拔的的枚枚舉舉,,配配置置和和刪刪除除。。通過過對(duì)對(duì)URP的PNP管理理操操作作我我們們可可以以得得到到來來自自硬硬件件數(shù)數(shù)據(jù)據(jù)描描述述,,如如::設(shè)設(shè)備備描描述述符符,,配配置置描描述述符符,,接接口口描描述述符符,,端端點(diǎn)點(diǎn)描描述述符符。。如圖圖可可見見這這些些數(shù)數(shù)據(jù)據(jù)的的樹樹狀狀結(jié)結(jié)構(gòu)構(gòu)::2023/1/4272023/1/428USB電源源管管理理WDM電源源管管理理模模型型概概述述基本本概概念念電源源狀狀態(tài)態(tài)和和設(shè)設(shè)備備狀狀態(tài)態(tài)關(guān)于于USB電源源管管理理策策略略USB處理理電電源源管管理理的的基基本本IRP規(guī)則則USB驅(qū)動(dòng)動(dòng)應(yīng)應(yīng)該該響響應(yīng)應(yīng)的的電電源源管管理理器器發(fā)發(fā)出出IRP2023/1/429WDM電源源管管理理模模型型基本本概概念念::電源源管管理理器器::為為了了于于減減少少系系統(tǒng)統(tǒng)不不必必要要的的功功耗耗,,基基于于ACPI(AdvancedConfigurationPowerInterface)規(guī)范范作作為為計(jì)計(jì)算算機(jī)機(jī)全全局局電電源源策策略略,,操操作作系系統(tǒng)統(tǒng)支支持持一一些些用用戶戶接接口口,,用用戶戶可可以以通通過過這這些些接接口口控控制制最最終終的的電電源源管管理理策策略略。。電源源管管理理是是操操作作系系統(tǒng)統(tǒng)通通過過處處理理驅(qū)驅(qū)動(dòng)動(dòng)程程序序來來實(shí)實(shí)現(xiàn)現(xiàn)的的。。支持持PNP的驅(qū)驅(qū)動(dòng)動(dòng)必必須須支支持持電電源源管管理理,,支支持持電電源源管管理理的的驅(qū)驅(qū)動(dòng)動(dòng)程程序序必必須須支支持持PNP,兩者是被被集成而而相互依依賴。2023/1/430電源狀態(tài)態(tài)分以下下六個(gè)狀狀態(tài):2023/1/431系統(tǒng)電源狀態(tài)含義SO(Working)CPU全功率運(yùn)行S1(Sleeping1)CPU停止,RAM被刷新S2(Sleeping2)CPU不通電,RAM被刷新S3(Sleeping3)CPU不通電,RAM處于低速刷新模式,電源功率輸出降低S4(Hibemate)系統(tǒng)停止,RAM被保存到磁盤S5(Shutdown)系統(tǒng)停止并關(guān)閉,需要完全引導(dǎo)以恢復(fù)操作設(shè)備電源狀態(tài)態(tài):操作系統(tǒng)不直直接處理設(shè)備備的電源狀態(tài)態(tài),而是有驅(qū)動(dòng)程程序?qū)iT處理理。設(shè)備至少少要支持D0與D3。2023/1/432設(shè)備電源狀態(tài)含義D0設(shè)備全功率運(yùn)行D1設(shè)備運(yùn)行于低功耗模式,設(shè)備環(huán)境可能被保留D2設(shè)備運(yùn)行低功率模式,設(shè)環(huán)境可能無效D3設(shè)備沒有電,環(huán)境丟失關(guān)于USB電源管理策略略USB電源管理策略略:USB處理電源管理理的基本IRP規(guī)則USB驅(qū)動(dòng)應(yīng)該響應(yīng)應(yīng)的電源管理理器發(fā)出IRP2023/1/433用戶模式的USB數(shù)據(jù)讀寫與應(yīng)應(yīng)用程序用戶模式與驅(qū)驅(qū)動(dòng)包IRP對(duì)應(yīng)關(guān)系IRP_MJ_CREATE,IRP_MJ_READ,IRP_MJ_WRITE用戶模式應(yīng)用用程序打開設(shè)設(shè)備用戶模式應(yīng)用用程序讀取USB設(shè)備2023/1/434USB設(shè)備數(shù)據(jù)讀寫寫用戶模式下API與驅(qū)動(dòng)程序的的IPR對(duì)應(yīng)關(guān)系:2023/1/435用戶API函數(shù)IRP說明CreateFileIRP_MJ_CREATE打開設(shè)備ReadFileIRP_MJ_READ從設(shè)備獲取數(shù)據(jù)WriteFileIRP_MJ_WRITE向設(shè)備發(fā)送數(shù)據(jù)CloseFileIRP_MJ_CLOSE關(guān)閉設(shè)備DevicControlIRP_MJ_DEVICE_CONTROL控制操作開打設(shè)備首先已知設(shè)設(shè)備GUID通過調(diào)用SetupDiGetClassDev獲得設(shè)備的的信息集;;在設(shè)備信息息集里調(diào)用用SetupDiEnumDeviceInterface識(shí)別接口信信息;在接口信息息中調(diào)用SetupDiGetDeviceInterfaceDetail獲得設(shè)備路路徑名;通過設(shè)備路路徑CreateFile打開設(shè)備,,此時(shí)內(nèi)核核對(duì)應(yīng)發(fā)出出IRP_MJ_CREATE,操作系統(tǒng)統(tǒng)自動(dòng)訪問問對(duì)應(yīng)驅(qū)動(dòng)動(dòng)2023/1/436上層應(yīng)用程程序讀寫數(shù)數(shù)據(jù)讀寫數(shù)據(jù)通通過驅(qū)動(dòng)對(duì)對(duì)象的IRP_MJ_READ與IRP_MJ_WRITE功能例程::使用用戶模模式的readfile與writefileAPI調(diào)用驅(qū)動(dòng)內(nèi)內(nèi)核對(duì)象;;建立內(nèi)存映映像;通過內(nèi)存對(duì)對(duì)齊復(fù)制實(shí)實(shí)現(xiàn)數(shù)據(jù)交交互;還是通過IRP包來獲取數(shù)數(shù)據(jù)2023/1/437總結(jié)簡要審閱所所演示的內(nèi)內(nèi)容確定應(yīng)用培培訓(xùn)的方法法請(qǐng)求有關(guān)培培訓(xùn)單元的的反饋2023/1/438更多信息列出其他培培訓(xùn)單元列出書籍、、文章、電電子來源列出咨詢服服務(wù)、其他他來源2023/1/439USB處處理理電電源源管管理理的的基基本本IRP規(guī)規(guī)則則其最最基基本本規(guī)規(guī)則則要要遵遵循循以以下下幾幾點(diǎn)點(diǎn)::同步步操操作作必必須須嚴(yán)嚴(yán)格格,,PDO只能能僅僅且且有有一一個(gè)個(gè)IRP_MN_QUERY_POWER或者者IRP_MN_SET_POWER電源源IRP必須須一一次次性性處處理理,,不不能能產(chǎn)產(chǎn)生生等等待待事事件件或或者者是是鎖鎖對(duì)對(duì)象象的的系系統(tǒng)統(tǒng)例例程程;也是是需需要要分分層層處處理理,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論