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

版本 d0641dc6e5268b200c0348a447be89c66a638930

embedded/USB

Changes from d0641dc6e5268b200c0348a447be89c66a638930 to 61e071f5d3188e41337a79639a77ab389de9d33f

---
title: 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 封包回應資料是否正確的被收到。若執行處理動作中發生錯誤,此處理動作將重新執行。


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讓原本只能為週邊的裝置也能成為主機,例如讓手機接上鍵盤。

demo
^^^^

::

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


::

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

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

USB 定義了四種傳輸型態:

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

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

+---------------+--------------------+-----------+
| Transfer Type | Stages             | Phases    |
|               | (Transactions)     | (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      |
+---------------+--------------------+-----------+

參考資料
^^^^^^^

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

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

http://baike.baidu.com/view/66940.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>`_