基于OHCI的USB主机 —— OHCI(设计思路)
生活随笔
收集整理的這篇文章主要介紹了
基于OHCI的USB主机 —— OHCI(设计思路)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在OHCI層,主要完成如下功能: l??通過控制端口讀寫數據(包含SETUP、DATA、STATUS等3個TD); l??通過控制端口發送設置命令(沒有DATA的TD); l??通過批量端口讀數據; l??通過批量端口寫數據; l??中斷處理程序; 本層將OHCI的ED和TD作為自己內部的對象進行包裝,上層對象通過調用本層接口完成所需要的功能,而不必關心ED和TD的細節。 通過OHCI接口進行數據收發,最主要的工作就是確定ED和TD隊列。在網上廣為流傳的周立功公司的相關資料以及該公司出版的《ARM嵌入式系統軟件開發實例》(一)、(二)中,關于ED和TD的處理非常復雜,甚至為此建立了一個管理機制,包括隊列的建立、插入、刪除、釋放等一系列操作。 其實對于一般的嵌入式系統來說,沒有必要把ED和TD搞得這么復雜。在我們的系統中,ED和TD的管理非常簡單:把待處理的命令構建為ED和TD隊列,然后執行,等到執行完畢再根據上層代碼的需要構建新的隊列。也就是說只有等到上一個命令全部執行完畢后,才可以執行下一個命令。這樣的處理機制完全可以適應絕大多數的嵌入式系統了。 基本上來說,每個端點使用一個ED,譬如對于控制端口的命令,使用一個ED即可,而對于批量端口,則會使用到兩個ED,分別對應批量出和批量入端口。 對于端點來說,代碼中需要注意的參數有如下幾個: l??ED的ToggleCarry 用來確定ED使用哪個數據區收發收據,對于控制端點來說,根據USB規范,每個控制命令總是從Data0開始的,后面再進行切換。因此控制端點的ToggleCarry字段隨便設置,而批量端點的該字段需要得到上一次傳送完畢后的ToggleCarry的值。 l??TD的DataToggle 用來確定TD使用哪個數據區收發數據。該字段有2個比特,高位=0表示使用ED的ToggleCarry字段的值作為要使用的數據區,=1表示自己控制使用哪一個數據區。根據USB規范,對于控制端點收發數據來說,需要TD自己控制使用哪一個數據區。而對于批量端點,不需要TD自己控制,交由ED進行控制。
本文轉自 tywali 51CTO博客,原文鏈接:http://blog.51cto.com/lancelot/243412,如需轉載請自行聯系原作者
本文轉自 tywali 51CTO博客,原文鏈接:http://blog.51cto.com/lancelot/243412,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的基于OHCI的USB主机 —— OHCI(设计思路)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pywinauto自动化操作PC微信提取
- 下一篇: VCSA中配置时间和时区,实测至6.5适