usb host controller

1. 主機控制器(Host Controller)

      • UHCI: Universal Host Controller Interface (通用主機控制接口, USB1.0/1.1)
      • OHCI: Open Host Controller Interface (開放主機控制接口,USB1.0/1.1)
      • EHCI: Enhanced Host Controller Interface (用於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開發過程就是上面這幾步。

2. 關鍵數據結構

     關鍵數據結構關係如下圖所示:

 

 3. 系統架構 

     EHCI負責處理高速設備,OHCI負責處理全速/低速設備。上面這張圖描述了USB控制器在route USB設備時的操作。
     一個port 多個主人,OHCI的角色是companion,伴侶。地位低點。EHCI處理不了再給它處理。 

 

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

4. usb_submit_urb

 usb_submit_urb處理流程如下圖所示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章