USB 2.0 網(wǎng)絡(luò)、傳輸、通訊和協(xié)議
USB在我們生活中應(yīng)用非常廣泛,但絕大部分工程師都只注重USB應(yīng)用層的開(kāi)發(fā),很少有人去了解USB更底層的一些技術(shù)。今天就結(jié)合USB 2.0來(lái)簡(jiǎn)單講述USB底層的一些基礎(chǔ)知識(shí)。
一、USB網(wǎng)絡(luò)
USB物理層網(wǎng)絡(luò)為分層星型網(wǎng)絡(luò):一臺(tái)主機(jī)和若干從設(shè)備。
USB 2.0 網(wǎng)絡(luò)最多可支持127個(gè)外部節(jié)點(diǎn),由于信號(hào)傳播的時(shí)序限制,允許的最大層數(shù)為七個(gè):
主機(jī)(總線主控器)的一層
集線器和設(shè)備六層
Hub:集線器,提供了附加的連接點(diǎn),每個(gè)集線器將單個(gè)連接點(diǎn)轉(zhuǎn)換為多個(gè)連接點(diǎn),也稱為端口。
Func:即Function功能,為系統(tǒng)提供了發(fā)送或接收數(shù)據(jù)和控制信息的功能,每個(gè)unc包含描述設(shè)備功能和資源要求的配置信息。
Compound Device:復(fù)合設(shè)備,是實(shí)現(xiàn)多種功能并包括嵌入式集線器的物理程序包。復(fù)合設(shè)備在主機(jī)上看起來(lái)像是帶有一個(gè)或多個(gè)不可移動(dòng)USB設(shè)備的集線器。
星形網(wǎng)絡(luò)
對(duì)于以主機(jī)為中心的開(kāi)發(fā)人員,USB網(wǎng)絡(luò)看起來(lái)像是星形網(wǎng)絡(luò)。集線器不會(huì)引起任何編程復(fù)雜性,并且就程序員而言是透明的。
無(wú)論是直接連接到根集線器還是通過(guò)中間集線器連接,USB設(shè)備的工作方式都相同。在主/從網(wǎng)絡(luò)中,所有USB設(shè)備都可用作可尋址節(jié)點(diǎn),只有主機(jī)才能啟動(dòng)網(wǎng)絡(luò)中的數(shù)據(jù)傳輸。
提示:
-
任何USB網(wǎng)絡(luò)中只有一個(gè)主機(jī)。 -
在第七層中只能啟用功能。 -
復(fù)合設(shè)備占據(jù)兩層。
二、USB傳輸速率
USB的傳輸速率經(jīng)過(guò)一代一代發(fā)展,越來(lái)越快了,去年(2019)新出來(lái)的標(biāo)準(zhǔn):USB 4 支持高達(dá)40Gbps。
目前流行的USB 3.0、 3.1的傳輸速率其實(shí)已經(jīng)很高了,對(duì)于絕大部分應(yīng)用,這個(gè)速率完全沒(méi)問(wèn)題。
早期的USB傳輸速率相對(duì)于現(xiàn)在很低,但在那個(gè)時(shí)候,傳輸速率其實(shí)已經(jīng)很高了。
(圖片來(lái)源網(wǎng)絡(luò))
三、USB通訊
USB是輪詢總線,USB主機(jī)在其中啟動(dòng)所有數(shù)據(jù)交換,數(shù)據(jù)往返于USB設(shè)備中的端點(diǎn)。
USB主機(jī)中的客戶端將數(shù)據(jù)存儲(chǔ)在緩沖區(qū)中,但沒(méi)有端點(diǎn)。USB主機(jī)和外圍USB設(shè)備具有不同的層,如下圖:
層之間的連接是每層之間的邏輯主機(jī)設(shè)備接口。在邏輯連接之間,使用管道(Pipes)傳輸數(shù)據(jù)。
想要理解USB通訊(上圖結(jié)構(gòu)),需要理解其中每項(xiàng)內(nèi)容含義。
1.Pipes 管道
包含兩種類型的管道:Message pipes(消息管道)和 Stream pipes(流管道)。
消息管道:具有定義的USB格式,并且受主機(jī)控制。消息管道允許數(shù)據(jù)雙向流動(dòng),并且僅支持控制傳輸。
流管道:沒(méi)有定義的USB格式,可以由主機(jī)或設(shè)備控制。數(shù)據(jù)流具有預(yù)定義的方向,即IN或OUT。流管道支持中斷傳輸,同步傳輸和批量傳輸。
2.Transfers傳輸
傳輸包含四種:
Control Transfers:控制傳輸
Interrupt Transfers:中斷傳輸
Isochronous Transfers:同步傳輸
Bulk Transfers:批量傳輸
控制傳輸:通常用于設(shè)置USB設(shè)備。他們始終使用IN / OUT端點(diǎn)0。
中斷傳輸:可用于定期發(fā)送數(shù)據(jù)的地方,例如狀態(tài)更新。
同步傳輸:傳輸實(shí)時(shí)數(shù)據(jù),例如音頻和視頻。它們具有保證的固定帶寬,但沒(méi)有錯(cuò)誤檢測(cè)。
批量傳輸:可用于在時(shí)間不重要的情況下向打印機(jī)發(fā)送數(shù)據(jù)。
3.Endpoints端點(diǎn)
端點(diǎn)可以描述為數(shù)據(jù)源或接收器,存在于USB設(shè)備中,可以從USB主機(jī)接收或等待將其存儲(chǔ)在端點(diǎn)上的數(shù)據(jù)。
端點(diǎn)可作為一種緩沖區(qū),例如,USB主機(jī)的客戶端可以將數(shù)據(jù)發(fā)送到端點(diǎn)1。來(lái)自USB主機(jī)的數(shù)據(jù)將發(fā)送到OUT端點(diǎn)1。準(zhǔn)備就緒后,控制器上的程序?qū)⒘⒓醋x取數(shù)據(jù)。
四、USB協(xié)議
USB是輪詢總線,主機(jī)在其中啟動(dòng)所有數(shù)據(jù)交換,但USB協(xié)議主從都要遵從。USB協(xié)議的內(nèi)容比較復(fù)雜,本節(jié)從大方面簡(jiǎn)單描述其中的部分內(nèi)容。
1.數(shù)據(jù)傳輸
管道模型的數(shù)據(jù)包通常包含:token、 data、 Status(或handshake)包。
數(shù)據(jù)包結(jié)構(gòu)包含:Sync、 Data、 EOP。
包可以被認(rèn)為是數(shù)據(jù)傳輸?shù)淖钚≡兀總€(gè)數(shù)據(jù)包以當(dāng)前傳輸速率傳輸整數(shù)個(gè)字節(jié)。數(shù)據(jù)包以同步模式開(kāi)始,然后是數(shù)據(jù)包的數(shù)據(jù)字節(jié),最后以數(shù)據(jù)包結(jié)束(EOP)信號(hào)結(jié)束。
所有USB數(shù)據(jù)包模式都首先發(fā)送最低有效位。在數(shù)據(jù)包之前和之后,總線處于空閑狀態(tài)。
2.描述符
USB協(xié)議中,有很多描述符:設(shè)備描述符、配置描述符、接口描述符、端點(diǎn)描述符、字符串描述符等。
a.設(shè)備描述符
設(shè)備描述符(USB_DEVICE_DESCRIPTOR)包含了設(shè)備的基本信息:
c.接口描述符
接口描述符(USB_INTERFACE_DESCRIPTOR)是定義端點(diǎn)的集合,該接口支持適用于特定任務(wù)的一組管道。每個(gè)配置可以具有多個(gè)接口,USB主機(jī)可以動(dòng)態(tài)選擇該接口。
d.端點(diǎn)描述符
端點(diǎn)描述符(USB_ENDPOINT_DESCRIPTOR)指定為每個(gè)端點(diǎn)的傳輸類型,方向,輪詢間隔,以及最大分組大小等。
免責(zé)聲明:本文部分素材來(lái)源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問(wèn)題,請(qǐng)與我聯(lián)系刪除。
C語(yǔ)言中幾種特殊標(biāo)準(zhǔn)定義和用法
volatile 在編譯優(yōu)化過(guò)程中有何作用
長(zhǎng)按前往圖中包含的公眾號(hào)關(guān)注
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!