版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
USB數(shù)據(jù)傳輸驅(qū)動(dòng)設(shè)計(jì)目錄TOC\o"1-3"\h\u6087一、緒論 一、緒論1.1研究背景和意義隨著嵌入式芯片的制造工藝以及對(duì)信息處理技術(shù)的迅猛發(fā)展,處理器的數(shù)據(jù)處理速度也越來越快,數(shù)據(jù)采集裝置所需要采集到的數(shù)據(jù)量也變得更加巨大,隨之而來的是數(shù)據(jù)高速傳輸?shù)钠款i。近年來,數(shù)據(jù)采集技術(shù)領(lǐng)域普遍關(guān)注的問題主要從五個(gè)角度聚焦:通過改善采集系統(tǒng)的可靠性和傳輸速度、提高采集系統(tǒng)的總體性能、增強(qiáng)采集系統(tǒng)的可靠性和信號(hào)質(zhì)量、提高系統(tǒng)的集成程度和減少生產(chǎn)費(fèi)用。其中,提高數(shù)據(jù)采集系統(tǒng)的可靠性和傳輸速度在所有受到廣泛關(guān)注的因素中,它們都占據(jù)最重要的位置。怎樣才能使得數(shù)據(jù)采集系統(tǒng)將所收到的數(shù)據(jù)迅速、實(shí)時(shí)地向計(jì)算機(jī)傳輸并對(duì)其進(jìn)行處理,這是當(dāng)前數(shù)據(jù)采集技術(shù)領(lǐng)域應(yīng)用者重點(diǎn)探討的課題。為了達(dá)到更好地能夠?qū)崿F(xiàn)對(duì)單機(jī)數(shù)據(jù)快捷高效的實(shí)時(shí)傳送,需要在整個(gè)系統(tǒng)中首先選擇一條具有一定較高傳輸帶寬的大型計(jì)算機(jī)數(shù)據(jù)總線。雖然高速視頻串行數(shù)字傳輸系統(tǒng)總線時(shí)鐘只能同時(shí)占有一個(gè)位寬,但由于高速串行總線中各個(gè)信號(hào)之間的數(shù)據(jù)交換并行性能和干擾較小,可以充分考慮應(yīng)用到通過不斷改善不同時(shí)鐘的實(shí)際工作頻率等各種優(yōu)化措施來大大改善不同時(shí)鐘間的傳輸速度,大大具有完全可以取代目前傳統(tǒng)的高速并行數(shù)字傳輸總線模式的發(fā)展趨勢(shì),具有很廣闊的技術(shù)應(yīng)用性和發(fā)展推廣空間。目前,數(shù)據(jù)信號(hào)采集處理系統(tǒng)中最常見的總線高速串行總線主要可以分為三類:PCIE總線,SATA總線及USB總線。這三種類型高速串行總線都是具有自己的技術(shù)特色:(1)PCIE總線PCIE是PCIExpress的縮寫,由PCI總線發(fā)展而來。目前,PCIE總線已經(jīng)發(fā)展到3.1版本,傳輸速率也從最初的132MB/s提升到10GB/s,具有傳輸帶寬高,生產(chǎn)成本低等優(yōu)點(diǎn),得到了廣泛應(yīng)用。(2)
SATA總線:SATA總線技術(shù)主要是為了解決計(jì)算機(jī)和外置的存儲(chǔ)器件之間的網(wǎng)絡(luò)和數(shù)據(jù)傳送瓶頸。2004年SATA接口第一次在電腦上得到了應(yīng)用,其傳輸頻率最高為3.2gb/s
。SATA
接口主要來自于一個(gè)硬盤設(shè)計(jì)方案,升級(jí)相對(duì)比較簡易,而且其成本也相對(duì)較低,且它還具有一個(gè)由系統(tǒng)指示器引導(dǎo)和啟動(dòng)的特點(diǎn)。(3)USB總線:USB是UniversialSerial
Bus的英語縮寫,中文名稱為"通用串行總線"。USB接口作為一種極其便捷的電腦和網(wǎng)絡(luò)通訊接口,自從誕生以來就以其特殊性和優(yōu)點(diǎn)迅速被占據(jù)在電腦和網(wǎng)絡(luò)通訊技術(shù)領(lǐng)域的主要地位。目前生產(chǎn)
USB接口芯片的工廠很多,而且使用范圍最廣的是美國
cypress
公司生產(chǎn)的各種通用
USB接口芯片。經(jīng)過了幾年的應(yīng)用和發(fā)展,超高速
USB3.0接口式控制器的芯片也逐漸成熟,
cypress
公司自主開發(fā)的新一代
USB3.0外設(shè)控制器芯片
EZ
-
USB
fx3
(
fx3
)已經(jīng)使得開發(fā)人員都可以輕松地為任何操作系統(tǒng)增加
USB
3.0的功能,可廣泛應(yīng)用于各種視頻信號(hào)采集、圖像信號(hào)采集、醫(yī)學(xué)和成像裝置等領(lǐng)域,極大程度上促進(jìn)了
USB
總線接口在信息和數(shù)據(jù)采集方面的應(yīng)用。1.2國內(nèi)外研究現(xiàn)狀數(shù)據(jù)采集這個(gè)新技術(shù)概念最早已經(jīng)起源于上世紀(jì)50年代,隨著當(dāng)前我國現(xiàn)代電子信息和現(xiàn)代網(wǎng)絡(luò)通信技術(shù)的不斷迅猛發(fā)展,數(shù)據(jù)采集的應(yīng)用領(lǐng)域也已經(jīng)開始逐漸得到新的蓬勃發(fā)展,數(shù)據(jù)采集的應(yīng)用頻率早已經(jīng)完全走進(jìn)了gb/s的應(yīng)用范圍,出現(xiàn)的各種相關(guān)技術(shù)研究成果更是層出不窮。在眾多的高速通用串行串口數(shù)據(jù)總線傳輸接口總線中,使其在串行數(shù)據(jù)采集系統(tǒng)模塊中的表現(xiàn)顯示出了強(qiáng)勁的發(fā)展趨勢(shì),己經(jīng)逐步成熟發(fā)展出并成為目前串行數(shù)據(jù)采集系統(tǒng)模塊中最常見的串行數(shù)據(jù)傳輸接口總線之一。第一個(gè)基于USB總線的最早發(fā)布版本協(xié)議是1994年11月11日我們剛剛發(fā)布的一個(gè)USB0.7總線芯片協(xié)議,然而因?yàn)槲覀內(nèi)鄙倭艘恍┫鄳?yīng)的總線芯片設(shè)計(jì)制造商的專業(yè)幫助和技術(shù)支持,所以并未馬上出現(xiàn)使它們迅速有效地被廣泛應(yīng)用。在1996年初,usb-if技術(shù)組織正式重新制定并再次推出了專門的全新USB1.0總線設(shè)計(jì)接口系統(tǒng)設(shè)計(jì)規(guī)范,在這些設(shè)計(jì)規(guī)范中明確地分別規(guī)定了低速傳輸模式(low-speed)的數(shù)據(jù)傳輸速率及其限制速度為1.5mb/s,USB設(shè)計(jì)技術(shù)才逐漸成熟;兩年后該技術(shù)組織將新的USB1.0總線設(shè)計(jì)技術(shù)規(guī)范進(jìn)行了重大升級(jí),并再次提出了新USB1.1總線設(shè)計(jì)規(guī)范,這就可以使得總線全速(full-speed)的數(shù)據(jù)傳送速度限制可以直接達(dá)到12mb/s。此時(shí),USB總線連接技術(shù)才真正剛剛開始在我們這個(gè)家庭中已經(jīng)得到了廣泛地應(yīng)用推廣和廣泛應(yīng)用,但在一些方面也存在弊端,例如在存儲(chǔ)方面沒有安全認(rèn)證,沒有信息的審核計(jì)算。二、驅(qū)動(dòng)程序設(shè)計(jì)2.1WDM驅(qū)動(dòng)程序類型WDM(windowsdrivermodel)這個(gè)模型主要是由舊的Winnt3.51和新的Winnt4的兩個(gè)核心,該模式是從設(shè)備系統(tǒng)驅(qū)動(dòng)器應(yīng)用程序模型演變而來。WDM主要性的改變之一就是在它增加了對(duì)設(shè)備即插就走應(yīng)用、電源流量管理、windowsmanagementinterface(wmi)、設(shè)備應(yīng)用接口的軟件支持。wdm移動(dòng)模型的主要設(shè)計(jì)目標(biāo),就是為了能夠?qū)崿F(xiàn)用戶可以同時(shí)跨多個(gè)平臺(tái)同時(shí)運(yùn)行使用、更安全、更靈活、可以自動(dòng)編制更簡易的存在Windows移動(dòng)設(shè)備及其驅(qū)動(dòng)器中的應(yīng)用程序。在WDM模型中,每個(gè)硬件設(shè)備至少應(yīng)該包含兩個(gè)驅(qū)動(dòng)器:一個(gè)功能性驅(qū)動(dòng)器和一個(gè)過濾性驅(qū)動(dòng)器。一個(gè)設(shè)備也可以包含有一個(gè)過濾驅(qū)動(dòng)器(filter
driver),用來改變標(biāo)準(zhǔn)的設(shè)備驅(qū)動(dòng)器程序。這些服務(wù)于相同的設(shè)備所需要執(zhí)行的驅(qū)動(dòng)器程序構(gòu)成了一個(gè)被稱為設(shè)備堆棧的鏈表。如圖1所示為WDM中設(shè)備對(duì)象和驅(qū)動(dòng)。PDOFIDOFIDOIRPFDO上層過濾器驅(qū)動(dòng)程序PDOFIDOFIDOIRPFDO上層過濾器驅(qū)動(dòng)程序下層驅(qū)動(dòng)程序總線驅(qū)動(dòng)程序功能驅(qū)動(dòng)程序總線接口驅(qū)動(dòng)器應(yīng)用程序同時(shí)可以向用戶現(xiàn)有的多個(gè)i/o總線接口進(jìn)行數(shù)據(jù)服務(wù),例如iiieee1394。在ccwdm的基本設(shè)計(jì)定義中,一個(gè)虛擬總線就是這樣一種總線設(shè)備,它通常可以被廣泛用來與其他的各種用于物理、邏輯、虛擬和簡化的總線設(shè)備交互相連。過濾驅(qū)動(dòng)程序是一個(gè)可選項(xiàng),當(dāng)一個(gè)用戶需要修改或者增加一些功能到一個(gè)設(shè)備、一類設(shè)備或一種總線時(shí),就已經(jīng)編寫一個(gè)過濾驅(qū)動(dòng)程序。一個(gè)USB鍵盤上層的過濾驅(qū)動(dòng)程序能夠被強(qiáng)制地進(jìn)行一個(gè)附加的安全審核。功能驅(qū)動(dòng)程序的組成功能系統(tǒng)驅(qū)動(dòng)器的應(yīng)用程序主要分為有兩種類型功能驅(qū)動(dòng)器(m)和微型功能驅(qū)動(dòng)器(Minidriver)兩個(gè)大部分形式構(gòu)成。類驅(qū)動(dòng)程序已經(jīng)直接實(shí)現(xiàn)了某一類微型驅(qū)動(dòng)程序設(shè)備的微型常規(guī)驅(qū)動(dòng)操作,由美國微軟公司免費(fèi)提供,驅(qū)動(dòng)程序的軟件開發(fā)者甚至已經(jīng)可以只通過直接編寫非常小的微型驅(qū)動(dòng)程序,去直接執(zhí)行需要處理具體的驅(qū)動(dòng)設(shè)備特定驅(qū)動(dòng)類別的常規(guī)操作,而對(duì)于其他大量的微型常規(guī)設(shè)備操作,可以直接執(zhí)行調(diào)用此類的微型驅(qū)動(dòng)程序,這也可能正是微軟WDM類驅(qū)動(dòng)程序的主要技術(shù)優(yōu)點(diǎn)之一。本文中我們所說的需要進(jìn)行設(shè)計(jì)的一個(gè)驅(qū)動(dòng)程序?qū)嶋H上本身就是一個(gè)超多功能驅(qū)動(dòng)程序,它主要功能是將一個(gè)大型USB驅(qū)動(dòng)程序和一個(gè)小型驅(qū)動(dòng)程序(Minidriver)相互地直接結(jié)合在一起來,驅(qū)動(dòng)一個(gè)帶有USB驅(qū)動(dòng)鍵盤的一個(gè)驅(qū)動(dòng)程序。2.2設(shè)計(jì)方案及設(shè)計(jì)工具、環(huán)境選擇2.2.1鍵盤驅(qū)動(dòng)程序設(shè)計(jì)方案及設(shè)計(jì)工具鍵盤驅(qū)動(dòng)器主要有很多種類型的設(shè)計(jì)和開發(fā)工具,除了需要使用
DDK進(jìn)行開發(fā)之外,還需要使用
Windriver
,
Driverstudio
等其他開發(fā)工具進(jìn)行開發(fā)。一般來說,使用封裝得比較高層的軟件和工具如圖像類似于
Windriver
,開發(fā)時(shí)間看上去的周期相對(duì)比較短,也就變得更容易些,但是如果出了什么樣的問題也就會(huì)變得更難進(jìn)行調(diào)試。作為一個(gè)大學(xué)生的畢業(yè)設(shè)計(jì),為了能夠更深入地了解
windows
驅(qū)動(dòng)模型,我們應(yīng)該考慮選擇采用
DDK進(jìn)行開發(fā)。了解到鍵盤首先應(yīng)該是一個(gè)
HID
設(shè)備,
Windows
系統(tǒng)則是將鍵盤當(dāng)作一個(gè)
HID設(shè)備進(jìn)行處理。因此,在我們開發(fā)一個(gè)鍵盤驅(qū)動(dòng)的過程中,是在一個(gè)叫做
HID
Minidriver
的框架下來進(jìn)行實(shí)現(xiàn)的,
HID類型的驅(qū)動(dòng)中包含有一些
ioctl
(對(duì)于輸入和輸出的控制),我們需要做的就是必須要通過建立一個(gè)框架,并且把它們都填充好,以便可以實(shí)現(xiàn)對(duì)于驅(qū)動(dòng)程序的完全控制。HID設(shè)備的傳輸類型傳輸類型數(shù)據(jù)傳輸特點(diǎn)版本控制傳輸IN少量無時(shí)間Windows98OUT中斷傳輸IN少量無時(shí)間及時(shí)Windows98SEOUT2.2.2環(huán)境設(shè)置DDK是一種驅(qū)動(dòng)程序的開發(fā)工具包,不同的應(yīng)用程序操作系統(tǒng)都會(huì)有不同的版本,因?yàn)樵撜撐乃蟮尿?qū)動(dòng)程序都是在
Windows
2000環(huán)境下,因此我們選擇了
Windows
2000DDK
。安裝了DDK
之后,需要把DDK
的
bin
目錄直接加入到
vc
++的標(biāo)簽?zāi)夸浟斜碇?這樣一些需要直接使用得到
DDK
的頭文件的客戶程序,就能夠很方便地找到它們所需要用的標(biāo)簽和頭文件。而不必再專門地拷貝。當(dāng)創(chuàng)建新的Makefile項(xiàng)目時(shí),VisualStudio缺省提供兩個(gè)build配置“Win32Debug”和“Win32Release”,build命令行中的設(shè)置,根據(jù)程序所在驅(qū)動(dòng)器位置的不同而需要改變。build命令行運(yùn)行MakeDrvr.bat批處理文件,使用DDKROOT環(huán)境變量,如果在VisualStudio中請(qǐng)求一個(gè)完整的重新構(gòu)造,把選項(xiàng)-nmake/a添加到這個(gè)命令行。設(shè)置輸出文件名,使得在build菜單中顯示正確的名字。2.3build目錄與普通的生成程序不同,在Win10中,build分開保存自由構(gòu)造版本和檢查構(gòu)造版本文件。如果TARGETPATH(目標(biāo)路徑)是OBJ,自由構(gòu)造x86目標(biāo)文件和最終的驅(qū)動(dòng)程序進(jìn)入OBJFRE\i386目錄中,檢查構(gòu)造目標(biāo)文件和驅(qū)動(dòng)程序進(jìn)入OBJCHK\i386目錄中,在本論文的驅(qū)動(dòng)程序中,使用的是后者。2.4訪問USB鍵盤的實(shí)現(xiàn)鍵盤采用中斷傳輸?shù)姆绞絺鬏旀I盤數(shù)據(jù),每次傳輸8個(gè)字節(jié)數(shù)據(jù),該8字節(jié)定義見下表,其中D0位是按鍵修飾符用于判斷是否有特殊按鍵按下(Shift,ctrl,win等),普通按鍵從D2開始,支持6個(gè)普通按鍵同時(shí)按下。USB鍵盤按鍵數(shù)據(jù)協(xié)議D0D1D2D3D4D5D6D7Modefierkeys保留keycode1Keycode2Keycode3Keycode4Keycode5Keycode6使用Ndwindowsusb驅(qū)動(dòng)程序編寫接口,可以通過遠(yuǎn)程編寫直接自動(dòng)訪問多個(gè)USB應(yīng)用鍵盤的驅(qū)動(dòng)程序,并且它們能夠自動(dòng)地直接讀取從最初的一個(gè)USB驅(qū)動(dòng)鍵盤輸入的所有數(shù)據(jù)。并且它們還甚至可以自動(dòng)地對(duì)每個(gè)鍵盤按鈕做出手動(dòng)控制,使得鍵盤按鈕上的ieled閃光燈會(huì)自動(dòng)發(fā)光或者光燈是自動(dòng)熄滅。大多數(shù)版的windows驅(qū)動(dòng)系統(tǒng)都已經(jīng)是直接使用USBdi2.00版。USB驅(qū)動(dòng)程序作為接口的一部分的ioctl列表如下:IOCTL_INTERNAL_USB_SUBMIT_URB發(fā)出URB停止等待結(jié)果IOCTL_INTERNAL_USB_RESET_PORT復(fù)位并重新啟用一個(gè)端口IOCTL_INTERNAL_USB_GET_PORT_STATUS得到狀態(tài)位:USBD_PORT_ENABLEDUSBD_PORT_CONNECTEDIOCTL_INTERNAL_USB_ENABLE_PORT重新啟用一個(gè)被禁止的端口IOCTL_INTERNAL_USB_GET_HUB_COUNT集線器驅(qū)動(dòng)程序部使用IOCTL_INTERNAL_USB_CYCLE_PORT 模擬設(shè)備拔出和再次插入IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO 集線器驅(qū)動(dòng)程序部使用IOCTL_INTERNAL_USB_GET_HUB_NAME得到集線器驅(qū)動(dòng)程序的設(shè)備名IOCTL_INTERNAL_USB_GET_BUS_INFO 獲得USB總線信息IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME得到主機(jī)控制器設(shè)備名2.5使用USBDI訪問USB鍵盤對(duì)一個(gè)USB鍵盤來說,它主要有這么幾種功能,復(fù)位裝置,配置器具,和閱讀裝置。在開始使用USB設(shè)備之前,第一件事情應(yīng)該是首先需要手動(dòng)復(fù)位其,以此確保其可用。然后由主機(jī)完成對(duì)設(shè)備的配置。配置裝置的整個(gè)過程都跟其物理學(xué)特性密切相關(guān)。在USB鍵盤的配置中,我們需要首先做的工作就是通過獲得對(duì)設(shè)備的配置描述符,然后尋找到接口,設(shè)備連線接口的每一根管道的最高傳輸量和數(shù)據(jù)包分別為8,創(chuàng)建一個(gè)對(duì)于配置設(shè)備的urb請(qǐng)求并且發(fā)送到USBdi。測(cè)試:USB硬件設(shè)備的驅(qū)動(dòng)程序從來都是沒有一個(gè)直接和您的硬件設(shè)備進(jìn)行直接對(duì)話。其只是僅需要通過軟件創(chuàng)建一個(gè)urb(USB模擬請(qǐng)求塊)和將一個(gè)urb請(qǐng)求提交給模擬總線驅(qū)動(dòng)程序軟件即時(shí)就可以快速完成一個(gè)塊在硬件上的運(yùn)算。系統(tǒng)當(dāng)中的一個(gè)例子文件名為USBd.sys,是一個(gè)可以接受urb的文件實(shí)體。將向量為usbd的遠(yuǎn)程調(diào)用函數(shù)變換轉(zhuǎn)化成一個(gè)同時(shí)帶有遠(yuǎn)程主機(jī)管理功能并以編號(hào)執(zhí)行代碼的函數(shù)irp_mj_internal_device_control的函數(shù)irp。然后指令usbd再次自動(dòng)調(diào)度一個(gè)數(shù)據(jù)總線的運(yùn)行時(shí)間,發(fā)出符合urb中所有條規(guī)定的指令運(yùn)行。三、驅(qū)動(dòng)程序?qū)崿F(xiàn)3.1HID小驅(qū)動(dòng)程序?qū)崿F(xiàn)人工輸入設(shè)備模型HID,是與其他用戶的輸入設(shè)備進(jìn)行交互的一個(gè)標(biāo)準(zhǔn)化方法,
hid
設(shè)備通過使用不同的描述符來確定它的作用。報(bào)告描述符詳盡地說明了其可以被產(chǎn)生的一個(gè)輸入報(bào)告呵,一個(gè)可以被接受到的一個(gè)輸出報(bào)告。hid驅(qū)動(dòng)規(guī)則模型就是一種可以用來設(shè)計(jì)控制一臺(tái)電腦和移動(dòng)計(jì)算機(jī)中大多數(shù)的人工智能輸入驅(qū)動(dòng)裝置和控制設(shè)備的一種抽象控制模型,例如,一個(gè)基于輸入驅(qū)動(dòng)裝置的控制設(shè)備就同樣可以被我們認(rèn)為它就是普通的舊式手機(jī)鍵盤,汽車就是仿真車的方向盤或者說就是一臺(tái)電腦的一個(gè)軟啟動(dòng)鍵和開關(guān)控制按鈕。系統(tǒng)HID類驅(qū)動(dòng)程序做大多數(shù)的工作,它把它的硬件交互委托給HID小驅(qū)動(dòng)程序,Windows包括一個(gè)用于USB總線上的設(shè)備的HID小驅(qū)動(dòng)程序HidUsb.sys,有合適的HID接口類常量和HID描述符的新USB設(shè)備不需要新的小驅(qū)動(dòng)程序。系統(tǒng)USBHID小驅(qū)動(dòng)程序調(diào)用系統(tǒng)USB驅(qū)動(dòng)程序USBD.sys,可選的通過所有低層USB過濾驅(qū)動(dòng)程序,然后系統(tǒng)USB驅(qū)動(dòng)程序訪問設(shè)備。3.2配置設(shè)備USB各種設(shè)備在正常被準(zhǔn)備投入使用以前,必須被自行安裝配置,由系統(tǒng)主機(jī)自行派人負(fù)責(zé)維護(hù)安裝。主機(jī)通常都可以是從ususb主機(jī)設(shè)備那里直接獲取到一些配置功能信息之后再接過去自行判斷這臺(tái)主機(jī)設(shè)備到底具有什么樣的配置功能。在本次驅(qū)動(dòng)程序的包中usb.cpp存在文件目錄中的函數(shù)usbselectconfiguration這個(gè)函數(shù),是對(duì)于我們配置各種類型設(shè)備的一個(gè)重要過程,首先我們可能需要通過這個(gè)函數(shù)方式來來獲得各種類型設(shè)備的一個(gè)配置管路描述符(詳細(xì)參見參考usbgetconfigurationdescriptors這個(gè)函數(shù)),然后通過尋找發(fā)送到各種新的接口,設(shè)備所有各個(gè)接口的每一根總線管道最大可以傳輸?shù)慕涌跀?shù)據(jù)和封包總數(shù)的容量函數(shù)為8,創(chuàng)建可以配置各個(gè)設(shè)備的接口urb后把請(qǐng)求發(fā)送到終端usbdi(詳見參考uscreateconfigurationrequestrs函數(shù)),配置好了設(shè)備,配置好了各個(gè)設(shè)備,配置好了各個(gè)設(shè)備成功后就已經(jīng)可以同時(shí)運(yùn)行保存好創(chuàng)建配置設(shè)備語言句柄和配置管路的一段段,以備將來日常應(yīng)用。寫數(shù)據(jù)操作就是為它設(shè)置一個(gè)放在鍵盤上的一個(gè)roled閃光燈,輸出的數(shù)據(jù)格式也可能就是4.2.2節(jié)當(dāng)中我們可能需要為它報(bào)告一個(gè)數(shù)據(jù)描述符和它輸入的各種數(shù)據(jù)請(qǐng)求格式,首先我們可能需要為它分別創(chuàng)建一個(gè)_urb_control_vendor_or_class_request等等不同類型的u和urb數(shù)據(jù)請(qǐng)求。然后將每個(gè)請(qǐng)求發(fā)送到主機(jī)usbdi,usbdi主機(jī)進(jìn)行文件處理,設(shè)置好主機(jī)鍵盤上的usled閃光燈,完成了pirp,通知每個(gè)請(qǐng)求者,鍵盤上的請(qǐng)求讀和讀及寫兩個(gè)操作程序即可順利完成(詳盡地詳細(xì)說明了關(guān)于usb.cppi在文件處理中的寫和usbsendoutputreport兩個(gè)函數(shù))。
driverentry的例程除了自己在這里之前需要的所做的一些準(zhǔn)備工作之外,它還有個(gè)可能就是需要將其進(jìn)行注冊(cè)后成為一個(gè)hid小型的驅(qū)動(dòng)程序,注冊(cè)后的驅(qū)動(dòng)示例可以編寫成源代碼將其列表顯示如下:extern
"C"
NTSTATUS
DriverEntry(PDRIVER_OBJECT
DriverObject,
PUNICODE_STRING
RegistryPath)
{//例程的函數(shù)
DriverObject->DriverExtension->AddDevice
=
AddDevice;
DriverObject->DriverUnload
=
DriverUnload;
DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL]
=
DispatchInternalControl;
DriverObject->MajorFunction[IRP_MJ_PNP]
=
DispatchPnp;
DriverObject->MajorFunction[IRP_MJ_POWER]
=
DispatchPower;//注冊(cè)成為HIDMinidriver
HID_MINIDRIVER_REGISTRATION
reg;
RtlZeroMemory(®,
sizeof(reg));
reg.Revision
=
HID_REVISION;
reg.DriverObject
=
DriverObject;
reg.RegistryPath
=
RegistryPath;
reg.DeviceExtensionSize
=
sizeof(DEVICE_EXTENSION);
reg.DevicesArePolled
=
FALSE;
//
以具體硬件為準(zhǔn)
return
HidRegisterMinidriver(®);
}測(cè)試:
四、硬件實(shí)現(xiàn)4.1固件系統(tǒng)實(shí)現(xiàn)固件固化是一種技術(shù)用于用來實(shí)現(xiàn)遠(yuǎn)程協(xié)調(diào)和自動(dòng)監(jiān)視等各種集成電路的重要功能。開發(fā)一個(gè)新的固件管理程序主要目的是為了能夠使一個(gè)計(jì)算機(jī)內(nèi)部芯片的硬件資源和外部數(shù)據(jù)接口控制電路都能夠進(jìn)行了正確的合理配置,從而可以使一個(gè)計(jì)算機(jī)芯片能夠準(zhǔn)確地對(duì)一個(gè)來自上位機(jī)的一個(gè)指令信號(hào)做出一個(gè)快速相應(yīng)的指令響應(yīng),實(shí)現(xiàn)上位機(jī)與一個(gè)fpga->fx3->的一個(gè)高速數(shù)據(jù)包的傳輸。cypresse我公司為每個(gè)客戶自身提供了完整的專業(yè)固件應(yīng)用開發(fā)工具cyeclipse,它里面已經(jīng)包含了一個(gè)客戶相應(yīng)的專業(yè)固件應(yīng)用程序開發(fā)框架和豐富的clapi固件函數(shù)庫。固件驅(qū)動(dòng)程序開發(fā)框架主要內(nèi)容包括了uarmrc啟動(dòng)接口代碼,usb啟動(dòng)接口,uart啟動(dòng)接口,gpifiipi接口和其他各種通用接口的固件初始化編程代碼。fx3的實(shí)例api應(yīng)用函數(shù)庫為軟件開發(fā)人員自身提供了一套完整的專業(yè)固件系統(tǒng)編程開發(fā)解決模式方案,可以有效地用于幫助專業(yè)軟件開發(fā)技術(shù)人員快速地設(shè)計(jì)搭建一個(gè)基于固件編程開發(fā)的應(yīng)用環(huán)境。4.1.1固件程序的構(gòu)成本文以基于wordpress系統(tǒng)而研究的固件編譯器程序?yàn)橹饕M成部分:初始化代碼和應(yīng)用程序源代碼。所有usb固件的初始化源代碼都與usb硬盤軟件的源代碼一樣,均被包含到固件編譯器開發(fā)的框架中,即可以直接使用。應(yīng)用程序的代碼部分就是軟件開發(fā)人員按照自己需要實(shí)現(xiàn)的各種功能而進(jìn)行定制的代碼組成部分,它們也是整個(gè)固件開發(fā)工作過程中最重要的組成部分。cyfx_gcc_startup.s文件這指的是一個(gè)簡單的軟件匯編代碼文件,用于對(duì)在fx3系統(tǒng)中中其arm是內(nèi)核的程序開始和然后運(yùn)行兩個(gè)過程,不再是需要任何人的修改就完全能夠并且可直接在一個(gè)軟件中進(jìn)行使用;cyfxgpif_syncsf.h文件主要采用了xgpifiidesigner來對(duì)軟件程序進(jìn)行遠(yuǎn)程編譯并然后所需要生成的狀態(tài)機(jī)進(jìn)行設(shè)計(jì)c為一個(gè)配置頭的文件,包含了一個(gè)狀態(tài)變化轉(zhuǎn)換過程中的詳盡信息,固件應(yīng)用代碼在軟件開發(fā)時(shí)需要將它們添加進(jìn)去并放入文件的列表中;cyfxslfifosync.h文件中包含了對(duì)于固件應(yīng)用程序中一些常見的變量和對(duì)于結(jié)構(gòu)體的定義,開發(fā)人員也可以在其中選擇性地添加自己的環(huán)境變量;cyfxslfifousbdscr.c這個(gè)文件中已經(jīng)包含了usb接口描述符的定義,其中對(duì)于數(shù)據(jù)結(jié)構(gòu)需要嚴(yán)格地遵循安全的數(shù)據(jù)緩存策略;cyfxtx.c簡單文件和它的makefile這兩個(gè)簡單文件都指的是由一個(gè)cypress的maeclipse自動(dòng)管理軟件使用框架自動(dòng)管理制作而來生成的一個(gè)簡單文件,不用你需要另外進(jìn)行任何軟件調(diào)試就完全可以直接自動(dòng)投入使用。4.1.2USB3.0與USB2.0數(shù)據(jù)傳輸?shù)膶?duì)比出于兼容性兩個(gè)方面的考慮,對(duì)于超高速adsl.0與高速usb2.0標(biāo)準(zhǔn)來說,均可以支持控制數(shù)據(jù)傳輸、中斷數(shù)據(jù)傳輸、塊數(shù)據(jù)傳輸和同步數(shù)據(jù)傳輸這四種兼容的傳輸方式,但二者在許多功能上還是有些區(qū)別的。usb3.0和usb2.0在進(jìn)行數(shù)據(jù)傳送時(shí)所需要體現(xiàn)的區(qū)別主要表現(xiàn)為接口類型、數(shù)據(jù)傳送方式以及編碼等兩個(gè)方面。但是每每當(dāng)usb3.0接口改為采用了usb3.0超高速網(wǎng)絡(luò)進(jìn)行高清數(shù)據(jù)無線傳輸?shù)母咚倌J綍r(shí),usb2.0接口中組合d+和分對(duì)d-間的線路將被停止使用,而超高清網(wǎng)速usb3.0接口的其中的所有差分對(duì)比如sstx+、sstx-和分對(duì)ssrx+、ssrx-等等的線路將被停止使用。usb3.0之所以現(xiàn)在能夠大大提高并達(dá)到5gbps的視頻數(shù)據(jù)并行傳輸處理效率,是因?yàn)樗呀?jīng)采用了一種完全的半雙工的視頻數(shù)據(jù)并行傳輸方式,而由于usb2.0為一種完全半雙工的數(shù)據(jù)傳輸方式,僅有它支持單向的視頻數(shù)據(jù)并行傳輸。這樣,usb2.0的模擬數(shù)據(jù)總線傳輸速率就變得不一定也有可能非???。4.2驅(qū)動(dòng)程序?qū)崿F(xiàn)對(duì)于所謂的嵌入式系統(tǒng)開發(fā)而言,由于沒有一個(gè)可以使得它們普遍被應(yīng)用的驅(qū)動(dòng)器,所以這種驅(qū)動(dòng)器的設(shè)計(jì)就會(huì)成為所謂的嵌入式系統(tǒng)研究和開發(fā)工作過程中的重要一個(gè)組成部分。USB驅(qū)動(dòng)程序的設(shè)計(jì)開發(fā)及其工作在整個(gè)基于USB3.0傳輸控制模塊的應(yīng)用軟件操作系統(tǒng)設(shè)計(jì)研究和軟件開發(fā)中也都具有十分重要的指導(dǎo)意義。在諸如windows、linux、macos等多種不同操作系統(tǒng)下,上位機(jī)的系統(tǒng)軟件結(jié)構(gòu)無法直接通過使用虛擬硬件或者網(wǎng)絡(luò)接口來來執(zhí)行它的讀/讀和寫數(shù)據(jù)操作。USB虛擬主機(jī)若要更理想真正做好對(duì)一臺(tái)USB主機(jī)設(shè)備的維護(hù)操作,其中肯定少不了一些驅(qū)動(dòng)程序。驅(qū)動(dòng)器固件程序網(wǎng)絡(luò)是用于連接USB位機(jī)固件驅(qū)動(dòng)程序和連接上位機(jī)固件程序之間的重要網(wǎng)絡(luò)橋梁。對(duì)于USB移動(dòng)設(shè)備而言,每處理一臺(tái)移動(dòng)設(shè)備都會(huì)盡可能同時(shí)需要相當(dāng)多的硬件驅(qū)動(dòng)器。大部分的開發(fā)者在windows平臺(tái)下自己開發(fā)的硬件驅(qū)動(dòng)程序均是采用wdm驅(qū)動(dòng)程序開發(fā)的模式,但由于傳統(tǒng)的wdm驅(qū)動(dòng)程序開發(fā)框架復(fù)雜,開發(fā)困難和周期較長,因此,本次研究課題選擇了微軟全新的wdf驅(qū)動(dòng)程序開發(fā)框架,進(jìn)行usb驅(qū)動(dòng)程序的開發(fā),可以有效地減少驅(qū)動(dòng)程序開發(fā)所需的代碼數(shù)量,從而節(jié)省費(fèi)用降低了軟件系統(tǒng)的開發(fā)難度。wdf驅(qū)動(dòng)器按照形式上劃分為兩種。一種是內(nèi)核層次高級(jí),稱為kmdf,驅(qū)動(dòng)程序的形式被稱為sys文件;另一個(gè)是用戶層的,被稱為umdf,驅(qū)動(dòng)程序的形式是dll文件。最常見的為kmdf驅(qū)動(dòng)器程序,它們都是在微軟公司提供的visualstudio+wdk環(huán)境下即可實(shí)現(xiàn)usb驅(qū)動(dòng)器的開發(fā)。本文設(shè)計(jì)的usb3.0驅(qū)動(dòng)器應(yīng)用程序就是在windows+visualstudio2010+wdk7600開發(fā)環(huán)境下自己開發(fā)出來的。主要是在visualstudio2010中完成了驅(qū)動(dòng)程序源代碼的編寫,而在wdk7600中則是完成了對(duì)驅(qū)動(dòng)器程序的源代碼編譯。代碼如下:啟動(dòng)開發(fā)版后安裝usb驅(qū)動(dòng)insmodusb_kbd_drv.ko。makefile文件如下:->DeviceDrivers
->HIDDevices
<>USBHumanInterfaceDevice(fullHID)supportKERN_DIR=/home/ningjw/linux-3.4.2all: make-C$(KERN_DIR)M=`pwd`modulesclean: make-C$(KERN_DIR)M=`pwd`modulesclean rm-rfmodules.orderobj-m +=usb_kbd_drv.o驅(qū)動(dòng)測(cè)試:Cat/dev/tty1//可以在LED屏幕上可能到按鍵值Hexdumpevent0//可以在終端看到事件上傳
結(jié)束語本文基于常見的usb3.0高速串行式上位數(shù)據(jù)總線傳輸協(xié)議接口,分析出了usb3.0總線通訊協(xié)議的基本技術(shù)結(jié)構(gòu)和其技術(shù)特點(diǎn),闡述了基于usb3.0總線協(xié)議控制器的重要技術(shù)硬件和組成部分,研究了usb3.0傳輸管理系統(tǒng)的主要技術(shù)軟件開發(fā)工作流程,針對(duì)其產(chǎn)品開發(fā)以及工作管理過程中所有現(xiàn)在可能仍然存在的一些軟件關(guān)鍵技術(shù)和困難解決問題分別做了詳盡的實(shí)例介紹以及剖析,給出了系統(tǒng)一套具體相應(yīng)的軟件解決辦法,最終從系統(tǒng)固件、驅(qū)動(dòng)和上位機(jī)三個(gè)環(huán)節(jié)方面綜合設(shè)計(jì)架構(gòu)得出了基于上位機(jī)數(shù)據(jù)傳輸系統(tǒng)模塊的整個(gè)主要軟件實(shí)現(xiàn)系統(tǒng),并且詳細(xì)給出了具體的軟件實(shí)現(xiàn)工作流程。最后從該應(yīng)用系統(tǒng)的主要基礎(chǔ)軟件功能和網(wǎng)絡(luò)信息高速傳輸數(shù)據(jù)管理應(yīng)用系統(tǒng)的硬件性能等各個(gè)方面分別展開了完整的軟件測(cè)試和數(shù)據(jù)分析。測(cè)試的過程中主要采用的都是數(shù)據(jù)模擬測(cè)試解決方案,在實(shí)際應(yīng)用的場(chǎng)合中也許會(huì)有一些誤差。為了能夠使自己研制的軟件系統(tǒng)變得更加緊密而又貼切實(shí)際,通過運(yùn)用fpga或cpld來產(chǎn)生必須要求的測(cè)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度正規(guī)軍人家庭婚姻解除協(xié)議范本3篇
- 2024年度大理石石材安裝及售后保障合同3篇
- 2024年互聯(lián)網(wǎng)金融貸款反擔(dān)保合同模板3篇
- 2024年度電商平臺(tái)收銀員客戶服務(wù)標(biāo)準(zhǔn)合同3篇
- 2024年度地暖系統(tǒng)安裝與智能化控制系統(tǒng)合同3篇
- 2024年度童鞋銷售渠道拓展與支持合同3篇
- 2024年施工方與建筑方合作合同樣本版
- 2024年度企業(yè)宣傳視頻拍攝制作合同范本3篇
- 2024至2030年阿魏酸哌嗪項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年中國羊水穿刺針行業(yè)投資前景及策略咨詢研究報(bào)告
- 病例報(bào)告表(CRF)模板
- 2022年江蘇省普通高中學(xué)業(yè)水平測(cè)試生物試卷
- 湖南省長沙市2022-2023學(xué)年二年級(jí)上學(xué)期期末數(shù)學(xué)試題
- 齊魯針灸智慧樹知到期末考試答案2024年
- 公共體育(三)學(xué)習(xí)通課后章節(jié)答案期末考試題庫2023年
- 學(xué)校學(xué)生評(píng)教表
- 現(xiàn)代操作系統(tǒng)教程(慕課版)-課后習(xí)題答案1-8章全帶原題
- PCS-PC簡單使用方法
- 高校人力資源管理系統(tǒng)
- 關(guān)于更換公務(wù)用車的請(qǐng)示
- 國外發(fā)達(dá)國家中水回用現(xiàn)狀
評(píng)論
0/150
提交評(píng)論