基於Linux的USB子系統學習 --- ing


一、參考資料


  1.《USB基礎知識概論》 

    http://www.crifan.com/files/doc/docbook/usb_basic/release/html/usb_basic.html

  2.《USB in a NutShell》

    http://www.beyondlogic.org/usbnutshell/usb1.shtml

  3.《USB開發大全(第四版)》

    http://download.csdn.net/download/qqqq419276485/7839403


二、USB基礎知識


2.1 USB硬件知識


  從物理上的邏輯結構來說,USB設備包含了主機Host端設備Device端。其中,主機Host端,有對應的硬件的USB的主機控制器Host Controller;而設備端,連接的是對應的USB設備USB的主機控制器有四種類型,分別是OHCIUHCIEHCI,和xHCI,它們之間的區別和聯繫如下表所示。


  USB2.0的標準接口引腳定義如下,包含一根電源線,一根地線,兩根信號線。USB3.0的接口引腳較多,在此不再展開,可參考文章《USB 2.0 A型、B型、Mini和Micro接口定義及封裝》 和《USB 3.0連接器引腳、接口定義及封裝尺寸》。值得一提的是,目前多數手機廠商已宣佈統一使用Micro USB接口作爲手機充電器標準接口



2.2 USB軟件知識


  要使USB設備正常工作,除了硬件之外,還需要軟件的支持。對於USB設備端來說,內部是需要有對應的設備端驅動,稱其爲固件Firmware,它實現了設備端USB所要做的事情,主要是相應一些標準的請求,完成對應的數據讀取和寫入等。對應的,在主機Host端,也需要對應的驅動,此部分驅動,不論是Linux下,還是Windows下,都已經實現了常見的驅動了,所以一般來說,很少需要驅動開發者再去寫相關的驅動。

  在設備驅動開發階段或者USB出現問題,需要調試的時候,往往就需要一些USB調試工具了。一般來說,都包含了對應的USB硬件測試工具,加上對應的軟件工具,去捕獲對應USB總線上的數據,即所謂的USB抓包,然後再去分析抓取出來的數據,是否是期望的,是否符合USB協議的規範定義。另外,當然也有一些USB開發相關的工具,具體工具可在網上查詢。


三、USB協議概覽


  關於USB 2.0和USB 3.0等USB的協議規範,可以去官網下載:

http://www.usb.org/developers/docs/

USB協議的文檔頁數很多,沒必要看完整個USB標準。此處,就來簡單以USB 2.0規範爲例,分析一下,具體其都主要包含哪些內容。你會發現,其實和USB協議本身相關的內容,相對則不會那麼多,大概只有97頁左右的內容,是我們所要關心的。



附錄1:USB 2.0標準協議規範筆記


第4章 架構概述


  本章顯示了通用串行總線(Universal Serial Bus, USB)架構和重要概念的概述。USB是一種有線總線,支持主機計算機和大範圍同時可訪問的外設之間數據交互。附屬的外設通過一種主機調度和基於令牌的協議共享USB帶寬。總線允許外設在主機和其它外設在操作時依附,配置,使用和分離。

4.1 USB系統描述

  USB系統被描述爲三種定義域:
 USB互連
 USB設備
 USB主機

  USB互連是USB設備和主機之間連接與通信的方式。包括下列部分:
 總線拓撲:USB設備與主機之間的連接模型。
 內層聯繫:In terms of a capability stack, the USB tasks that are performed at each layer in the system.
 數據流模型:系統中數據通過USB在產生者與消費者之間移動的方式。
 USB調度:USB提供了共享的內部連接。訪問內部連接是被調度的,爲的是支持同步數據傳輸並消除仲裁開銷。

4.1.1 總線拓撲

  USB物理層內部連接是一種分層的星狀拓撲。USB hub位於每個星的中心。圖4-1闡述了USB的拓撲。

  由於對於hub和線纜傳播時間的所允許時間的約束,所允許最大的層次數是七層(包括root層)。由於七層的約束,主機和任何設備之間的一條通信線路中最多支持5個非root hub。如圖4-1中的組合設備,佔據了兩層,因此如果依附在第七層,它不能被使能。在第七層,只有功能(即圖中所表示的Func)可以被使能。



第5章 USB數據流模型


5.1 實現者視角

  圖5-2顯示了一個較深的USB視圖,特別的,有四個重點實現區域:
 > USB物理設備:USB線尾端的一小塊硬件,執行一些有用的終端用戶功能。
 客戶端軟件:在主機端執行的軟件,響應USB設備。這個客戶端軟件典型地由操作系統提供或伴隨USB設備提供。
 USB系統軟件:在特定操作系統中支持USB的軟件。USB系統軟件典型地由操作系統提供,獨立於特定的USB設備或客戶端軟件。
 USB主機控制器(主機端總線接口):使得USB設備可以被連接到主機的硬件和軟件。


  如圖5-2所示,主機到設備的簡單連接需要許多層與實體之間的交互。USB總線接口層提供主機與設備間的物理/信號/數據包的連接性。USB設備層是USB系統軟件具有的視角,爲的是與設備間執行通常的USB操作。功能層通過一個恰當匹配的客戶端軟件層,向主機提供附加的能力。從層內視角來看,USB設備層和功能層都有一個邏輯上的通信,而實際上使用的是USB總線接口層來完成數據傳輸。


  物理視角的USB通信如章節6、7和8中所描述,與章節9和10所講述的邏輯視角通信有關聯。本章講述這些影響USB實現者的關鍵概念,應該被所有人閱讀。


  爲了描述和管理USB通信,下列概念是重要的:
 > 總線拓撲:5.2講述了USB主要的物理和邏輯組件,以及它們如何相互關連。
 > 通信流模型:5.3到5.8講述了主機與設備間通過USB是如何通信的,定義了四種USB傳輸類型。
 > 總線訪問管理:5.11講述了主機內的總線訪問是如何被管理的,以支持USB設備大範圍的通信流。
 > 等時傳輸的特殊考慮:5.12講述了USB對於需要等時數據傳輸設備的特殊性。對於非等時傳輸的設備實現着不需要閱讀5.12。

5.2 總線拓撲


  USB拓撲有四個主要部分:
 > 主機與設備:USB系統的主要組件
 > 物理拓撲:USB單元如何連接
 > 邏輯拓撲:多種USB單元的角色和職責,從主機和設備視角來看USB如何呈現
 > 客戶端軟件到功能的關聯:客戶端軟件同與它相關的USB設備上的功能接口之間的如何看待彼此

5.2.1 USB主機


  USB邏輯組成如圖5-3所示,包含下列部分:
 USB主機控制器
 集成的USB系統軟件(USB驅動,主機控制器驅動和主機軟件)
 客戶端


  USB主機作爲USB的協調實體佔據了一個獨特的位置。除了它特殊的物理層位置,主機對於USB以及他所附屬的設備具有專門職責。主機控制所有對USB的訪問。USB設備僅當被主句准許訪問時才能獲得對總線的訪問。主機也負責監視USB的拓撲。主機以及職責的完整討論,參考章節10。

5.2.2 USB設備


  USB物理設備的邏輯構成如圖5-4所示,包含下列部分:
 > USB總線接口
 USB邏輯設備
 功能


  USB物理設備對主機提供附加功能。USB設備提供的功能類型非常廣泛。然而,所有的USB邏輯設備對主機呈現了相同的基本接口。這允許主機以相同的方式管理不同USB設備的USB相關方面。


  爲幫助主機識別和配置USB設備,每個設備攜帶並報告配置相關信息。所報告信息的一部分對於所有邏輯設備是相同的。其它信息與設備提供的功能相關。這種信息的詳細格式非常多,取決於設備的設備類。USB設備的完整討論參考章節9。

5.2.3 物理總線拓撲


  USB上的設備物理上通過一個分層的星狀拓撲連接,如圖5-5中所闡述。USB依附點由一種被稱爲集線器(hub)的特殊USB設備類所提供。集線器提供的附加依附點被稱爲端口(port)。主機中嵌入的集線器被稱爲根集線器(root hub)。主機通過根集線器提供一個或多個依附點。提供給主機附加功能的USB設備被稱爲功能(function)。爲了防止循環依附,分層的順序被施加在USB的星形拓撲。



5.2.4 邏輯總線拓撲


  當設備物理上依附到分層、星狀拓撲的USB,主機與每個邏輯設備通信有如它是被直接連接到根端口的,如圖5-7所示,對應於圖5-5中所示的物理拓撲。集線器也是邏輯設備,但爲了簡化圖沒有在圖5-7中顯示。儘管絕大多數主機/邏輯設備活動使用這一邏輯視圖,主機維護一個物理拓撲來支持移除集線器時的處理。當一個集線器被移除,所有依附於該集線器的設備必須從主機視角的邏輯拓撲中被移除。


5.2.5 客戶端軟件到功能的關聯


  儘管USB的物理和邏輯拓撲反映了總線的共享本性,但是客戶端軟件(CSw)操作USB功能接口被呈現爲它只處理它感興趣的接口。圖5-8闡述了設備設計者視角的客戶端軟件與USB功能之間的關係。



5.3 USB通信流

  USB提供了主機上軟件與它的USB功能之間的通信服務。功能可以有針對不同的客戶端到功能交互的不同的通信流需求。USB提供了更好的總體總線利用率,通過允許不同的通信流到USB功能的分隔。每個通信流利用一些訪問的總線來完成客戶端與功能之間的通信。每個通信流在設備上的一個端點被終止。設備端點被用於識別通信流。


  圖5-9顯示了圖5-2的一個更爲詳細的視圖。圖5-2所支持的邏輯設備和功能層通信流的實際通信流的完整定義。這些實際通信流跨越幾個接口邊界。兩個主機端的軟件接口如下:
 > 主機控制器驅動(Host Controller Driver, HCD):USB主機控制器與USB系統軟件之間的軟件接口。這個接口允許一定範圍內的主機控制器實現,而不需要所有的主機軟件依賴於任何特定實現。一個USB驅動可以支持不同的主機控制器,而不需要主機控制器實現的特定知識。主機控制器是實現者提供一個HCD實現來支持主機控制器。
 > USB驅動(USB Driver, USBD):USB系統軟件與客戶端軟件之間的接口。這個接口提供給客戶端方便的函數來操作USB設備。


  USB邏輯設備對於USB系統來講是端點的集合。端點分組成端點集來實現一個接口。接口被視爲功能。USB系統軟件使用默認控制管道來管理設備。客戶端軟件使用管道束(與一個端點集相關聯)操作一個接口。客戶端軟件請求數據通過USB在主機上的緩存和USB設備上的端點之間移動。主機控制器(或者是USB設備,取決於傳輸方向)打包數據通過USB移動數據。


  圖5-10闡述了端點與主機端內存緩衝之間如何通過管道傳遞通信流的。


  主機上的軟件通過一個通信流集合與邏輯設備進行通信。通信流的集合被設備軟件/硬件設計者選擇來高效匹配設備的通信需求。


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