第四章 系統軟體討論
4.2. USB 傳輸控制
4.2.2. USB-HID 架構與列舉過程
當一裝置(Device)經由 USB 連接上電腦後,電腦會向裝置,要求(Request)一 組數據,並以此數據判別此裝置所屬的類別、需要的驅動程式等等資訊。
這組數據稱之為描述元(descriptor),不同用途的描述元,會對裝置的不同性 質作定義。
裝置描述元(Device Descriptor):定義整個裝置的共用特性。
配置描述元(Configuration Descriptor):
1. 使用幾個介面(interface)
2. 每個介面各自屬於什麼類別(Class) 3. 使用何種端點(Endpoint)進行通訊
一個裝置,允許擁有複數個配置描述元,可在不同需求情形下作切換,而每 個配置下各自又可有複數個介面,每個介面有其所屬的類別,並佔用 1 個端點進 行通訊。
描述元是事先定義好的數個位元組資料,當 USB 控制器接收到來自電腦的 需求指令(Request),依照不同的需求指令,控制器會回覆不同的描述元給電腦,
實作上,電腦只會發出兩類的需求,一為裝置描述元需求,一為配置描述元需求,
而其他如介面描述元(Interface descriptor)、類別描述元(Class descriptor)、端點描 述元(Endpoint descriptor)皆跟隨在配置描述元之後,一併傳送。
40
Single function Device
Device descriptorConfiguration descriptor
Composite Device
Configuration descriptor Device
descriptor
圖 4-6 單一及複合式裝置的描述元比較
本系統同時兼具滑鼠及鍵盤的複合式(Composite)功能,採用 HID (Human
Interface Device)類別,因此類別描述元(Class-spec descriptor)中,除了定義 HID 的版本外,還需要至少一個報告描述元(Report descriptor),用以設定此 HID 裝置 更詳細的設置,如定義裝置為滑鼠、鍵盤或其他 HID 事先定義好的裝置類別。
「報告描述元」用來定義報告的格式,而「報告」(Report)本身才是真正用 來回傳目前裝置的最新數據。數據依照報告描述元定義好的順序、格式,讓電腦 解讀,如鍵盤報告會含有目前按下的所有按鍵對應的功能碼,滑鼠報告會回傳水 平、垂直位移的偏移距離等。
41
HID class裝置列舉過程所需描述元
Device
descriptor
Configuration descriptor
針對HID class裝置,
PC會在request configuration description後
另外索取report descriptor
report
42
圖 4-8 報告描述元與報告容量設定不符時所造成之裝置無法辨識
列舉完成後,作業系統會以適當的驅動程式對裝置作存取,但當列舉過程中 出現錯誤時,便會出現如上圖一般的錯誤情形,造成列舉錯誤的情況很多,以下 介紹本研究實作過程中所遭遇過的幾種情形。
43
在介面描述元中,有 3 組位元組,用來指定介面類別(bInterfaceClass)、子類 別(bInterfaceSubclass)和通訊協定(bInterfaceProtocol),但實際上,若此介面已經定 義為 HID 的類別,則 HID 功能會直接與 HID 描述元有關,而不受介面描述元中 這三個位元組影響。
如下圖 4-9,圖右中,兩組介面描述元,一組設定為鍵盤,一組設定為滑鼠,
但實際列舉後,因為 HID 描述元皆為滑鼠,所以列舉結果也為滑鼠。
圖 4-9 介面描述元設定值與裝置實際辨識結果比較
最後,在每次列舉完成後,作業系統會依照 VID(Vendor ID)、PID(Product ID) 的配對,查詢是否有安裝過對應的驅動程式,若有的話,不一定每次都會重新安 裝驅動,所以當 VID/PID 配對沒有更改,但韌體有更動的情形下,有可能發生作 業系統無法辨識的情況,此時會需要將原驅動程式強制重新安裝,或是變更
44
VID/PID 配對。
45