2017年6月20日 星期二

USB Data Flow and Protocol


USB Communication


Endpoints


1. 傳輸型態(data flow types)

USB 定義了四種傳輸型態:

◎ Control Transfers控制傳輸)  
用於控制傳輸命令及狀態操作。像是設定裝置、取得裝置資   訊、發送指令到裝置等。每個USB裝置都有一個Endpoint 0USB Core就是使用他在裝置插入後進行設定。

◎ Interrupt Transfers中斷傳輸)  
與一般常見的中斷不同,需要 host 端先詢問(Polling)才會執行。用一個固定速傳輸少量資料,像是USB鍵盤和滑鼠就是屬於這種方式。

◎ Bulk Transfers批次傳輸):
用於大量資料傳輸且需要確保資料無誤(如傳給印表機或隨身碟),沒有速度限制,若傳輸失敗就會重傳以確保正確。

◎ Isochronous Transfers同時傳輸)  
同樣用於大量資料傳輸,但不確保資料是否到達。例如USB視訊裝置,使用者會期望傳輸聲音或影像的速率是穩定的,若有幾張frame遺失,沒有通過CRC(Cyclic Redundancy Checks)資料也不會重傳。

2. 資料封包


TransactionUSB資料的傳輸,大部分的傳輸包含了三種封包,封包是組成USB傳輸的最小單位。


一個 Transaction 通常由三個封包組成,但依傳輸型態而定,一個 Transaction 可能包含一個、兩個、三個封包。





3. 資料傳輸

TransactionUSB資料的傳輸,大部分的傳輸包含了三種封包 Token packet, Data packet, Handshake 或稱 Status packet )。
Transaction可能是從Host傳向Device(H->D),或是從Device傳向Host(D->H)

◎傳送方向是由Token packet中指定。

◎一般來說,目標端利用Handshake (Status packet) 來判斷本次傳輸是否成功。

  (1) Token Packet Format

   每個TransactionToken封包做起始。

   Token封包定義裝置、Endpoint數量,傳輸的方向。

   PID來識別OUTINSOFSETUP處理。

   對於OUTSETUP處理,位址與端點欄位用來選擇接收資料的端點。

   對於IN處理,位址與端點欄位用來選擇傳送資料的端點。

                                                     1. IN
                                                     2. OUT
                                                     3. SOF
                                                     4. SETUP

(2) Data Packet Format
  
low-speed裝置中,Data封包最大的資料量為8 bytes;在full-speed裝置中,Data封包最大的資料量為1023 bytes;在high-speed裝置中,Data封包最大的資料量為1024 bytes以上。
  
 Data0 Data1 是兩個基本的資料封包,使用這些資料封包以提供一個機制來確定將傳送端和接收端之間的資料切換同步(data toggle synchronization)。另外在 USB2.0 當中更增加了 Data2 MData 資料封包,用於執行高速的即時傳輸(Isochronous Transfers)
                                                  1. Data0
                                                  2. Data1
(3)HandShake Packet Format

  ACK表示資料封包沒有bit stuff或是CRC錯誤,也就是PID欄位以及Data欄位沒有出現錯誤。
  NAK表示裝置無法從主機接收資料或是無資料可以傳輸到主機。NAK也被當作流量控制的用途來使用, 表示裝置暫時無資料傳送或無法接收資料。
  STALL表示裝置無法傳送或接收資料,需要主機介入來清除延遲狀況。
  NYET表示只有在USB2.0高速設備輸出事物中使用,它表示設備本次數據成功接收,但是沒有足夠的空間來接收下一次數據。主機在下一次輸出數據時,將先使用PING命令牌包來探測設備是否有足夠的空間接收數據,一面不必要的帶寬浪費。



                                                                               1. ACK
                                                                               2. NAK
                                                                               3. STALL
                                                                               4. NYET(usb2.0)



Reference: http://wiki.csie.ncku.edu.tw/embedded/USB#usb-%E8%B3%87%E6%96%99%E9%80%A3%E7%B5%90
https://www.keil.com/pack/doc/mw/USB/html/index.html

沒有留言:

張貼留言