USB總線數據流

一、概述

USB總線的數據流是USB主機和USB設備數據通信的基礎。一般來說,一個完整的USB數據流包含3個階段——令牌階段、數據階段、握手階段。

  • 令牌階段:定義了傳輸類型,表徵數據流的開始。
  • 數據階段:包含了本次傳輸的數據。數據量大小根據端點和傳輸類型而定,最大爲1024Byte。
  • 握手階段:用於數據的接收方報告此次數據傳輸是否成功。

二、字段

在USB協議中,USB數據傳輸數據流是由一系列字段構成的。字段是USB數據流中的最小組成單元。字段有以下幾種:

  • 同步字段(SYNC):用於數據同步;
  • 包標記字段(PID):指明信息包的類型,可以用於差錯控制。
  • 地址字段(ADDR):指明USB總線上的一個設備。
  • 端點字段(ENDP):指明當前通信使用的USB端點。
  • 幀號字段(NUM):指明當前幀的幀號。
  • 數據字段(DATA):傳輸的數據。
  • 校驗字段(CRC):用於循環冗餘校驗。

 

1. 同步字段SYNC

由於USB Host和USB Device之間是兩條串行信號線,沒有同步時鐘,因此容易造成數據錯位,導致數據不同步。爲此,在USB協議中使用同步字段進行所有信息包的同步。

  • 低速/全速同步字段:同步字段長度爲8bit,數據爲80H。在數據總線上先發送低位,在發送高位,並採用NRZI編碼形式,如圖所示。

  • 高速同步字段:同步字段長度爲32bit,數據爲80000000H,發送方式與低速/全速同步字段類似。

2.  包標識字段PID:

詳情可查看:https://blog.csdn.net/haihui1996/article/details/104889037

包標識字段(PID)長度爲8bit,由低4bit的類型字段和高4bit的校驗字段組成。校驗字段是類型字段的反碼

PID字段有如下4中類型信息包:

  • 令牌包:PID[1:0] = 01B;
  • 握手包:PID[1:0] = 10B;
  • 數據包:PID[1:0] = 11B;
  • 特殊包:PID[1:0] = 00B。

3. 地址字段:ADDR

地址字段的長度爲7bit,共有128個地址值。其中0號地址是作爲默認地址,用於USB上電時主機和設備的通信。當USB上電配置完成後,USB主機便重新爲該USB設備分配一個USB地址(地址1到127)。因此USB主機最多隻能有127個設備。

4. 端點字段:ENDP

端點字段的長度爲4bit,共可以表示16個端點,但低於低速USB設備來說,協議只規定了3個端點,而對於高速/全速設備,則可以使用全部16個端點。這些設備中,端點0用於初期的配置,是USB設備必須的。

5. 幀號字段:NUM

幀號字段長度爲11bit,最大值爲07FFH。幀號字段中的值表示了當前幀或小幀的幀號,一般來說,每個幀或小幀發送時,幀號字段裏的內容加1。

6. 數據字段:DATA

數據字段的最大長度爲1024Byte,在數據傳輸時先傳輸低字節,每個字節先傳輸低位,實際數據字段的長度根據傳輸類型和程序的需要決定。

7. 校驗字段:CRC

採用的是循環冗餘校驗,用於保證傳輸的可靠性。令牌包採用5bit的CRC,數據包採用16bit的CRC。


USB通信實例

上圖爲一段USB設備上電的通信實例,是主機與設備建立連接的第一步:

  1. Host發送起始信號幀SOF,表示數據傳輸開始。
  2. 發送SETUP令牌包,表示USB Host開始配置Device,該令牌包使用默認地址(ADDR)0以及端點(ENDP)0,CRC長度爲5bit;
  3. 發送數據包,DATA0爲PID字段,用於標識數據編號,Data字段包含通信數據內容,最後爲16bit的CRC校驗碼。
  4. Device接收到數據之後,向Host反饋ACK應答數據包。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章