USB通信基礎知識


1 USB系統組成

  主機:提供USB接口和接口管理功能的硬件、軟件、固件的復合體。PC機或OTG設備,一個USB系統只能有一個主機

  設備:1.集線器HUB:擴展主機接口,設備可以通過其接入主機  2.功能設備

  物理連接:即USB電纜,USB使用差分信號傳輸數據,全速/高速模式電纜必須外層屏蔽銅質傳輸線,且差分數據線雙絞。一條USB的傳輸線分別由地線、電源線、D+、D-四條線構成,D+、D-是差分輸入線,使用的是3.3V電壓,而電源線與地線可向設備提供5V電壓,最大電流500mA。

2 USB拓撲結構

  每個系統只允許有一個HOST(主機)。允許的最大層數為6層(出去主機);每層的電纜最大長度為5米,電纜總長度為30米;每層最大允許接5個DEVICE(設備);

3 USB系統程序

  1. 應用程序:應用程序運行與USB設備所連接的主機上。部分應用程序會由操作系統的主機提供,大部分應用程序由USB設備供應商提供。

  2. 驅動程序:驅動程序服務於特定的操作系統,為USB設備提供支持。驅動程序通常由操作系統提供,獨立於特定的應用程序和USB設備。

  3. 主機端控制程序:包括硬件和軟件,使USB設備能夠被主機識別。

4 USB速度選擇

 

  全速模式是在D+線上上拉1.5K的電阻。

  低速模式是在D-線上上拉1.5K的電阻。

5 USB信號描述

  

  差分信號:1:D+ > Voh(2.8V) and D- < Vol(0.3V)

            0:D- > Voh and D+ < Vol

  J狀態:   Low Speed  :Differential(差分信號) 0

            Full Speed :Differential(差分信號) 1

  K狀態:   Low Speed  :Differential(差分信號) 1

            Full Speed :Differential(差分信號) 0

6 USB協議

6.1 USB基本規范

  USB在邏輯上被分為三層:信號層、協議層、數據傳輸層。

 

6.2 信號層

6.2.1設備速度的檢測

6.2.2 信號的編碼

  USB中的數據采用反向不歸零編碼方式(NRZI:none-return to zero inverted),並對D+和D-線所處的不同狀態定義成J和K兩種狀態。

數據狀態 D+ D-
低速J狀態 0 1
低速K狀態 1 0

 數據的編碼/解碼(反向不歸零碼)

 

  說明:遇到0的邊沿進行狀態改變,如果是1保持原有狀態

  注:在數據進行NRZI編碼前,每6個連續的1信號之后都會插入一個0信號,以免丟失同步。

6.3 協議層

  包是USB系統中信息傳輸的基本單位,所有的數據都是經過打包后再總線上傳輸的。

  每個包由6部分組成:同步字段(SYNC)、包標識符(PID)、地址字段(ADDR)、數據字段(DATA,包括幀號)、檢驗字段(CRC)、包結束(EOP)。

  

6.3.1 包標識符(PID)

  在USB協議中,USB有很多不同類型的包,通過PID來區分,PID格式如下:

                                                      (LSB)                                             (MSB)

PID0 PID1 PID2 PID3

   包標識符PID是用來標識一個包的類型的。它總共有8位,其中USB協議使用的只有4位(PID0~PID3),另外4位(PID4~PID7)是PID0~PID3的取反,用來校驗PID。

PID類型 PID名 PID[6:0] 描述

令牌包

(Token)

輸出(out)

輸入(in)

幀起始(SOF)

建立(setup)

0x87

0x5A

0xA5

0xB4

Hose To Device 包中有地址+端口號

Device To Hose 包中有地址+端口號

Hose To Device 幀開始標記和幀號

Hose To Device 建立一個控制管道的事務 包中有地址+端口號

數據包

(data)

數據(data)

數據1(data1)

0xC3

0xD2

偶數據包(PID)

奇數據包(PID)

握手

(handshake)

確認(ack)

不確認(nack)

停止(stall)

0x4B

0x5A

0x1E

接收器無錯的接收數據包

接收設備忙不能接收數據

設備出錯通信不上

專用包

(special)

前同步(PRE) 0x2C 主機發送的前同步字。用來區分低速和高速設備

 6.3.2 地址段

  

                              LSB                                  MSB

Addr0 Addr1 Addr2 Addr3 Addr4 Addr5 Addr6

                                                                                                                                                                                    設備地址

                                        LSB               MSB                 +

Endp0 Endp1 Endp2 Endp3

                                                                                                                                                                                    端點地址

  低速設備最多支持3個端點

  全速和高速設備最多支持16個IN和OUT端點

6.3.3 數據段

    

    1 幀號有11位,主機每發出一個幀,幀號就會自加1;

    2 當幀號達到7FFH時,將歸零重新開始計數;

    3 僅在每個SOF幀的幀首傳輸幀號

  

    根據傳輸類型的不同,數據域的數據長度從0到1024字節不等

6.3.4 CRC校驗段

  

      令牌包(token CRC)

      計算SOF Token幀號域的CRC,IN、OUT、SETUP Token地址域的CRC:

              G(X) = X5 + X2 + 1

    DATA CRC

      所以數據域的CRC:

              G(X) = X16 + X15 + X2 +1

6.4 Packet類型

  

6.4.1 Token Packet

                                 LSB                            MSB

Field PID ADDR ENDOP CRC5
Bits 8 7 4 5

                          例子:

SYNC SETUP ADDR ENDP CRC5 EOP
00000001 0xB4 3 0 0x0A 250.000ns

6.4.2 SOP Packet

                                   LSB                         MSB

Field PID Frame number CRC5
Bits 8 11 5

                                 例子:

SYNC SOF Frame # CRC5 EOP
00000001 0xA5 1611 0x11 250.000ns

  6.4.3 Data Packet

                                 LSB                         MSB

Field PID DATA CRC16
Bits 8 0~1024 16

                                               例子:

SYNC PID DATA CRC16 EOP
00000001 0xC3 80 06 00 01 00 00 12 00 0x072F 250.00ns

6.4.4 Handshake Packet

  

                               例子: 

SYNC ACK EOP
00000001 0x4B 233.330ns

6.5 數據傳輸層

  USB提供4中傳輸方式

  控制傳輸(control transfers):突發,非周期性,由主機發起,用於命令和狀態的傳輸

  同步傳輸(isochronous transfers):周期性,持續性的傳輸,用於傳輸與時效相關的信息,並且在數據中保存時間戳的信息

  中斷傳輸(interrput transfers):周期性,低頻率,允許有限延遲的通信

  大容量數據傳輸(bulk transfers):非周期性,大容量突發數據的通信,數據可以占用任意帶寬,並容忍延遲 

6.6 USB枚舉過程

  當一個USB設備插入主機后,會有以下活動:

供電
復位
獲取device descriptor
復位(可選)
分配地址
獲取(device descriptor)
獲取(configuration descriptor)
獲取(string descriptor)(可選)
配置


6.6.1 USB描述符

  通過一套描述符,USB設備向USB主機描述自己的功能、屬性、配置信息等

    標准描述符:

      設備描述符(device descriptor)、配置描述符(configuration descriptor)、接口描述符(interface descriptor)、端點描述符(endpoint descriptor)、字符串描述符(string descriptor)

6.6.1.1 設備描述符

  描述設備的類型、廠商信息、USB的協議類型、端點的包數據的最大長度等,每個USB設備只有一個設備描述符。

  

  eg:

    Joystick_DeviceDescriptor[]=

    {

      0x12,          //整個descriptor的長度;18個字節

      0x01,          //descriptor類別

      0x00,0x02,     //設備所遵循的USB版本號 USB2.0

      0x00,          //設備所實現的類,由每個接口描述符描述所實現的類

      0x00,          //設備所實現的子類,由每個接口描述符描述

      0x00,          //設備所遵循的協議類別,由每個接口描述符描述

      0x40,          //端點0的最大數據包長度,64個字節

      0x83,0x04,     //供應商ID 0x0483

      0x10,0x57,     //產品ID 0x5710

      0x00,0x02;     //設備版本號 2.0

      1,             //用於描述生成廠商的字符描述符的索引號

      2,             //用於描述產品的字符描述符的索引號

      3,             //用於描述產品序列號的字符描述符的索引號

      0x01           //設備所支持的配置數目

    }

6.6.1.2 配置描述符

  每個配置描述符提供了設備特定的配置,描述了設備的接口和端點的性質、供電模式、設備的耗電

  

 

6.6.1.3 接口描述符

  描述了設備不同接口的特性,例如一個設備有U盤的功能又有鍵盤的功能,用兩個接口描述符分別描述兩個功能

  

6.6.1.4 端點描述符

  

6.6.1.5 字符串描述符

  描述了設備制造商、設備名稱、和序列號等信息

  

6.7 EXAMPLE FOR DESCRIPTOR

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM