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





