久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

用 VB 做 USB 通信程序及USB基礎(chǔ)知識(shí)

 liukai007 2009-02-13

用 VB 做 USB 通信程序及USB基礎(chǔ)知識(shí)

用 VB 做 USB 通信程序及USB基礎(chǔ)知識(shí),。一.USB基礎(chǔ)知識(shí)
USB是英文Universal Serial Bus的縮寫,,中文含義是“通用串行總線”。1994年,Intel,、Compaq,、 Digital、IBM,、Microsoft,、NEC、Northern Telecom等七家世界著名的計(jì)算機(jī)和通訊公司成立了USB論壇,,花了近兩年的時(shí)間形成了統(tǒng)一的意見,,于1995年11月正式制定了USB0.9通用串行總線(Universal Serial Bus)規(guī)范,1997年開始有真正符合USB技術(shù)標(biāo)準(zhǔn)的外設(shè)出現(xiàn),。USB1.1是目前推出的在支持 USB的計(jì)算機(jī)與外設(shè)上普遍采用的標(biāo)準(zhǔn),。1999年初在Intel的開發(fā)者論壇大會(huì)上,與會(huì)者介紹了 USB2.0規(guī)范,,該規(guī)范的支持者除了原有的Compaq,、Intel、Microsoft和NEC四個(gè)成員外,,還有惠普,、朗訊和飛利浦三個(gè)新成員。USB2.0向下兼容USB1.1,,數(shù)據(jù)的傳輸率將達(dá)到120Mbps~ 240Mbps,,還支持寬帶寬數(shù)字?jǐn)z像設(shè)備及下一代掃描儀、打印機(jī)及存儲(chǔ)設(shè)備,。  
  目前普遍采用的USB1.1主要應(yīng)用在中低速外部設(shè)備上,,它提供的傳輸速度有低速1 .5Mbps和全速 12Mbps兩種,低速的USB帶寬(1.5Mbps)支持低速設(shè)備,,例如顯示器,、 調(diào)制解調(diào)器、鍵盤,、鼠標(biāo),、掃描儀、打印機(jī),、光驅(qū),、磁帶機(jī)、軟驅(qū)等,。全速的USB帶寬(12Mbps)將支持大范圍的多媒體設(shè)備。
USB之所以能得到廣泛支持和快速普及,,是因?yàn)樗邆湎铝械暮芏嗵攸c(diǎn):  
  1.終端用戶的易用性  
●為接纜和連接頭提供了單一模型
●電氣特性與用戶無關(guān)
●自檢外設(shè),,自動(dòng)的進(jìn)行設(shè)備驅(qū)動(dòng)和設(shè)置
●外設(shè)可以動(dòng)態(tài)連接,動(dòng)態(tài)重置
2.廣泛的適用性
●適應(yīng)不同設(shè)備,傳輸速率從幾kb/s到十幾Mb/s
●在同一線上支持同步,、異步兩種傳輸模式
●支持對(duì)多個(gè)設(shè)備的同時(shí)操作
●可同時(shí)操作127個(gè)物理設(shè)備
●在主機(jī)和設(shè)備之間可以傳輸多個(gè)數(shù)據(jù)和信息流
●支持多功能的設(shè)備
●利用底層協(xié)議,,提高了總線利用率
3.同步傳輸帶寬
●確定的帶寬和低延遲適合電話系統(tǒng)和音頻的應(yīng)用
●同步工作可以利用整個(gè)總線帶寬
4.靈活性
●直接發(fā)送一系列指定大小的數(shù)據(jù)包,允許對(duì)設(shè)備緩沖器大小進(jìn)行選擇
●通過指定數(shù)據(jù)緩沖區(qū)的大小和執(zhí)行時(shí)間,,支持各種數(shù)據(jù)傳輸率
●通過協(xié)議對(duì)數(shù)據(jù)流進(jìn)行緩沖處理
5.健壯性
●在協(xié)議中使用差錯(cuò)處理/差錯(cuò)恢復(fù)機(jī)制
●完全實(shí)時(shí)熱插拔
●可以對(duì)有缺陷的設(shè)備進(jìn)行鑒別
6.與PC產(chǎn)業(yè)的一致性
●協(xié)議的易實(shí)現(xiàn)性和完整性
●與PC機(jī)的即插即用體系結(jié)構(gòu)一致
●與現(xiàn)存操作系統(tǒng)有良好銜接的接口
7.性價(jià)比
●以低廉的價(jià)格提供傳輸速率為1.5Mb/s的子通道
●將外設(shè)和主機(jī)硬件進(jìn)行了最優(yōu)化的集成
●促進(jìn)了低價(jià)格外設(shè)的發(fā)展
●廉價(jià)的電纜和連接頭
●運(yùn)用商業(yè)技術(shù)降低成本
8.可升級(jí)性
●體系結(jié)構(gòu)的可升級(jí)性支持在一個(gè)系統(tǒng)中同時(shí)存在多個(gè)USB主機(jī)控制器



二.USB接口驅(qū)動(dòng)程序的開發(fā)
1.設(shè)備和驅(qū)動(dòng)程序的層次結(jié)構(gòu)
WDM模型使用了如圖所示的層次結(jié)構(gòu),。圖中右邊是一個(gè)設(shè)備對(duì)象堆棧。設(shè)備對(duì)象是系統(tǒng)為幫助軟件管理硬件而創(chuàng)建的數(shù)據(jù)結(jié)構(gòu),。一個(gè)物理硬件可以有多個(gè)這樣的數(shù)據(jù)結(jié)構(gòu),。
在WDM中引入了功能設(shè)備對(duì)象(FDO)和物理設(shè)備對(duì)象(PDO)來描述硬件。一個(gè)PDO對(duì)應(yīng)一個(gè)真實(shí)硬件,,一個(gè)硬件只允許有一個(gè)PDO,,卻可以有多個(gè)FDO。在驅(qū)動(dòng)程序中直接操作的不是硬件設(shè)備,,而是相應(yīng)的PDO和FDO,。PDO和FDO都處于堆棧的最低層。在FDO的上面和下面還會(huì)有一些過濾器設(shè)備對(duì)象(filter device object),。位于FDO上面的過濾器設(shè)備對(duì)象稱為上層過濾器,,位于FDO下面(但仍在PDO之上)的過濾器設(shè)備對(duì)象稱為下層過濾器。在用戶態(tài)和內(nèi)核態(tài)通信方面,,系統(tǒng)為每一個(gè)用戶請(qǐng)求打包形成一個(gè)IRP結(jié)構(gòu),,將其發(fā)送至驅(qū)動(dòng)程序,并通過識(shí)別IRP中的PDO來區(qū)分是發(fā)送給哪一個(gè)設(shè)備的,。
2.編寫驅(qū)動(dòng)程序的基本步驟
(1) 首先編寫一個(gè)DriverEntry例程,。在這個(gè)例程中必須設(shè)置一系列的回調(diào)例程來處理IRP. DriverEntry是內(nèi)核模式驅(qū)動(dòng)程序主入口點(diǎn)常用的名字。該例程的主要工作是把各種函數(shù)指針填入驅(qū)動(dòng)程序?qū)ο?。這些指針為操作系統(tǒng)指明了驅(qū)動(dòng)程序容器中各種子例程的位置,。
(2)編寫一個(gè)AddDevice例程,它的基本功能是創(chuàng)建一個(gè)設(shè)備對(duì)象并把它連接到堆棧底部為pdo的設(shè)備堆棧中,。相關(guān)步驟如下:調(diào)用IoCreateDevice創(chuàng)建設(shè)備對(duì)象,,并建立一個(gè)私有的設(shè)備擴(kuò)展對(duì)象;寄存一個(gè)或多個(gè)設(shè)備接口,,以便應(yīng)用程序能知道設(shè)備的存在,,另外,還可以給出設(shè)備名并創(chuàng)建符號(hào)連接,;初始化設(shè)備擴(kuò)展和設(shè)備對(duì)象的Flag成員,;調(diào)用IoAttachDeviceToDeviceStack函數(shù)把新設(shè)備對(duì)象放到堆棧上。
(3)編譯連接驅(qū)動(dòng)程序,。
(4)測(cè)試驅(qū)動(dòng)程序,。

三.客戶端程序的編寫
1設(shè)備接口
驅(qū)動(dòng)程序的AddDevice代碼調(diào)用IoCreateDevice創(chuàng)建設(shè)備對(duì)象,。有兩種方法提供對(duì)Win32程序可用的名稱,老的方法是提供一個(gè)明確的符號(hào)鏈接名,,新的方法是使用設(shè)備接口標(biāo)識(shí)支持定義的API的設(shè)備,。
IoCreateDevice調(diào)用有一個(gè)DeviceName參數(shù),可以用于為設(shè)備指定一個(gè)名字,。這個(gè)名字向內(nèi)核標(biāo)識(shí)設(shè)備,,而不是向Win32標(biāo)識(shí)設(shè)備。所以需要?jiǎng)?chuàng)建一個(gè)符號(hào)鏈接來使內(nèi)核設(shè)備名對(duì)Win32可用,。
老的方法調(diào)用IoCreateSymbolicLink,,使用參數(shù)傳遞合適的符號(hào)鏈接名和設(shè)備鏈接名。新方法的主要思想是為設(shè)備對(duì)象定義一個(gè)可用的應(yīng)用程序編程接口,,全局唯一標(biāo)識(shí)符(GUID)用于標(biāo)識(shí)這個(gè)接口,。GUID必須使用guidgen工具生成,在GUID.h中正式聲明自己定義的設(shè)備接口,。在AddDevice例程中調(diào)用IoRegisterDeviceInterface函數(shù)注冊(cè)它的接口,,然后調(diào)用IoSetDeviceInterfaceState啟用這個(gè)設(shè)備接口。
   2.用戶態(tài)程序調(diào)用驅(qū)動(dòng)程序
EZ-USB系列的ezusb.sys是一個(gè)不用修改就可以直接使用的驅(qū)動(dòng)程序,,在自行開發(fā)外部設(shè)備的時(shí)候,,如果沒有非常特殊的要求,完全可以采用這個(gè)驅(qū)動(dòng)程序作為設(shè)備的USB接口驅(qū)動(dòng),,當(dāng)然前提是設(shè)備必須采用EZ-USB的USB控制芯片,。
在ezusb.sys中使用IoCreateSymbolicLink創(chuàng)建符號(hào)鏈接,提供對(duì)用戶態(tài)程序可用的設(shè)備名,。故用戶態(tài)程序首先通過調(diào)用一個(gè)Win32函數(shù)CreateFile()來獲得設(shè)備驅(qū)動(dòng)程序的句柄,;然后用DeviceIoControl()函數(shù)通過CreateFile()函數(shù)返回的句柄,來提交I/O控制代碼和相關(guān)的輸入輸出緩沖區(qū)到驅(qū)動(dòng)程序,,完成在Windows環(huán)境下USB數(shù)據(jù)傳輸?shù)娜蝿?wù),。
3.固件代碼、驅(qū)動(dòng)程序和客戶端程序的關(guān)系
固件代碼是非常重要的,,他主要實(shí)現(xiàn)設(shè)備的初始化和配置,。驅(qū)動(dòng)程序主要負(fù)責(zé)對(duì)各種IRP的處理,客戶端發(fā)出IRP實(shí)現(xiàn)具體的功能,。
以向EZ-USB的2131芯片實(shí)現(xiàn)簡(jiǎn)單的讀寫為例,,數(shù)據(jù)從EP2OUT輸出到芯片,從EP2IN讀回到主機(jī),。而2131芯片的2端點(diǎn)輸出緩沖區(qū)的地址為7DC0,輸入緩沖區(qū)的地址為7E00,,這就要求固件程序?qū)?端點(diǎn)輸入緩沖區(qū)的數(shù)據(jù)全部復(fù)制到輸出緩沖區(qū)??蛻舳顺绦蛟诎l(fā)出讀寫命令后,,通過CreateFile()函數(shù)獲得設(shè)備句柄,,然后調(diào)用DeviceIoControl()函數(shù)提交I/O控制代碼和相關(guān)的輸入輸出緩沖區(qū)到驅(qū)動(dòng)程序,。驅(qū)動(dòng)程序負(fù)責(zé)處理有關(guān)IRP,,實(shí)現(xiàn)數(shù)據(jù)的通信。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多