**:
---------------------
| 應用程式 |
---------------------
|usb client driver | (層一)
---------------------
| usbd.dll | (層二)
---------------------
| ohci.dll | (層三)
---------------------
wince的usb驅動分為三層,如上圖所示.從上到下,姑且將其稱為層一,層二,層三。層一通過gc_usbfuncs來呼叫層二所提供的功能,而層二通過gc_hcdfuncs來呼叫層三實現的功能,而應用程式則與層一打交道。
hcd初始化時,會建立乙個執行緒,chub::hubstatuschangethead().在此執行緒中,會監視usb口的狀態,如果有裝置插入,則有如下的呼叫步驟:
attachdevice()->cfunction::enteroperationalstate()->hcddeviceattached()->loaddevicedrivers()->loadusbclientdriver()->loadgroupdriver()->loadregisteredclientdriver().
cdevice::attachdevie()處理裝置的初始化,如讀裝置描述符,配置位址,載入client driver等。
在loadregisteredclientdriver()內,會根據不同的class,來呼叫相應的usbdeviceattach().而它的第乙個引數就是gc_usbfuncs.在issuevendortransfer()之類的函式中,有一引數lpcusb_funcs,該指標就是指向gc_usbfuncs.
USB裝置驅動程式載入流程
使用者插入usb裝置 usb匯流排 或者是pci匯流排,這個不太清楚,反正就是匯流排來著 識別到插入了usb裝置。匯流排和usb裝置進行通訊,獲取usb的硬體id 產品id,以及bcdversion。根據這些資訊組成裝置硬體id號 vid x pid x rev x。匯流排根據usb裝置的插槽位置,...
USB裝置驅動程式(二)
首先我們來看usb裝置描述符的結構 在usb匯流排識別裝置階段就將usb描述符傳送給了usb匯流排驅動程式,裝置的資料傳輸物件是端點,端點0是特殊端點,在usb匯流排驅動程式識別階段,本次通過usb滑鼠點選事件編寫乙個input子系統,從上一章主要實現了如何識別到有個usb裝置的驅動程式,本次,主要...
USB學習之二 USB匯流排驅動程式
usb匯流排驅動程式的作用 1.識別usb裝置 1.1 分配位址 1.2 並告訴usb裝置 set address 1.3 發出命令獲取描述符 描述符的資訊可以在include linux usb ch9.h看到 2.查詢並安裝對應的裝置驅動程式 3.提供usb讀寫函式 將乙個usb裝置接到開發板上...