該任務主要包括上位機
usb驅動開發、
lpc2440
下位機程式開發、除錯三部分。其中
lpc2440
下位機程式開發部分已經完成,不需要再行設計和開發。因此接下來的任務主要由上位機
usb
驅動開發和除錯兩部分構成。嚴格來說除錯又分檢測軟體的編寫和整體除錯兩部分。因此我們的設計工作主要如下幾部分(圖
3-1-1)。
概要設計如下:
上位機usb
驅動設計:採用
wdm驅動設計模式開發,遵循嚴格的
usb2.0
規範,實現即插即用、資料傳輸等驅動功能。為提高驅動的穩定性和傳輸資料的準確性,在
usb驅動編寫階段加入過慮驅動,主要實現傳輸的資料過慮、剔除異常資料,同時為支援多電源狀態,在編碼階段還需加入了電源管理模組,提高
usb驅動的適應性和穩定性。
usb驅動安裝也是該部分設計的需要的注意的問題,由於採用
wdm模式進行設計,因此我們採用編寫
inf檔案、手動安裝。
檢測軟體設計:採用
microsoft visual c++ 6.0
編寫,主要實現
usb資料傳輸等功能,方便與最後的整體除錯。
整體除錯:該部分主要包括
windbg
除錯和檢測軟體除錯兩部分。該整體除錯採用白盒測試,對所有的功能或這特功能進行一一檢測,並與測試用例結果對比。在測試當中,用例的選擇採用邊緣化資料和區域性資料雙重測試,保證測試的準確性。
windows
驅動程式模型
(windows driver model
,wdm)
是一種模型結構,它建立在物理裝置物件
(physical device object
,pdo)
和功能裝置物件
(functional device object
,fdo)
的結構化分層基礎上。
wdm模型為了適應即插即用系統,重新定義了驅動程式分層,它至少存在匯流排驅動程式和功能驅動程式,根據需要還可以選擇過濾器驅動程式。通常情況下,連線到匯流排的每個物理部件都有乙個
pdo,承擔由硬體實現的低階裝置控制的責任。更高階軟體則都存在乙個
fdo。當存在
ipo
操作時,
irp
請求包( ipo request packet)
首先被送到上級過濾器驅動程式,然後被一級一級的往下傳遞
,最後由匯流排驅動程式完成對裝置的操作。
usb
系統驅動程式採用
wdm結構
,具體結構如圖
3-2-1
所示。其中裝置驅動程式位於整個結構的最頂層,它不直接操作硬體
,而是通過
usbd
介面傳遞請求。
window
下usb
驅動開發主要分驅動程式,安裝和除錯幾個方面進行設計。其中程式設計相對複雜,包括對
usb資料結構、
wmi、電源管理、
pnp等進行分析和設計。安裝和除錯相對簡單,安裝階段主要的任務是編寫配置檔案
( .inf)
,除錯階段的任務主要針對驅動的讀寫進行測試,如果讀寫成功,說明驅動執行正常。
微軟提供的
ddk只是乙個編譯環境,只能在
cmd中進行輸入
build
進行除錯,這種除錯凡是特別不方便,
cmd除錯的錯誤結果只能顯示**的行號,無法做到錯誤適時定位。其實在實際的驅動開發過程當中已經很少在
cmd中除錯了,大多數的程式設計師都是採用
vc++6.0
開發環境來進行除錯的。
vc++6.0
本身並未
windows
驅動的除錯環境,需要自己手動配置,如下**構造
vc++6.0
的編譯環境;
一、設定新增新的編譯環境,命名為
driver_check
,操作步驟:
[build]—>[configurations]
如圖3-3-1-0;
二、設定
c/c++
環境,進入
[project]—>[settings]—>c/c++
,然後將想如下**拷貝到
project options
當中。/nologo /gz /mld /w3 /wx /z7 /od /d win32=100 /d _x86_=1 /d winver=0x500 /d dbg=1 /fr"driver_check/" /fo"driver_check/" /fd"driver_check/" /fd /c
三、設定
link
環境,進入
[project]—>[settings]—>link
,然後將想如下**拷貝到
project options
當中。wdm.lib /nologo /base:"0x10000" /stack:0x400000,0x1000 /entry:"driverentry" /subsystem:console /incremental:no /pdb:"mydriver_check/hellowdm.pdb" /debug /machine:i386 /nodefaultlib /out:"driver_check/hellowdm.sys" /pdbtype:sept /subsystem:native /driver /section:init,d /release /ignore:4078
四、新增相關路徑,進入
[tools]—>[options]—>directories
,將winddk
的相關檔案路徑新增到其中,並置頂,如下**。
通過以上的步驟,設定
vc++6.0 ddk
的編譯環境基本完成。然而、對於
usb的開發還需要在
link
中加入wmilib.lib hidclass.lib usbd.lib ntoskrnl.lib
這幾個鏈結庫。
WINCE下的USB驅動開發
首先usb載入式流介面驅動要點分析 為了支援不同型別的外圍裝置,wince平台提供了具有定製介面的流介面驅動程式模型。因為大部分usb外圍裝置由於功能性更適合流介面驅動的結構,所以一般都採用載入式流介面驅動程式模型來開發usb裝置驅動程式。1 usb系統結構分析 wince下usb系統軟體由兩層組成...
WINCE下的USB驅動開發
首先usb載入式流介面驅動要點分析 為了支援不同型別的外圍裝置,wince平台提供了具有定製介面的流介面驅動程式模型。因為大部分usb外圍裝置由於功能性更適合流介面驅動的結構,所以一般都採用載入式流介面驅動程式模型來開發usb裝置驅動程式。1 usb系統結構分析 wince下usb系統軟體由兩層組成...
usb驅動開發
果你是從硬體開始來設計整個的系統,你還要正確選擇傳送的方式,而作為乙個驅動程式的書寫者,就只需要弄清楚他是採用的什麼工作方式就行了。控制 control 方式傳送 控制傳送方 式可以包括8 16 32和64位元組的資料,這依賴於裝置和傳輸速度。usb裝置驅動開發 usb gadget driver ...