下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、usb設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)是1995年微軟、ibm等公司推出的一種新型通信標(biāo)準(zhǔn)總線,特點(diǎn)是速度快、價(jià)格低、自立供電、支持熱插拔等,其版本從早期的1.0、1.1已經(jīng)進(jìn)展到目前的2.0版本,2.0版本的最高數(shù)據(jù)傳輸速度達(dá)到480mbit/s,能滿足包括視頻在內(nèi)的多種高速外部設(shè)備的數(shù)據(jù)傳輸要求,因?yàn)槠浔姸嗟膬?yōu)點(diǎn),usb總線越來越多的被應(yīng)用到計(jì)算機(jī)與外設(shè)的接口中,芯片廠家也提供了多種usb接口芯片供設(shè)計(jì)者用法,為了開發(fā)出功能強(qiáng)大的usb設(shè)備,設(shè)計(jì)者往往需要自己開發(fā)usb設(shè)備驅(qū)動(dòng)程序,驅(qū)動(dòng)程序開發(fā)向來是windows開發(fā)中較難的一個(gè)方面,但是通過用法特地的驅(qū)動(dòng)程序開發(fā)包能減小開發(fā)的難度,提高工作效率,本文
2、用法compuware numega公司的driverstudio3.2開發(fā)包,開發(fā)了基于philips公司usb2.0控制芯片isp1581的usb設(shè)備驅(qū)動(dòng)程序。usb設(shè)備驅(qū)動(dòng)程序的模型圖1 usb驅(qū)動(dòng)程序模型usb設(shè)備驅(qū)動(dòng)程序是一種典型的wdm(windows driver model)驅(qū)動(dòng)程序,其程序模型1所示。用戶應(yīng)用程序工作在windows操作系統(tǒng)的用戶模式層,它不能挺直拜訪usb設(shè)備,當(dāng)需要拜訪時(shí),通過調(diào)用操作系統(tǒng)的api(application programminginterface)函數(shù)生成i/o哀求信息包(irp),irp被傳輸?shù)焦ぷ饔趦?nèi)核模式層的設(shè)備驅(qū)動(dòng)程序,并通過驅(qū)動(dòng)程
3、序完成與ubs外設(shè)通信。設(shè)備驅(qū)動(dòng)程序包括兩層:函數(shù)驅(qū)動(dòng)程序?qū)雍涂偩€驅(qū)動(dòng)程序?qū)樱瘮?shù)驅(qū)動(dòng)程序一方面通過irp及api函數(shù)與應(yīng)用程序通信,另一方面調(diào)用相應(yīng)的總線驅(qū)動(dòng)程序,總線驅(qū)動(dòng)程序完成和外設(shè)硬件通信。usb總線驅(qū)動(dòng)程序已經(jīng)由操作系統(tǒng)提供,驅(qū)動(dòng)程序開發(fā)的重點(diǎn)是函數(shù)驅(qū)動(dòng)程序。usb設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)用法driverstudio3.2開發(fā)usb設(shè)備驅(qū)動(dòng)程序該驅(qū)動(dòng)程序的主要功能包括:從控制端點(diǎn)0讀取規(guī)定個(gè)數(shù)的數(shù)據(jù)、向端點(diǎn)0發(fā)出控制指令、從端點(diǎn)2批量讀數(shù)據(jù)、向端點(diǎn)2批量寫數(shù)據(jù),驅(qū)動(dòng)程序的開發(fā)采納driverstudio3.2驅(qū)動(dòng)程序開發(fā)包及vc+6.0,用法開發(fā)包中的向?qū)С绦騞riverwizard就可以
4、便利的生成驅(qū)動(dòng)程序框架、模塊及部分程序源代碼,開發(fā)者只需要在功能模塊中加入自己的實(shí)現(xiàn)程序就能完成復(fù)雜的usb設(shè)備驅(qū)動(dòng)程序設(shè)計(jì),下面介紹用法driverwizard生成isp1581驅(qū)動(dòng)程序的過程:1)啟動(dòng)driverwizard,挑選driverworks project制造一個(gè)名為usbdio的vc+項(xiàng)目;2)在驅(qū)動(dòng)程序類型中挑選wdm driver,wdm function driver,在硬件設(shè)備所支持的總線類型中挑選usb(wdm only),在usb vendor id(廠商識(shí)別碼)中填寫0741,在usb product id(產(chǎn)品識(shí)別碼)中填寫0821;3)增強(qiáng)usb設(shè)備端點(diǎn),設(shè)
5、置端點(diǎn)2為批量輸入/輸出傳輸方式;4)在驅(qū)動(dòng)程序支持的功能項(xiàng)中挑選read、write、device control、cleanup;5)挑選自動(dòng)產(chǎn)生批量讀及批量寫程序代碼;6)在i/o哀求irp處理方式中挑選none,即irp不排隊(duì);7)在接口的打開方式中挑選symbolic link:usbdiodevice,即應(yīng)用程序以符號(hào)鏈接名打開設(shè)備;8)定義應(yīng)用程序調(diào)用deviceiocontrol函數(shù)對(duì)wdm驅(qū)動(dòng)程序通信的控制指令,結(jié)果2所示。圖2 定義控制代碼9)最后挑選完成并確認(rèn)生成新的項(xiàng)目信息,向?qū)С绦蚓蜁?huì)在usbdio名目中生成一個(gè)名為usbdio的項(xiàng)目文件,其中包括了isp1581驅(qū)動(dòng)
6、程序框架、模塊及部分源代碼。usb設(shè)備驅(qū)動(dòng)程序的編程在用法driverwizard生成驅(qū)動(dòng)程序框架、模塊及部分程序源代碼后,開發(fā)者只需完成圖2中三個(gè)控制代碼所對(duì)應(yīng)的三個(gè)功能模塊的編程:模塊usbdio_ioctl_id_code_handler的功能是從控制端點(diǎn)0讀取數(shù)據(jù),模塊usbdio_ioctl_test_command_handler的功能是向控制端點(diǎn)0發(fā)送一個(gè)控制指令,模塊usbdio_ioctl_dma_command_handler的功能是向控制端點(diǎn)0發(fā)送一個(gè)要求usb設(shè)備舉行dma傳輸?shù)目刂浦噶?,下面是第一個(gè)模塊的編程實(shí)例。ntstatus usbdiodevice:usbdi
7、o_ioctl_id_code_handler(kirp i)ntstatus status = status_success;tpurb purb;ulong numdata;numdata=*(puchar)i.ioctlbuffer();/設(shè)置讀取的數(shù)據(jù)個(gè)數(shù)purb=m_lower.buildvendorrequest(puchar)i.ioctlbuffer(),/驅(qū)動(dòng)程序存放讀取的數(shù)據(jù)的內(nèi)存區(qū)numdata,/wlength,讀取的數(shù)據(jù)個(gè)數(shù)0,0x0c,/brequest0,/wvaluetrue,/inputtrue,null,0x0472,/windex,傳輸?shù)焦碳绦虻淖x數(shù)指令
8、碼urb_function_vendor_endpoint,null);if(purb=null)i.information() =0;status=status_insufficient_resources;elsei.information() =numdata;status=m_lower.submiturb(purb,null,null,0);delete purb;return status;對(duì)象i包含了應(yīng)用程序下傳的irp內(nèi)容,包括指令或數(shù)據(jù)等參數(shù),函數(shù)buildvendorrequest用來分配并初始化一個(gè)用于廠商哀求的urb(usb request block),該urb將作為
9、下傳irp的一個(gè)參數(shù),通過函數(shù)submiturb發(fā)送給總線驅(qū)動(dòng)程序,以便完成與硬件的通信。在初始化urb時(shí)需要了解usb的傳輸方式及傳輸協(xié)議,該功能用法了usb的控制傳輸方式,該方式包括三個(gè)階段:設(shè)置階段、數(shù)據(jù)階段和狀態(tài)階段,其中數(shù)據(jù)階段可選,開發(fā)者主要關(guān)注設(shè)置階段中的8個(gè)關(guān)鍵字節(jié)的定義,8字節(jié)分成了5個(gè)字段,定義了傳輸哀求及相關(guān)信息,這8個(gè)字節(jié)的格式3所示。bmrequesttypebrequestwvaluewindexwlength圖3 usb設(shè)置數(shù)據(jù)格式bmrequesttype:1字節(jié),用來指定數(shù)據(jù)流淌的方向,哀求的類型,以及接收者。brequest:1字節(jié),用來指定哀求。wvalu
10、e:2字節(jié),主機(jī)用來傳輸信息給設(shè)備,開發(fā)者可以按照狀況自己定義。windex:2字節(jié),主機(jī)用來傳輸信息給設(shè)備,開發(fā)者可以按照狀況自己定義。wlength:2字節(jié),包含數(shù)據(jù)階段中接下來要傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)目。以上字段的應(yīng)用已經(jīng)在程序注釋中標(biāo)出,在此不再贅述。usb設(shè)備驅(qū)動(dòng)程序的安裝及調(diào)用usb設(shè)備驅(qū)動(dòng)程序的安裝驅(qū)動(dòng)程序編譯完成后會(huì)生成一個(gè)名為usbdio.sys的文件,即usb設(shè)備驅(qū)動(dòng)程序,另外在用法向?qū)С绦騱izarddriver生成驅(qū)動(dòng)程序時(shí)會(huì)產(chǎn)生一個(gè)名為usbdio.inf的驅(qū)動(dòng)程序安裝程序,對(duì)此程序只需稍做修改就能正常用法,詳細(xì)是將類改為usb,即 "aimg_xzzaz&quo
11、t; file="http:/images/smilies/default/titter.gif" lazyloadthumb="1" border="0" alt="" />id_0821,其中0471是usb控制芯片的廠商識(shí)別碼,0821是usb設(shè)備標(biāo)識(shí)碼。驅(qū)動(dòng)程序安裝過程是:將usb設(shè)備加電,連入計(jì)算機(jī)的usb接口,這時(shí)候會(huì)看到windows操作系統(tǒng)提醒發(fā)覺新硬件,提問是否安裝驅(qū)動(dòng)程序,挑選是,然后挑選驅(qū)動(dòng)程序所在文件夾,挑選文件usbdio.inf即可完成安裝。usb設(shè)備驅(qū)動(dòng)程序的調(diào)用為了完成對(duì)驅(qū)動(dòng)程
12、序的調(diào)用,筆者用法vc+6.0編寫了usb應(yīng)用程序包,程序包共由五個(gè)功能模塊組成,用戶通過調(diào)用這些模塊即可便利的完成對(duì)usb外設(shè)的控制及讀寫,這些模塊如下:1)int ctrlreaddata(unsigned char usbselect,unsigned char*rbuffer,unsigned charnumdata),主要功能是讀取isp1581控制端點(diǎn)0發(fā)來的數(shù)據(jù),數(shù)據(jù)存放在緩沖區(qū)rbuffer中。2)int ctrlsendtestcommand(unsigned char usbselect,unsigned short int testcommand),主要功能是發(fā)送測(cè)試指令
13、,變量testcommand定義了測(cè)試指令。3) int ctrlsenddmacommand(unsigned char usbselect,unsigned chardmadirection,unsigned char ramselect,unsigned longdmalength),主要功能是發(fā)送dma傳輸指令,變量dmadirection定義數(shù)據(jù)傳輸方向,ramselect定義將要操作的usb外設(shè)的存儲(chǔ)器,dmalength定義了數(shù)據(jù)傳輸總數(shù)。4)int dmaread(unsigned char usbselect,unsigned char *rbuffer,intlen,int waittime),主要功能是計(jì)算機(jī)批量讀取isp1581中的數(shù)據(jù),而isp1581以dma方式從外部ram讀取數(shù)據(jù)。5)int dmawrite(unsigned char usbselect, unsigned char *rbuffer,int len, int waittime),主要功能是計(jì)算機(jī)批量寫數(shù)據(jù)到isp1581,而isp1581將以dma方式寫數(shù)據(jù)到外部ram。結(jié)語usb設(shè)備驅(qū)動(dò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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024甲乙雙方關(guān)于2024年度小麥?zhǔn)召彽木娱g合同
- 多媒體技術(shù)及應(yīng)用知到智慧樹章節(jié)測(cè)試課后答案2024年秋海南師范大學(xué)
- 河道水毀清理維護(hù)施工合同
- 咖啡店臨時(shí)服務(wù)員合同模板
- 2025年度二零二五木坑果場(chǎng)承包經(jīng)營與農(nóng)業(yè)信息化建設(shè)合同3篇
- 海邊度假別墅海濱住宿協(xié)議
- 設(shè)立分公司信息共享協(xié)議
- 美容院健身教練合同模板
- 2024鐵路物流倉儲(chǔ)配送合同范本3篇
- 2024正規(guī)餐飲企業(yè)員工勞動(dòng)合同范本與食品安全管理協(xié)議3篇
- 2025年首都機(jī)場(chǎng)地服公司招聘筆試參考題庫含答案解析
- 《廉政講堂格言》課件
- 審計(jì)服務(wù)采購招標(biāo)文件
- 2024年03月中國農(nóng)業(yè)發(fā)展銀行內(nèi)蒙古分行校園招考擬招錄人員筆試歷年參考題庫附帶答案詳解
- 空置房檢查培訓(xùn)
- 浙江省紹興市越城區(qū)2023-2024學(xué)年四年級(jí)上學(xué)期數(shù)學(xué)期末考試試卷
- 廣東省廣州市海珠區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末英語試題(答案)
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之8:“5領(lǐng)導(dǎo)作用-5.2創(chuàng)新方針”(雷澤佳編制-2025B0)
- 2023年新疆廣播電視臺(tái)招聘事業(yè)單位工作人員筆試真題
- 金科新未來大聯(lián)考2025屆高三12月質(zhì)量檢測(cè)語文試題(含答案解析)
- 烤煙科技員考試題答案
評(píng)論
0/150
提交評(píng)論