OHCI (Open Host Controller Interface),是康柏、微軟、國家半導體等公司共同制定的一個USB主機接口規范,它提供一個更抽象的接口來完成USB數據傳輸工作。 在OHCI規范中,最重要的幾個概念是端點EndPoint - ED)、傳輸描述符Transport Descriptor - TD)、主機控制器通信區HCCA)。其中ED負責確定傳輸類型控制傳輸、批量傳輸、同步傳輸和中斷傳輸)。TD確定傳輸參數。HCCA用於確定數據傳輸是否完畢。 下面對上面的概念進行說明,主要是翻譯了OHCI規范的相關內容,更詳細的內容請參考《Open Host Controller Interface Specification for USB》 。 端點 EDEndpoint 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,就按照該比例進行處理。
本文出自 “rainman” 博客,請務必保留此出處http://lancelot.blog.51cto.com/393579/236950