從零開始學USB(七、端點、管道、介面、配置、裝置)
端點(endpoint):端點是USB裝置的唯一可識別部分,其是主機和裝置之間的通訊流的終點。它是一個USB裝置或主機上的一個數據緩衝區,用來存放和傳送USB的各種資料。每個USB邏輯裝置由一組獨立的端點組成。每個邏輯裝置都有一個由系統在裝置連線時分配的唯一地址。裝置上的每個端點在設計時都會得到一個唯一的裝置確定的識別符號,稱為端點號。每個端點都有一個裝置確定的資料流方向。裝置地址,端點號和方向的組合允許唯一地引用每個端點。每個端點都是一個單一連線,支援一個方向的資料流:輸入(in)(從裝置到主機)或輸出(out)(從主機到裝置)。端點具有確定端點和客戶端軟體之間所需傳輸服務型別的特徵。每個端點都有一定的屬性,包括傳輸方式、匯流排訪問頻率、頻寬、端點號和資料包的最大容量。
端點可以決定端點和客戶端軟體之間通訊所需要的傳輸服務型別。一個端點由一下內容來描述:
- 匯流排訪問頻率/延時要求
- 頻寬要求
- 端點號
- 差錯控制要求
- 端點可以接受或傳遞的最大分組
- 端點的傳輸型別
- 對於同步端點而言,還要包括端點和主句之間的資料傳輸方向
對齊進行配置之前,端點處於一種不確定的狀態。所以只有在對其進行了配置工作之後,主機才能訪問某個端點。
端點0要求:所有的USB裝置都要擁有端點0,該端點用於對一個邏輯裝置進行初始化和進行一般的操作(對邏輯裝置進行配置)。端點0提供了對裝置配置資訊的訪問許可權,通過它還允許訪問一般的USB狀態和控制操作。端點0支援控制傳輸,並且總是在裝置接入和上電時就進行配置。
管道(pipe):USB管道是裝置上的端點與主機上的軟體之間的關聯。 管道表示通過記憶體緩衝區和裝置上的端點在主機上的軟體之間移動資料的能力。 有兩種互斥的管道通訊模式:
- 流:通過管道傳輸的資料沒有USB定義的結構
- 訊息:通過管道移動的資料具有一些USB定義的結構
USB不會解釋它通過管道傳輸的資料內容。 即使訊息管道要求根據USB定義構造資料,USB也不會解釋資料的內容。
端點和管道的關係:
主機和 endpoint之間的資料傳輸是通過 pipe。 endpoint 就是通訊的傳送或者接收點,你要傳送資料,那你只要把資料傳送到正確的端點那裡就可以了。端點也是有方向的,從 usb 主機到裝置稱為out 端點,從裝置到主機稱為 in 端點。
而管道,實際上只是為了讓我們能夠找到端點,就相當於我們日常說的郵編地址,比如一個國家,為了通訊,我們必須給各個地方取名,完了給各條大大小小的路取名,比如你要揭發你們那裡的官員腐敗,你要去上訪,你從某偏僻的小縣城出發,要到北京來上訪,那你的這個端點(endpoint)就是北京,而你得知道你來北京的路線,那這個從你們縣城到北京的路線就算一條管道。有人好奇的問了,管道應該有兩
端吧,一個端點是北京,那另一個端點呢?答案是,這條管道有些特殊,就比如上訪,我們只需要知道一端是北京,而另一端是哪裡無所謂,因為不管你在哪裡你都得到北京來上訪。沒聽說過你在山西你可以上訪,你要在寧夏還不能上訪了,沒這事對吧。嚴格來說,管道的
另一端應該是 usb 主機,即前面說的那個 host。
端點不但是有方向的,而且這個方向還是確定的,或者 in,或者 out,沒有又是 in 又是 out的,魚與熊掌是不可兼得的。有沒有特殊
的那,看你怎麼去理解 0 號端點了,協議裡規定了,所有的 USB 裝置必須具有端點 0,它可以作為 in 端點,也可以作為 out 端點, USB 系統軟體利用它來實現預設的控制管道,從而控制裝置。除了端點0,其餘的端點在裝置配置前,不能與主機通訊,只有向主機報告這些端點的特性並被啟用後才能被啟用。端點也是限量供應的,不是想有多少就有多少的,除了端點 0,低速裝置最多隻能擁有 2 個端點,高速裝置也最多隻能擁有 15 個 in 端點和 15 個 out 端點。這些端點在裝置內部都有唯一的端點號,這個端點號是在裝置設計時就已經指定的。
介面
介面和管道一樣,是一個邏輯概念。一個Interface,可以理解為集成了鍵盤和滑鼠的USB裝置,裡面就是兩個interface,一個是鍵盤,另一個是滑鼠。Interface之間通常是隔離的,互相不干擾。一個介面可以理解為一個功能。
配置
每個USB裝置,可以有一個或多個配置(在probe期間,需要選擇一種配置)。不同的配置體現出不同的組合介面。
比如一個MP4裝置,可以有按鍵,視屏,音訊,旋鈕四種介面。
比如可以通過觸控式螢幕調節音量,那個旋鈕這個介面就可以取消,這樣就組成了兩種配置。
配置1:按鍵(介面)、視屏(介面)、音訊(介面)、旋鈕(介面)
配置2:按鍵(介面)、視屏(介面)、音訊(介面)
每個介面都需要實現響應的驅動程式。
物理匯流排拓撲
USB上的裝置通過分層星形拓撲物理連線到主機。 USB連線點由稱為集線器的特殊類USB裝置提供。 集線器提供的附加連線點稱為埠。 主機包括稱為根集線器的嵌入式集線器。 主機通過根集線器提供一個或多個附著點。 為主機提供附加功能的USB裝置稱為功能。 為防止圓形附件,分層對USB的星形拓撲進行排序。
可以將多個功能打包在一起,看起來是單個物理裝置。 例如,鍵盤和軌跡球可以組合在一個包中。 在包裝內部,各個功能永久地連線到集線器,它是連線到USB的內部集線器。 當多個功能與集線器組合在一個封裝中時,它們被稱為複合裝置。集線器和連線到複合裝置內集線器的每個功能都分配有自己的裝置地址。 具有彼此獨立控制的多個介面的裝置被稱為組合裝置。 組合裝置只有一個裝置地址。 從主機的角度來看,一個複合裝置與附加多個功能的獨立集線器相同。
注意:協議中用兩個單詞分貝描述了複合裝置和組合裝置。其中,組合裝置就是一個集線器下掛多個裝置,但是隻有一個裝置地址。而複合裝置雖然也是一個集線器下掛多個裝置,每個裝置都有自己的裝置地址。
複合裝置
組合裝置
實際上,USB裝置應該被視為不同的功能。多個功能可以被封裝在一起形成一個物理裝置。
複合裝置其實就是幾個裝置通過一個USB Hub形成的單一裝置,複合裝置內的Hub和與Hub相連的各個功能會分配各自的裝置地址。組合裝置也就是具有多個介面的裝置,每個介面代表一個獨立的裝置,但是組合裝置只有一個裝置地址。
採用複合裝置方法開發多功能USB裝置時,其開發過程同開發兩種不同型別的USB裝置相同,開發難度較低。
邏輯匯流排拓撲
當裝置在分層星形拓撲中物理連線到USB時,主機與每個邏輯裝置進行通訊,就像它直接連線到根埠一樣。。 即使大多數主機/邏輯裝置活動使用此邏輯透檢視,主機仍會保持對物理拓撲的瞭解,以支援處理集線器的刪除。 刪除集線器後,必須從主機的邏輯拓撲檢視中刪除連線到集線器的所有裝置。
裝置,配置,介面,端點的關係
一個裝置通常有一個或多個配置;
一個配置通常有一個或多個介面;
一個介面通常有一個或多個設定;
一個介面有零或多個端點。
最後,再次總結一下每個的主要作用。
端點:端點是USB裝置的唯一可識別部分,其是主機和裝置之間的通訊流的終點。是一個USB裝置或主機上的一個數據緩衝區,用來存放和傳送USB的各種資料。(邏輯上)
介面:可以理解為一個功能。(物理功能)
配置:對介面的組合,在連線期間選定是那種組合。(邏輯上)