1. 程式人生 > >USB主機控制器 Host Controller --深入理解

USB主機控制器 Host Controller --深入理解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

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處理流程如下圖所示:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述