目錄
Ⅰ USB總線接口
1 USB接口標準
2 USB總線信號
3 USB數據編解碼和位填充
4 USB拓撲結構
5 USB邏輯部件
Ⅱ USB設備
1 USB設備供電方式
2 USB設備插入檢測機制
3 USB設備狀態
4 USB設備枚舉過程
5 USB描述符
Ⅲ USB傳輸
1 USB傳輸格式
2 包packet
3 事務transaction
4 傳輸transfer
USB是通用串行總線(Universal Serial Bus)的縮寫。在USB1.0和USB1.1版本中,只支持1.5Mb/s的低速(low-speed)模式和12Mb/s的全速(full-speed)模式,在USB2.0中,又加入了480Mb/s的高速模式。
ⅠUSB總線接口
1 USB接口標準
標準的USB連接器有A型、B型和Mini B型,每個型號又分為插頭和插座。
2 USB總線信號
USB使用差分傳輸模式,兩根數據線D+和D-。
差分信號1:D+>2.8V,D-<0.3V;
差分信號0:D->2.8V,D+<0.3V。
- J狀態和K狀態
低速下:D+為“0”,D-為“1”是為“J”狀態,“K”狀態相反;
全速下:D+為“1”,D-為“0”是為“J”狀態,“K”狀態相反;
高速同全速。 - SE0狀態
D+為“0”,D-為“0” - IDLE狀態
低速下空閑狀態為“K”狀態;
全速下空閑狀態為“J”狀態;
高速下空閑狀態為“SE0”狀態。
針對全速模式,有以下幾個重要信號:
-
Reset信號
主機在要和設備通信之前會發送Reset信號來把設備配置到默認的未配置狀態。即SE0狀態保持10ms。 -
Resume信號
20ms的K狀態+低速EOP -
Suspend信號
3ms以上的J狀態 -
SOP信號
從IDLE狀態切換到K狀態 -
EOP信號
持續2位時間的SE0信號,后跟隨1位時間的J狀態 -
SYNC信號
3個重復的K、J狀態切換,后跟隨2位時間的K狀態
3 USB數據編解碼和位填充
USB采用NRZI(非歸零編碼)對發送的數據包進行編碼。即:
輸入數據0,編碼成“電平翻轉”;輸入數據1,編碼成“電平不變”
位填充是為了保證發送的數據序列中有足夠多的電平變化。填充的對象時輸入數據,即先填充后編碼。數據流中每6個連續的“1”,就要插入1個“0”。
接收方解碼NRZI碼流,然后識別出填充位,并丟棄它們。
4 USB拓撲結構
USB是一種主從結構的系統,主機叫做Host,從機叫做Device。Device包括USB function和USB HUB。
USB總線基于分層的星狀拓撲結構,以HUB為中心,連接周圍設備。總線上最多可連接127個設備。Hub串聯數量最多5個。
5 USB邏輯部件
Ⅱ USB設備
1 USB設備供電方式
USB設備有兩種供電方式:
1)自供電設備:設備從外部電源獲取工作電壓
2)總線供電設備: 設備從VBUS(5v)取點
對總線供電設備,區分低功耗和高功耗USB設備。
低功耗設備是最大功耗不超過100mA。
高功耗設備是枚舉時最大功耗不超過100mA,枚舉完成配置結束后功耗不超過500mA。
設備在枚舉工程中,通過配置描述符來向主機報告它的供電方式和功耗要求的。
2 USB設備插入檢測機制
沒有設備連上主機時,主機的D+和D-都在低電平(SE0狀態),當SE0狀態 持續一段時間了,就被主機認為是斷開狀態。
當設備連上主機時,主機檢測到某一數據線電平拉高并持續一段時間,就認為有設備連上來了。主機必須在復位設備前,立即采樣總線狀態來判斷設備的速度。
3 USB設備狀態
USB設備有插入、供電、初始化、分配地址、配置和掛起六中狀態,其狀態轉移圖如下。
4 USB設備枚舉過程
對應USB設備的狀態,host對USB設備會有以下活動:
在枚舉過程中,都是使用控制傳輸。
- 復位階段
USB主機檢測到USB設備插入后,就會對設備復位。USB設備在總線復位后其地址為0,這樣主機就可以通過地址0和那些剛剛插入的設備通信。USB主機往地址為0的設備的端點0發送獲取設備描述符的標準請求。設備會將設備描述符返回給主機,主機在成功獲取到數據包后,就會返回一個確認數據包給設備,從而進入接下來的分配地址階段。 - 分配地址階段
主機對設備又一次復位,就進入到分配地址階段。主機往地址為0的設備的端點0發送一個設置地址的請求,新的設備地址就包含在建立過程的數據包中。具體的地址由主機負責管理,主機會分配一個唯一的地址給剛接入的設備。設備在收到這個建立過程后,就會進入到狀態過程。設備等待主機請求狀態返回,收到狀態請求后,設備就返回0長度的狀態數據包。如果主機確認該狀態包已經正確收到,就會發送應答包ACK給設備,設備在收到這個ACK之后,就要啟用新的設備地址了。這樣設備就分配到了一個唯一的設備地址。 - 獲取描述符階段
獲取描述符可以形象地表述如下:
Host:你是什么設備?
Device:12 01 0100....Device Descriptor
Host:你有幾種功能?
Device:09 02 09....Configuration Descriptor
Host:每個功能有幾個接口?
Device:09 04 00....Interface Descriptor
Host:每個接口使用哪幾個端點?
Device:06 05 82....Endpoint Descriptor
Host:好了,我知道你是誰了,開始傳輸設備吧!
Device:OK,Read Go!
5 USB描述符
USB描述符有以下11類:
每種描述符的第一個字節描述該描述符包含的字節數目,第二個節描述該描述的類型。
-
Device Descriptor
-
Configuration Descriptor
-
Interface Descriptor
-
Endpoint Descriptor
-
String Descriptor
Ⅲ USB傳輸
1 USB傳輸格式
USB總線上傳輸數據是以包(packet)為基本單位的,必須把不同的包組織成事務(transaction)才能傳輸數據。
USB協議規定了四種傳輸(transfer)類型:批量傳輸、同步傳輸、中斷傳輸和控制傳輸。其中,批量傳輸、同步傳輸和中斷傳輸每傳輸一次數據都是一個事務,控制傳輸包括三個過程,建立過程和狀態過程分別是一個事務,數據過程則可能包含多個事務。
2 包packet
一個包被分為不同域,根據不同類型的包,所包含的域是不一樣的。但都要以同步域SYNC開始,緊跟一個包標識符PID,最終以包結束符EOP來結束這個包。
-
PID域
PID是用來標識一個包的類型的。它共有8位,只使用4位(PID0PID3),另外4位是PID0PID3的取反,用來校驗PID。
PID
PID規定了四類包:令牌包、數據包、握手包和特殊包。同類的包又各分為具體的四種包。
包類型
僅在幀首傳輸一次SOF包。 -
地址域
地址共占11位,其中低7位是設備地址,高4位是端點地址。
地址 幀號域
幀號占11位,主機每發出一個幀,幀號都會自加1,當幀號達到0x7FF時,將歸零重新開始計數。-
數據域
根據傳輸類型的不同,數據域的數據長度從0到1024字節不等。
數據長度 -
CRC域
CRC校驗
A. 令牌包
令牌包有四種:
- OUT: 通知設備將要輸出一個數據包
- IN: 通知設備返回一個數據包
- SETUP: 只用在控制傳輸中,也是通知設備將要輸出一個數據包,與OUT令牌的區別是:只使用DATA0數據包,且只能發到device的控制端點
- SOF: 在每幀開始時以廣播的形式發送,針對USB全速設備,主機每1ms產生一個幀,USB主機會對當前幀號進行統計,每次幀開始時通過SOF包發送幀號。
OUT/IN/SETUP令牌包沒有幀號域和數據域。
SOF令牌包沒有地址域和數據域。
B.數據包
數據包沒有地址域和幀號域。根據transfer的類型不同,數據包最大長度有所不同。
C.握手包
握手包有四種可選:
- ACK: 傳輸正確完成
- NAK: 設備暫時沒有準備好接收數據,或沒有準備好發送數據
- STALL: 設備不能用于傳輸
- NYET/ERR: 僅用于高速傳輸,設備沒有準備好或出錯
握手包僅有PID域。
3 事務transaction
事務可以分成三類
- setup事務:主機用來向設備發送控制命令
- 數據輸入事務:主機用來從設備讀取數據
- 數據輸出事務:主機用來向設備發送數據
事務組成:Token packet + Data packet + 可選的Handshake packet
4 傳輸transfer
USB協議定義了四種傳輸類型:控制傳輸(Control transfer)、大容量數據傳輸(Bulk transfer)、同步傳輸(Isochronous transfer)和中斷傳輸(Interrupt transfer)。
傳輸類型 | 特點 | 應用場景 |
---|---|---|
控制傳輸 | 非周期性,突發 | 命令和狀態的傳輸 |
大容量傳輸 | 非周期性,突發 | 數據可以占用任意帶寬,容忍延遲 |
同步傳輸 | 周期性 | 持續性傳輸,傳輸與時效相關的信息,并且在數據中保存時間戳的信息 |
同步傳輸 | 周期性,低頻率 | 允許有延遲的通信 |
A.大容量傳輸 bulk transfer
圖中一個方框表示一個 Packet,灰色的包表示主機發出的包,白色的包表示Device 發出的包。批量傳輸是可靠的傳輸,需要握手包來表明傳輸的結果。若數據量比較大,將采用多次批量事務傳輸來完成全部數據的傳輸,傳輸過程中數據包的PID 按照 DATA0-DATA1-DATA0-…的方式翻轉,以保證發送端和接收端的同步。
一次批量傳輸( Transfer)由 1 次到多次批量事務傳輸( Transaction)組成。
B.中斷傳輸 interrupt transfer
中斷傳輸在流程上除不支持 PING 之外,其他的跟批量傳輸是一樣的。他們之間的區別也僅在于事務傳輸發生的端點不一樣、支持的最大包長度不一樣、優先級不一樣等這樣一些對用戶來說透明的東西。
這里所說的中斷,跟硬件上的中斷是不一樣的,它不是由設備主動發出一個中斷請求,而是由主機保證在不大于某個時間間隔內安排一次傳輸。
主機在排定中斷傳輸任務時,會根據對應中斷端點描述符中指定的查詢間隔發起中斷傳輸。中斷傳輸有較高的優先級,僅次于同步傳輸。
C.同步傳輸 Isochronous transfer
同步傳輸是不可靠的傳輸,所以它沒有握手包,也不支持 PID 翻轉。主機在排定事務傳輸時,同步傳輸有最高的優先級。
D.控制傳輸 Control transfer
一次控制傳輸分為三(或兩個)個階段:建立( Setup)、 數據( DATA)(可能沒有)以及狀態( Status)。 每個階段都由一次或多次事務傳輸組成。
-
建立過程 setup stage
使用一個建立事務,如下:
control transfer的setup stage流程圖 -
數據過程 data stage
數據過程是可選的。一個數據過程包含一筆或者多筆數據事務。數據過程的第一個數據包必須是DATA1包,然后每次正確傳輸一個數據包就在DATA0和DATA1之間交替。 -
狀態過程 status stage
狀態過程也是一筆批量事務。狀態過程只使用DATA1包。
設備枚舉過程中各種描述符的獲取以及設置地址和設置配置等,都是通過控制傳輸來實現的。
參考資料