440 likes | 549 Views
TB-064. 第五章. 裝置列舉. 5-1 USB 描述元 5-2 裝置列舉的步驟 5-3 裝置列舉步驟的實現- 使用 USB 分析儀工具 5-4 結論. 5-1. USB 描述元.
E N D
第五章 裝置列舉 • 5-1 USB 描述元 • 5-2 裝置列舉的步驟 • 5-3 裝置列舉步驟的實現-使用 USB 分析儀工具 • 5-4 結論
5-1 USB 描述元 為了描述不同的資料,就需要不同類型的USB描述元。雖然各個描述元都有不同的訊息與資料,但所有的描述元都有一些共同的特性。也即是由下列所共有的格式所組成,如表 5.1 所示。其中,所有描述元的 Byte 0 是以位元組為單位的描述元長度,所有的 Byte 1則是放置如表 5.2 所示的描述元的型態欄位,其他所內含的位元組,是隨著不同的描述元而有所不同。如果該描述元的長度是比規格上所定義的還要小,那麼 PC 主機將會忽略之。相對的,如果此長度比規格所訂定的還要大,那麼 PC 主機也會忽略所超出的位元組部分,並在其回傳的真正描述元長度的尾端開始尋找下一個描述元。
5-1-4其他速率配置描述元 (Other-Speed-Configuration)
5-1-7字串描述元 字串描述元由 3 個欄位組成,其長度是變化的,見表5.9。其中,bString 是 UNICODE 編碼的字串,它不是以 NULL 結尾,其長度可透過將 bLength 欄位值減 2 得到。
5-2 裝置列舉的步驟 1.主機送出 SETUP 執照封包以及其後所跟隨的 DATA 封包至位址 0(DATA 封包內放置用來取得裝置描述元的標準要求),即可稍後取得裝置描述元。 2. USB 微處理機將此標準要求解碼,並且從它的程式記憶體(ROM 表格)中取出裝置描述元的前 8 個位元組。 3.主機執行控制讀取的傳輸序列。此時,USB 微處理機將會透過USB 匯流排送出裝置描述元給主機,並做出相對應的動作。 4.在收到裝置描述元後,主機會送出 SETUP 執照封包以及其後所跟隨的 DATA 封包至位址 0(DATA 封包內放置用來設定裝置位址的標準要求),以設定一個新的 USB 位址給裝置。
5.USB 微處理機在完成 “無資料” 控制傳輸後,將會儲存新位址於它的裝置位址的暫存器內。 6.主機針對此新位址裝置,再一次送出取得裝置描述元的要求。 7.USB 微處理機將此要求解碼,並且從程式記憶體(ROM 表格)中取出完整的 18 個位元組的裝置描述元。 8.主機執行控制型讀取的序列。此時,USB 微處理機將會透過USB 匯流排送出完整的裝置描述元。 9.主機執行控制讀取的傳輸序列,以讀取裝置的配置與各種描述元。 10.USB微處理機從它的程式記憶體(ROM表格)中取出相對應的配置與各種描述元,並透過 USB 匯流排將資料傳回至主機。 11.當主機收到所有的描述元後,就完成了裝置列舉的步驟。
5-3 裝置列舉步驟的實現-使用 USB 分析儀工具 • 使用預設的位址 0 取得裝置描述元 → 控制型讀取 • 設定裝置的新位址 → 無資料控制型 • 使用新位址取得裝置描述元 → 控制型讀取 • 取得配置描述元 → 控制型讀取 • 設定配置描述元 → 無資料控制型
步驟一:使用預設位址 0 取得裝置描述元 1. 設定階層:Packet 19~21,其為 SETUP 執照封包。 2. 資料階層:Packet 26~28,其為 IN 執照封包。 3. 狀態階層:Packet 31~33,其為 OUT 執照封包。
步驟二:設定裝置的新位址 1. 設定階層: Packet 36~38,其為 SETU P執照封包。 2. 狀態階層: Packet 40~42,其為 IN 執照封包。
步驟三:使用新的位址取得裝置描述元 1. 設定階層:Packet 63~65,其為 SETUP 執照封包。 2. 資料階層:Packet 70~72,Packet 77~79,與 Packet 81~83,其為 IN 執照封包。 3. 狀態階層:Packet 85~87,其為 OUT 執照封包。
步驟四:取得配置描述元的要求 1. 設定階層:Packet 118~120,其為 SETUP 執照封包。 2. 資料階層:Packet 125~127,Packet 129~131,Packet 133~135,Packet 137~139,與 Packet 141~143,其為IN 執照封包。 3. 狀態階層:Packet 146~148,其為 OUT 執照封包。
步驟五:設定配置 1. 設定階層:Packet 194~196,其為 SETUP 執照封包。 2. 狀態階層:Packet 201~203,其為 IN 執照封包。
5-4 結論 • 於 USB 晶片組中,撰寫 PC 主機要列舉所需之韌體程式碼。這可根據 USB 晶片組類型而有所不同。但基本上,都需具備了能夠執行標準標準要求或是傳送一系列描述元的能力。甚至,有些廠商也提供了基本的程式範例來應用。 • 開啟或取得一個 INF 安裝資訊檔,使得當 Windows 作業系統在列舉時,即可辨識此裝置。這種 INF 安裝資訊檔是一種文字檔,可以透過任何的文字編輯器來編輯在此檔案內裝置所使用的驅動程式。基本上,可以使用 USB 晶片組的描述元所支援的任何泛用型驅動程式。而 USB 晶片組的販售商通常會提供簡易的 INF 安裝資訊檔。如果讀者的裝置使用了由 Windows 作業系統所支援的群組之一的驅動程式,就能夠使用由 Windows 作業系統所涵蓋的 INF 安裝資訊檔。
除了上述的動作外,如果有需要,我們必須設計並建構出連接USB 晶片組的周邊電路以進行 USB 傳輸。這一部分可以使用販售商所提供的發展電路板來設計。而在 “微處理機與 USB 介面設計與應用-SLB11HS 與 PDIUSBD11/ D12 晶片組”(儒林)一書中隨附了一個 PDIUSBD11 USB 晶片組所設計的簡易電路空板,節省讀者製作與開發的時間。 • 緊接著,需將程式碼載入到 USB 晶片組中,並且插拔此裝置到PC 主機連結的匯流排上。此時,Windows 作業系統應會列舉這個 USB 晶片組所設計的 USB 裝置,並且增加至裝置管理員控制平台中,正確地辨識此裝置。 • 如果過程中有發生錯誤,就須不斷地偵錯並且重複上述的步驟。