usb包的結構和分類

2021-09-01 19:41:57 字數 2418 閱讀 5666

usb的傳輸:總是低位在前,高位在後。

usb的傳輸方向:從裝置到主機的資料為輸入;從主機到裝置的資料叫做輸出。

1.包結構

以同步域開始,緊跟著乙個包識別符號pid(packet identifier),最終以包結束符eop(end of packet)結束這個包。(同步域+包識別符號pid+包結束符eop)

同步域1. 作用:① 通知usb序列介面引擎資料要開始傳輸;② 同步主機和裝置之間的時鐘。

2. 格式:① 全速/低速裝置的同步域為00000001;② 高速裝置的同步域為31個0,後面跟1個1;注意:這是對傳送端的要求,接收端在解碼時,0的個數可以少於這個數。

包識別符號pid

1. 包識別符號pid是用來標識乙個包的型別。

2. pid共有8位,目前usb協議僅使用4位(pid0~pid3),另外4位(pid4~pid7)是pid0~pid3的取反,用來校驗pid。傳輸的順序為pid0,pid1,pid2,pid3,...,pid7。

包結束符eop

1. 全速/高速模式的eop是乙個約為2個資料寬度的se0;

2. 高速模式的eop是通過故意的位填充錯誤實現的。

3. 單端0(se0):d+和d-同時保持低電平。

4. 單端0的用處:① 包結束;② 復位訊號(usb集線器對usb裝置的復位操作,就是將匯流排設定為se0約10ms)。

5. q: 如何乙個位填充錯誤是eop還是傳輸錯誤?a: 通過crc校驗,即如果crc正確,則說明這個位填充是eop;否則說明傳輸錯誤

2.包分類

根據包識別符號pid的不同,包可以分為四種包:

令牌包(token packet, pid1~0為01)

資料報(data packet, pid1~0為11)

握手包(handshake packet, pid1~0為10)

特殊包(special packet, pid1~0為00)

令牌包令牌包用來啟動一次usb傳輸。由於usb是主從結構的拓撲結構,所以所有的資料傳輸都是主機發起的(唯一的例外是支援遠端喚醒的裝置能夠主動改變匯流排的狀態,讓集線器感知到裝置的喚醒訊號,但是這一過程並不傳送資料,只是改變匯流排的狀態)。

令牌包分4種:輸出(out)、輸入(in)、建立(setup)、幀起始(sof)。

輸出令牌包:主機將要向裝置傳送乙個資料報。

輸入令牌包:主機將要從裝置讀取乙個資料報。

建立令牌包:與輸出令牌包幾乎相同,不同之處是建立令牌包只使用data0,並且傳送到裝置的控制端點,裝置必須接收建立令牌包。

幀起始令牌包:在每幀(或微幀)開始時傳送,並且以廣播的形式傳送,使得匯流排上的所有usb全速/高速裝置都可以接收到sof令牌包。

out、in、setup令牌包結構圖

同步域8位識別符號pid

7位位址

4位端點號

5位crc5校驗

eopsof令牌包結構圖

同步域8位識別符號pid

11位幀號

5位crc5校驗

eop

資料報同步域 8位識別符號 pid 位元組0 位元組1… 位元組n 16位crc16校驗 eop

資料報型別不匹配主要發生在握手包

握手包同步域 8位識別符號pid eop

1. ack:正確接收資料,並且有足夠的空間容納資料。主機和裝置都可以使用ack來確認,而nak、stall、nyet只有裝置才能夠返回,主機不能使用這些握手包。

2. nak:① 沒有資料需要返回;② 資料接收正確,但是沒有足夠的空間容納資料。

3. stall:裝置無法執行這個請求或者裝置已掛起。裝置返回stall,需要主機干預才能解除這種stall狀態。

4. nyet:只在usb2.0高速裝置輸出裝置中使用,表示裝置本次資料成功接收,但是沒有足夠的空間來接收下一次的資料。主機在下一次輸出資料前,將使用ping令牌包來探測裝置是否有足夠的空間接收資料,以免浪費不必要的頻寬和時間。

usb的transaction,包括乙個token包、乙個data包和乙個handshake包。

token、data和handshake都屬於四種pid型別中的。

1. token包只包括sync、pid、位址域、crc,並沒有data欄位,它的名字起的很形象,就是用來標記所在transaction裡接下來動作的。

2. out和setup token包,裡面的位址域指明了接下來要接收data包的端點,

3. in token包,位址域指明了接下來哪個端點要傳送data包。

只有主機才有權利傳送token包,協議裡就這麼規定的

與token包相比,data包裡沒了位址域,多了data欄位,這個data欄位對於低速裝置最大為8位元組,對於全速裝置最大為1023位元組,對於高速裝置最大為1024位元組。,它就是躲在token後邊兒用來傳輸資料的。

handshake包的成分,除了sync,它就只包含了乙個pid,通過pid取不同的值來報告乙個transaction的狀態,比如資料已經成功接收了等。

USB的包結構及包分類

1.包結構 以同步域開始,緊跟著乙個包識別符號pid packet identifier 最終以包結束符eop end of packet 結束這個包。包識別符號pid 包結束符eop 2.包分類 根據包識別符號pid的不同,包可以分為四種包 令牌包 token packet,pid1 0為01 資...

USB科普基礎2 USB的包結構及包分類

usb傳輸的資料總是低位在前,高位在後.注意,這是序列傳輸中的低位元,當然,在位元組層面上,usb的資料格式也是小端的.usb的傳輸方向 從裝置到主機的資料為輸入,從主機到裝置的資料叫做輸出.usb的傳輸方向都是從主機方向看的.包就是usb匯流排上進行的一次資料傳輸,是底層運算元據的最小單元.每個包...

usb系統拓撲結構和usb裝置邏輯結構

對於每個usb系統來說,都有乙個稱為host控制器的裝置,該host控制器和乙個根hub作為乙個整體。這個根hub下可以接多級hub,每個hub又可以接子hub。每個usb裝置作為乙個節點接在不同級別的hub上。每條usb匯流排上最多可以接127個裝置。usb主控制器 負責處理主機與裝置之間的電氣和...