基於OHCI的USB主機 OHCI(端點)

2021-09-21 22:39:27 字數 1170 閱讀 1524

ohci (open host controller inte***ce),是康柏、微軟、國家半導體等公司共同制定的乙個usb主機介面規範,它提供乙個更抽象的介面來完成usb資料傳輸工作。

在ohci規範中,最重要的幾個概念是端點(endpoint - ed)、傳輸描述符(transport descriptor - td)、主機控制器通訊區(hcca)。其中ed負責確定傳輸型別(控制傳輸、批量傳輸、同步傳輸和中斷傳輸)。td確定傳輸引數。hcca用於確定資料傳輸是否完畢。

端點

ed(endpoint descriptor端點描述符)包含了hc所使用的端點的資訊,包括端點位址、傳輸速度和最大資料報尺寸等內容。另外ed還是td(傳輸描述符)鍊錶的錨點。在ed裡儲存該ed收發資料所使用的td煉表頭指標。當hc處理ed並且發現乙個合法的td位址時,hc根據ed內標明的端點以及td的位址完成資料傳輸。

在usb的規範中規定了4種資料傳輸型別:控制傳輸、批量傳輸、同步傳輸和中斷傳輸。在ohci中對應這4種傳輸型別有4個傳輸ed列表,主要使用控制暫存器(hccontrol)和命令狀態暫存器(hccommandstatus)進行控制。

控制和批量傳輸的ed組成列表,每個ed下面帶著需要進行處理的td,ed包含端點所允許的最大的包大小,控制器硬體完成包的分割。每次傳輸後都會更新指向資料緩衝區的指標,當起始和終止指標相等時,td就釋放到完成佇列(done-queue)。下圖是乙個典型的鍊錶結構圖。

在ohci中,每一幀的時間被分為3塊,首先處理批量和端點列表,這段時間由hcperiodicstart暫存器的設定來控制,然後處理週期性列表(中斷和同步列表),處理完畢如果還有時間,則繼續處理批量和端點列表,如下圖:

對於控制和批量傳輸來說,控制端點比批量端點有更多的匯流排處理機會。每處理1個批量端點就需要處理n個控制端點,這個n:1的比例叫做控制批量服務比例。hcd通過hccontrol暫存器的controlbulkserviceratio欄位來設定比例,比例的範圍從1:1到4:1。

hc強制按照控制批量服務比例進行處理,而不考慮相應列表中的控制和批量ed的數量。如果只有1個控制ed在控制列表中,而控制批量服務比例為4:1,則在批量ed被服務之前,該控制ed被服務4次。如果控制或批量列表中沒有ed,hc就會跳過對應的列表,而立刻處理其它的列表並且完成需要的ed數量。hc會根據控制批量服務比例繼續檢查空列表,如果有新的ed,就按照該比例進行處理。

基於OHCI的USB主機 前言

很久以前,大概是前年年底吧,因為公司專案的要求,我做了基於ohci的usb主機訪問u盤的程式,用來把系統中產生的一些資料儲存到u盤中。本來做的時候就想把其中的一些經驗體會發表的,可是工作實在是太忙,而且也的確有點懶,就一直拖到了現在。做訪問u盤的usb主機,網上有很多現成的例子,從硬體到軟體。可是絕...

基於OHCI的USB主機 USB裝置列舉

usb裝置接入以後,必須進行裝置列舉,得到裝置引數,設定裝置執行配置等引數,下面的 就是對u盤裝置進行列舉的過程。因為沒有使用作業系統,所以函式使用狀態遷移的方式完成列舉,該函式在主迴圈中被呼叫。usb裝置列舉處理 return 當前列舉處理的狀態 short usbenumdev void old...

基於OHCI的USB主機 背景介紹

使用at91rm9200作為主控cpu,利用該晶元的usb主機介面訪問u盤,根據接收的上層命令把相應資料儲存到u盤的指定檔案上。不使用額外的專用usb控制晶元,要求穩定可靠,效率高,不能影響執行在該cpu上的其它程式。at91rm9200程式載入後直接執行,沒有作業系統。以上就是我做的基於ohci的...