USB Communication
※Endpoints
1. 傳輸型態(data flow types)
USB 定義了四種傳輸型態:
◎ Control Transfers(控制傳輸) :
用於控制傳輸命令及狀態操作。像是設定裝置、取得裝置資 訊、發送指令到裝置等。每個USB裝置都有一個Endpoint 0,USB Core就是使用他在裝置插入後進行設定。
◎ Interrupt Transfers(中斷傳輸) :
與一般常見的中斷不同,需要 host 端先詢問(Polling)才會執行。用一個固定速傳輸少量資料,像是USB鍵盤和滑鼠就是屬於這種方式。
◎ Bulk Transfers(批次傳輸):
用於大量資料傳輸且需要確保資料無誤(如傳給印表機或隨身碟),沒有速度限制,若傳輸失敗就會重傳以確保正確。
◎ Isochronous Transfers(同時傳輸) :
同樣用於大量資料傳輸,但不確保資料是否到達。例如USB視訊裝置,使用者會期望傳輸聲音或影像的速率是穩定的,若有幾張frame遺失,沒有通過CRC(Cyclic Redundancy Checks)資料也不會重傳。
2. 資料封包
Transaction指USB資料的傳輸,大部分的傳輸包含了三種封包,封包是組成USB傳輸的最小單位。
一個 Transaction 通常由三個封包組成,但依傳輸型態而定,一個 Transaction 可能包含一個、兩個、三個封包。
3. 資料傳輸
Transaction指USB資料的傳輸,大部分的傳輸包含了三種封包
(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
◎ 每個Transaction以Token封包做起始。
◎ Token封包定義裝置、Endpoint數量,傳輸的方向。
◎ 用PID來識別OUT、IN、SOF與SETUP處理。
◎ 對於OUT和SETUP處理,位址與端點欄位用來選擇接收資料的端點。
◎ 對於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以上。
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