今天我們來詳細地說說數據包的結構以及它們的傳輸過程。USB是串行總線,所以數據是一位一位地在數據線上傳送的。既然是一位一位地傳送,就存在著一個數據位先后的問題。usb使用的是LSB在前的方式,即先出來的是最低位數據,接下來是次低位,最后是最高位(MSB)。一個包,又被分成了很多個域(field),而LSB、MSB就是以域為單位來劃分的。
前面說過,USB數據在發送到總線上之前,要先經過位填充,再經過NRZ1編碼。在這里討論時,所用的數據都是原始的數據,即沒有經過位填充和NRZ編碼的原始數據。以后也是如此,凡是沒有明確說明是位填充或NRZI編碼過的數據,默認為原始的數據。另外還有一個數據傳輸方向的問題,因為在USB系統中,主機處于主導地位,所以把從設備到主機的數據叫做輸入,從主機到設備的數據叫做輸出。
USB總線上傳輸數據是以包為基本單位的。一個包被分成不同的域。根據不同類型的包,所包含的域是不一樣的。但是不同的包有個共同的特點,就是都要以同步域開始,緊跟一個包標識符PD( Packet Identifier),最終以包結束符EOP(End Of Packet)來結束這個包。
同步域是用來告訴USB的串行接口引擎數據要開始傳輸了,請做好準備。除此之外,同步域還可以用來同步主機端和設備端的數據時鐘,因為同步域是以一串0開始的,而0在USB總線上就被編碼為電平翻轉,結果就是每個數據位都發生電平變化,這讓串行接口引擎很容易就能恢復出采樣時鐘信號;對于全速設備和低速設備,同步域使用的是0000001(二進制數,線上的發送順序);對于高速設備,同步域使用的是31個0,后面跟1個1(需要注意的是,這是對發送端的要求,接收端解碼時,0的個數可以少于這個數)。
圖1是一個全速或者低速USB數據包的同步域經過NRZ編碼后的波形。這個波形有7次電平翻轉,即對應著7個0,最后一個電平不翻轉,即對應著1個1當串行接口引擎檢測到一個位的數據未發生翻轉后(即收到數據1),就認為包標識符PID開始了,如圖1.9.1中的PID0PD1,就是包標識符的最低兩位。
圖1 全速設備和低速設備的同步域
包結束符EOP,對于高速設備和全速/低速設備也是不一樣的。全速/低速設備的EOP是一個大約為2個數據位寬度的單端0(SE0)信號。SE0的意思就是,D+和D同時都保持為低電平。由于USB使用的是差分數據線,通常都是一高一低的,而SE0不同,是一種都為低特殊的狀態。SE0用來表示一些特殊的意義,例如包結束、復位信號等。前面提到USB集線器對USB設備進行復位的操作,就是通過將總線設置為SE0狀態大約10ms來實現的。對于高速設備的EOP,使用故意的位填充錯誤來表示。那么如何判斷一個位填充錯誤是真的位填充錯誤還是包結束呢?這個由CRC校驗來判斷。如果CRC校驗正確,則說明這個位填充錯誤是EOP;否則,說明傳輸出錯。具體的定義請參看USB協議,這里只要知道有EOP這么一個東西就行了。
包標識符PID是用來標識一個包的類型的它總共有8位,其中USB協議使用的只有4位(PID~PID3),另外4位(PI4~PID7)是PID~PD3的取反,用來校驗PID。USB協議規定了4類包,分別是令牌包(token packet,PD1~0為01)、數據包( data packet,pid1~0為11)、握手包(handshake packet,piD~0為10)和特殊包( special packet,PiD1~0為00)。不同類的包又分成幾種具體的包。圖2 是USB2.0協議中規定的各種PID,其中有些是在USB1.1協議中沒有的,用號標出。
圖2 USB2.0中定義的各種PID
以上是數據包的結構以及它們傳輸的過程,今天的分享就到這里。
往期回顧:
●USB的四種傳輸類型之控制傳輸
●指針和數組的恩恩怨怨
●USB的四種傳輸類型之中斷傳輸等時傳輸
-
usb
+關注
關注
60文章
7990瀏覽量
266284 -
數據包
+關注
關注
0文章
267瀏覽量
24519
原文標題:USB的包結構以及包的類型
文章出處:【微信號:gh_e7f294a514ca,微信公眾號:單片機匠人】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
mtu配置步驟詳解 mtu與數據包丟失的關系
華納云:服務器平均響應時間和數據包大小之間的影響
esp8266怎么做才能每秒發送更多的數據包呢?
使用AT SAVETRANSLINK時UDP數據包丟失怎么解決?
能否在ESP結束之前通過串行端口停止傳入的UDP數據包的傳輸以解析下一個UDP數據包?
NONOS如何檢查是否實際發送了UDP數據包?
can總線的數據傳輸過程是什么
在Fx3控制器中,USB數據包中的數據有效載荷無法正常發送的原因?
如何在AIROC GUI上獲取良好數據包和總數據包?
如何確保DMA傳輸過程中的數據都是好的?
請問高端網絡芯片如何處理數據包呢?
![請問高端網絡芯片如何處理<b class='flag-5'>數據包</b>呢?](https://file1.elecfans.com/web2/M00/C6/B5/wKgZomYLxKeASed8AAATQZ9dnJg517.png)
DPDK在AI驅動的高效數據包處理應用
![DPDK在AI驅動的高效<b class='flag-5'>數據包</b>處理應用](https://file1.elecfans.com/web2/M00/C0/E6/wKgZomXatDqAZd9FAAAzzFjjAK8970.png)
評論