分享到plurk 分享到twitter 分享到facebook

版本 96377514af71070b31d3cf4e92a80e6a4ffd91ee

usb

.. image:: http://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/USB_Icon.svg/200px-USB_Icon.svg.png

標準USB介面 ^^^^^^^^^^

.. image:: http://upload.wikimedia.org/wikipedia/commons/thumb/6/67/USB.svg/200px-USB.svg.png

USB訊號使用分別標記為D+ 和D- 的雙絞線傳輸,它們各自使用半雙工的差動訊號並協同工作,以抵消長導線的電磁干擾。

ps. 差動訊號:一條為 high 則另一條為 low

USB 封包簡介 ^^^^^^^^^^^

封包是組成USB傳輸的最小單位。一個 Transaction 通常由三個封包組成,但依傳輸型態而定,一個 Transaction 可能包含一個、兩個、三個封包。

Token 封包

每個 Transaction 以 Token 封包做起始。Token 封包定義裝置、Endpoint數量,傳輸的方向。其中 SOF (Start Of Frame) Token 包含目前的 frame 數,而且會廣播 (broadcast) 給所有的 full-speed 裝置知道。SOF 也是唯一一個不指定目標的 Token。 Token Packet 長度固定為 4 個 Byte。

Data 封包

Data 封包包含處理此動作的資料。一個 Transaction 中,Data 封包最大的資料量為 1023 個 Bytes,高速模式時可達 1024 個 Bytes 以上,其中 Data0 及 Data1 是兩個基本的資料封包,這些資料封包都是接續在 Address 之後,且 Data0 及 Data1 採取交互出現方式以達到同步與除錯的效果。另外在 USB2.0 當中更增加了 Data2 及 MData 資料封包,用於執行高速的即時傳輸(Isochronous Transfers)。

Handshake 封包

除了即時型傳輸(Isochronous)之外,所有的傳輸都保證資料的傳遞正確。 Handshake 封包回應資料是否正確的被收到。若執行處理動作中發生錯誤,此處理動作將重新執行。

USB Device Class ^^^^^^^^^^^^^^^^ USB 依照裝置的不同,定義許多不同的 class code ,用來聯絡 host 端與 device 端該做出什麼適當的反應,以下為幾個常見分類:

HID Class

Human Interface Device class,HID 設備屬於人機交互操作的設備,用於操作電腦,如 USB 滑鼠,USB 鍵盤,USB 觸控版,USB 軌跡球等等設備。HID 設備不一定非要是這些人機交互設備,只要符合HID設備級定義規範要求的都可以認為是 HID 設備。

使用 HID 設備的一個好處就是,操作系統自帶了 HID 類的驅動程序,而用戶無需去開發很麻煩的驅動程序,只要直接使用 API 調用即可完成通信。所以很多簡單的 USB 設備,喜歡枚舉成 HID 設備,這樣就可以不用安裝驅動而直接使用。

CDC Class

Communications Device Class,CDC 類是 USB 通信設備類的簡稱。CDC 類是 USB 組織定義的一類專門給各種通信設備(電信通信設備和中速網絡通信設備)使用的 USB 子類。大部分的作業系統都帶有支持 CDC 類的設備驅動程序,可以自動識別 CDC 類的設備,這樣不僅免去了寫專用設備驅動的負擔,同時簡化了設備驅動的安裝。

Audio Class

USB 非常適合作為以 PC 為平台的音頻(包括語音和音樂等)傳輸協議,而基於 PC 的電話系統從一開始就是 USB 接口發展的重要考量和推動力。從另一方面來說,USB 接口擁有遠遠高於音頻需求的帶寬,可以傳輸極高品質(高採樣率,高編碼率,多聲道)的音頻數據。因此,例如電話,音樂回放,錄音等音頻功能都可以很容易在 USB 接口實現。

USB 音頻類包括了所有和 USB 接口兼容的音頻流和音頻控制功能,甚至包括使用模擬音源,利用 USB 接口作為控制接口的設備也被歸入 USB 音頻類設備。

MSC Class

Mass Storage device Class,大容量存儲裝置類別。一種電腦和行動裝置之間的傳輸協議,它允許一個通用串行總線(USB)裝置來訪問主機的計算裝置,使兩者之間進行文件傳輸。

MSC 支持目前大多數的主流操作系統,許多舊版本的操作系統經過版本升級或者係統補丁也能實現對 MSC 的支持。MSC 的通用性和操作簡單使他成為行動裝置上最常見的文件系統,USB MSC 並不需要任何特定的文件系統, 它提供了一個簡單的界面來讀寫接口用於訪問任何硬碟驅動。

USB host and device ^^^^^^^^^^^^^^^^^^^^^^ .. image:: /embedded/usb host:device .png

  1. SIE(SERIAL INTERFACE ENGINE)

Block Diagram ^^^^^^^^^^^^^^^

.. image:: /USB_block_diagram.png

  1. ID pin 用來辨識OTG(on-the-go)裝置是主機還是週邊
  2. marco-A插頭的ID pin接地 vs marco-B插頭的ID pin懸空,用來區別主機和週邊 (marco-A插主機,marco-B插週邊)
  3. DP/DM description – in reference manual 30.3.2
  4. AHB – Advanced High-performance Bus
  5. UTMI – USB 2.0 transceiver macrocell interface

USB OTG(on-the-go) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 原先USB裝置的角色都是固定的(主機或週邊)。 USB OTG讓原本只能為週邊的裝置也能成為主機,例如讓手機接上鍵盤。

傳輸型態 ^^^^^^^^

USB 定義了四種傳輸型態:

  • Control Transfers :用於控制傳輸命令及狀態操作。
  • Bulk Transfers :用於大量資料傳輸(如傳給印表機),沒有速度限制,若傳輸失敗就會重傳以確保資料無誤。
  • Interrupt Transfers :與一般常見的 interrupt 不同,需要 host 端先詢問才會執行 interrupt 。
  • Isochronous Transfers :用於與時間密切相關的資料,例如音訊或影片等,就算沒通過CRC的錯誤檢查也不會重傳。

每種型態有不同的工作流程(stage),每個 stage 會需要不同的封包類型(packet)來實現,如同下表:

Transfer Type Stages (Transactions) Phases (Packets)
Control Setup Token
Data
Handshake
==================== ===========
Data (IN or Out) Token
Data
Handshake
==================== ===========
Status (IN or Out) Token
Data
Handshake
=============== ==================== ===========
Bulk Data (IN or Out) Token
Data
Handshake
=============== ==================== ===========
Interrupt Data (IN or Out) Token
Data
Handshake
=============== ==================== ===========
Isochronous Data (IN or Out) Token
Data

demo 程式 ^^^^^^^^^

::

git clone git://gitcafe.com/KuoE0/DiscoveryF4-USB.git

::

tail -f /var/log/syslog sudo cat /sys/kernel/debug/usb/usbmon/0u

參考資料 ^^^^^^^

http://www.zeroplus.com.tw/E-paper/201112/images/201112-USB20ProtocolAnalyzer.pdf

http://www.baiheee.com/Documents/090522/090522165226.htm

http://csuftp.csu.edu.tw/~k0478/981/USB/USB_02_new.pdf

USB Audio Class <http://baike.baidu.com/view/7879812.htm>_

MSC <http://baike.baidu.com/view/66940.htm>_

http://chamberplus.myweb.hinet.net/usb.htm

USB Specification <http://www.usb.org/developers/docs>_

STM32F407xx Reference Manual<http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/DM00031020.pdf>_

USB On The Go <http://www.mem.com.tw/article_content.asp?sn=1101280010>_

USB in a NutShell <http://www.beyondlogic.org/usbnutshell/usb1.shtml>_