USB主機控制器ECHI

2021-08-09 18:13:42 字數 1942 閱讀 9343

1. 主機控制器(host controller)

• uhci: universal host controller inte***ce (通用主機控制介面, usb1.0/1.1)

• ohci: open host controller inte***ce (開放主機控制介面,usb1.0/1.1)

• ehci: enhanced host controller inte***ce (用於usb2.0高速裝置的「增強主機控制介面」)    

usb的拓撲結構決定了主機控制器就是最高統帥,沒有主機控制器的要求裝置永遠不能主動發資料。所以主機控制器在usb的世界裡扮演著重要的角色,它是幕後操縱者。

比如說host傳送setup包獲取裝置描述符是怎麼發出去的?

這個過程包含很多資訊,比如:如何在d+和d-這兩根線上傳過去的、又傳過來的。  這一切的工作都是主機控制器給我們做的。usb host控制器的規範有很多種這裡只介紹混得不錯的ehci和ohci。這個ehci主要針對高速的usb裝置。如果要操作全速和低速可以考慮ohci。

• 什麼是usb controller?

 usb 裝置和主機的介面就是host controller,乙個主機可以支援多個host controller比如分別屬於不同廠商的。那麼usb host controller 本身是做什麼的? controller(控制器):用於控制。控制什麼?控制所有的usb裝置的通訊。

cpu把要做的事情分配給主機控制器,然後自己想幹什麼就幹什麼去,主機控制器替他去完成剩下的事情,事情辦完了再通知cpu。否則讓cpu去盯著每乙個裝置做每一件事情,那是不現實的。

控制器的主要工作是什麼? 把數扔出去,把數拿回來。絕對不應該偷偷加工資料。

主機控制器控制匯流排上包的傳輸, 使用1ms或125us的幀。在每幀的開始時,主機控制器產生乙個幀開始包(sof: start of frame)。

sof包用於同步幀的開始和跟蹤幀的數目。包在幀中被傳輸,或由host到device(out事務),或由device到host(in事務)。傳輸總是由host發起(輪詢傳輸)。回此每條usb匯流排只能有乙個host。每個包的傳輸都有乙個狀態階段同(同步傳輸除外),資料接收者可以在其中返回ack(應答接收),nak(重試),stall(錯誤條件)或什麼也沒有(混亂資料階段,裝置不可用或已經斷開)。

• 主機控制器driver的工作是什麼?

讓主機控制器工作起來,發揮它的潛力。 讓控制器發資料、收資料 。主機控制器主要包含以下幾步:

  1) 按照主機控制器的要求組織結構體  

2) 將結構體在合適的時間、放在合適的地方 

3)  trigger 

4)  等待完成訊號

主機控制器driver開發過程就是上面這幾步。

關鍵資料結構關係如下圖所示:

ehci負責處理高速裝置,ohci負責處理全速/低速裝置。上面這張圖描述了usb控制器在route usb裝置時的操作。

乙個port 多個主人,ohci的角色是companion,伴侶。地位低點。ehci處理不了再給它處理。 

關於埠邏輯這塊需要特別注意,driver設計者要注意:當前埠正在屬於誰。當埠被ohci所擁有時,你插入個高速裝置怎麼辦?沒辦法!在沒有插入裝置時,就不應該讓ohci擁有這個埠。只有ehci控制器才能識別出裝置是全速、高速還是低速。

usb_submit_urb處理流程如下圖所示:

usb主機控制器說明

usb拓撲 對於每個嵌入式的cpu晶元中一般都會整合乙個或多個host 控制器,每個host控制器其實就是乙個pci裝置,掛載在pci匯流排上,在linux系統中,驅動開發人員應該給host 控制器提供驅動程式,host 控制器用usb hcd結構來表示。該結構體在 include linux us...

USB驅動之主機控制器驅動

usb 主機驅動的整體結構 usb 主機控制器有 34種規格 ohci open host controller inte ce uhci universal host controllerinte ce 和 ehci enhanced host controller inte ce ohci 驅動...

USB主機控制器的OHCI暫存器

usb主機控制器的ohci暫存器可以分為4種 1 控制及狀態組 2 儲存器指標組 3 幀控制組 4 邏輯根集線器 root hub 組 控制及狀態組 包括hcrevision,hccontrol,hccommandstatus,hcinterruptstatus,hcinterruptenable,...