USB-C(USB Type-C)規範的簡單介紹和分析

轉自:www.wowotech.net

1. 前言

  從1996年1月USB1.0正式發佈至今(2017年9月 USB3.2發佈),USB已經走過了21個年頭。在這21年的時間了,USB標準化組織(USB Implementers Forum,USB-IF)折騰出來了各式各樣、五花八門的接口形態:Type A、Type A SuperSpeed、Type B、Type B SuperSpeed、Mini-A、Mini-B、Micro-A、Micro-B、Micro-B SuperSpeed、Type C等等。
  另外,USB接口主要由插座(Receptacle)、插頭(Plug)和線纜(Cable)三部分組成,再疊加上這些奇奇怪怪的規範,災難就發生了:A產品喜歡用Type A的插座,B產品偏偏喜歡Type B,連接它們的線纜就悲劇了,只能變成A-to-B的了。以此類推,A-to-A、B-to-B、A-to-MicroA、等等,於是我們的抽屜就擠滿了各種不明用途的USB線……
好吧,吐槽時間結束,因爲本文的主角不是過去的那些奇奇怪怪的接口,而是最新的、紅到發紫的USB-C(也稱作USB Type C)規範。提起typec,它還真和它的A、B前輩們不太一樣:因爲它有自己獨立的、自行演化的規範文件—-USB Type-C Specification(2014年發8月布1.0版本,2017年7月發佈1.3版本)。而前輩們就沒有這樣的待遇了,它們都依附於具體的USB規範(USB 1.0、USB 1.1、USB 2.0、等等)。
  爲什麼會這樣的呢?當然是因爲它有獨特之處了,具體請參考本文後續的描述。

2. 概述

  我們接着上面的問題講。
  Type C之前的規範(Type A、Type B、等等),偏重於USB接口的“硬”的特性,如信號的個數、接口的形態、電氣特性、等等,這些特性一旦固定,就沒有更改的需求了,這就導致了:

1)這些接口規範不需要單獨存在(因爲沒有更新、演化的要求),“隨便”在USB規範的哪個章節交代一下就行了。
2)同時存在五花八門、種類繁多的接口(因爲不能更新、演化啊,一旦新需求出現,只能再搞一個新的了)。

  到USB Type C的時候,USB標準化組織的這些傢伙突然開竅了(管他主動開竅還是被動開竅,反正是開竅了),在定義USB接口“硬”的特性的基礎上,增加了一些“軟”的內容,一下子就海闊天空了。至此,USB接口(僅僅指Type C)擺脫了和USB的從屬關係,變成了一個可以和USB規範平起平坐的新規範。
  大家估計會很好奇,這傢伙到底Get了什麼新技能,從而成功上位了呢?讓我們簡單總結一下(注意其中黃色高亮部分):
  ▲ 定義一套新的接口形態(Receptacle/Plug/Cable)
  ▲ 插座(Receptacle)可以用在很薄的電子設備上,因爲它的高度只有3mm
  ▲ 插頭(Plug)更容易使用了,可以正着插、反着插、隨便插、想怎麼插怎麼插,終於不再反人類了(想想之前,插一個U盤到電腦中:哦,好像插不進去,反過來試試;嗯?還是插不進去,再反過來試試;噢!終於插進去了……流汗中……)
  ▲ 線纜(Cable)也更容易使用了,兩端一模一樣(當然,爲了兼容、轉接舊有規範的除外),也是想怎麼插就怎麼插
  ▲ 插頭(Plug)和線纜(Cable)的改進,並不是一個空手套白狼的買賣,是要付出代價的,因爲需要一個稱作“Configuration Process”的過程解決如下的兩個問題:
    □ 插頭可以隨便插,因而需要一套檢測插入方向的機制,並可以通過插入方向動態的map管腳信號以便進行後續的通信
    □ 線纜的兩端一模一樣,就無法區分所連接的兩個USB設備的角色(Host or Device、等等),因而需要一套協商機制,以便讓兩端的USB設備進行角色的溝通
  ▲ 以上的“Configuration Process”是使用兩個稱作CC(CC1和CC2)的管腳進行的,利用不同電壓,傳遞一些簡單的信息,以滿足上面的需求。
    □ 後來,一個稱作USB PD(Power Delivery)[3]的規範出現了,它在這兩個管腳上實現了一種簡單的、半雙工的通信協議,以完成USB power供給有關協商(有關USB PD,可參考相應的規範[3]以及本站後續的文章)。可以說,這個通信協議就是打開新世界的鑰匙。基於它,更多有意義的事情出現了(因此,USB Type C可以單獨存在了),例如
    □ 支持擴展功能。通過擴展功能,USB Type C接口擁有了無線的想象空間,可以搖身變成任意其它協議的物理接口,例如配件接口、音頻接口、視頻接口、debug接口等等,大有一統天下之勢。從這個角度看,USB Type C不僅僅是成功上位(從USB規範中獨立出來),而是成功逆襲(凌駕於USB規範之上),格局啊!!對USB Type C有個基本的瞭解之後,我們再簡單分析一下它的主要特性(主要從軟件的角度,純電氣方面的內容直接插規範就行了,這裏不再羅嗦)。
    

3. 主要特性

3.1 接口形態(Receptacle/Plug/Cable)
  爲了實現自己的理想和抱負,USB Type C定義了新的接口形態。另外,爲了兼容舊的接口以及一些特殊功能,它定義了不同形態的插座、插頭、線纜。主要包括:
  1)定義了2種Type-C的插座

  a)全功能的Type-C插座,可以用於支持USB2.0、USB3.1、等特性的平臺和設備。 
  b)USB 2.0 Type-C插座,只可以用在支持USB2.0的平臺和設備上。

  2)定義了3種Type-C插頭

  a)全功能的Type-C插頭,可以用於支持USB2.0、USB3.1、等特性的平臺和設備。 
  b)USB 2.0 Type-C插頭,只可以用在支持USB2.0的平臺和設備上。 
  c)USB Type-C Power-Only插頭,用在那些只需要供電設備上(如充電器)。

  3)定義了3種標準的Type-C線纜

   a)兩端都是全功能Type-C插頭的全功能Type-C線纜。 
  b)兩端都是USB 2.0 Type-C插頭的USB 2.0 Type-C線纜。 
  c)只有一端是Type-C插頭(全功能Type-C插頭或者USB 2.0 Type-C插頭)的線纜

  4)爲兼容舊設備而定義的線纜或者適配器
    a)一種線纜,一端是全功能的Type-C插頭,另一端是USB 3.1 Type-A插頭。
    b)一種線纜,一端是USB 2.0 Type-C插頭,另一端是USB 2.0 Type-A插頭。
    c)一種線纜,一端是全功能的Type-C插頭,另一端是USB 3.1 Type-B插頭。
    d)一種線纜,一端是USB 2.0 Type-C插頭,另一端是USB 2.0 Type-B插頭。
    e)一種線纜,一端是USB 2.0 Type-C插頭,另一端是USB 2.0 Mini-B插頭。
    f)一種線纜,一端是全功能的Type-C插頭,另一端是USB 3.1 Micro-B插頭。
    g)一種線纜,一端是USB 2.0 Type-C插頭,另一端是USB 2.0 Micro-B插頭。
    h)一種適配器,一端是全功能的Type-C插頭,另一端是USB 3.1 Type-A插座。
    i)一種適配器,一端是USB 2.0 Type-C插頭,另一端是USB 2.0 Micro-B插座。
  注1:再吐槽一下,看了上面的a-i,應該能感受到之前的USB接口規範是多麼的能折騰了吧?

3.2 管腳及信號的定義
  USB Type-C接口有24個管腳,插座和插頭在管腳信號的定義上有一點點的不同,分別如下:
  這裏寫圖片描述
以上信號按照功能可以分爲5類:
 1)Power有關的信號,包括

a)VBUS,USB線纜的bus power(和我們通常意義上VBUS保持一致)。 
b)VCONN(只有在插頭上纔會有該信號),用於向插頭供電(由此可以推測出有些插頭中可能會有電路)。 
c)GND,接地。

  2)USB 2.0數據線,D+/D-。它們在插頭端只有一對,和舊的USB 2.0規範一致。但爲了支持正反隨意插。在插座端定義了兩組,這樣插座端可以根據實際情況進行合適的mapping。
  3)USB3.1數據線,TX+/-和RX+/-,用於高速的數據傳輸。插頭和插座端都有兩組,用於支持正反隨意插。
  4)用於Configuration的信號,對插頭來說,只有一個CC,對插座來說,有兩個CC1和CC2。
  5)擴展功能所需的信號,具體使用場景由相應的擴展功能決定。
  注2:對於3.1中所描述的不同類型的插座和插頭,這24個管腳以及信號不一定全部使用,具體可參考USB Type-C的規範[2]。
  
  注3:大家可能注意到了,USB Type-C 24個管腳信號中,Power類(GND/VBUS)和數據類(D+/D-/TX/RX)是完全對稱的(對Power來說,無論怎麼插,都是一樣;對數據線來說,簡單的路由一下,就可以工作)。剩下的,包括CC、SBU和VCONN,用於方向、線類型等檢測,具體可參考後面的介紹。
  
3.3 USB port的Data Role

  在USB 2.0及以前的時代,根據功能的不同,USB端口分爲Host、Device、OTG(Host和Device二者皆可)、Hub等。在Type C時代,事情的本質還在,不過名字稍微有些調整,分別稱作:

 DFP(Downstream Facing Port),一般作爲Host或者Hub,在初始配置下通過VBUS或者VCONN向device供電。
 UFP(Upstream Facing Port),一般作爲Device或者Hub,連接到Host上,初始配置下通過VBUS或者VCONN由Host供電。
 DRD(Dual-Role-Data),類似於以前的OTG,既可以作爲DFP,也可以作爲UFP。設備剛連接時作爲哪一種角色,由端口的Power Role(參考後面的介紹)決定;後續也可以通過data role switch過程更改(如果支持USB PD協議的話)。

3.4 USB port的Power Role

  根據USB port的供電(或者受電)情況,USB type c將port劃分爲Source、Sink等power角色,具體如下:

Source,通過VBUS或者VCONN供電。
Sink,通過VBUS或者VCONN接受供電。
DRP(Dual-Role-Power),既可以作爲Source,也可以作爲Sink。到底作爲Source還是Sink,由設備連接後的Configuration Process(具體可參考後面的介紹)以及後續的power role switch過程決定。

3.5 連接檢測

  USB Type-C的連接檢測包括3部分的內容:
  (1)連接檢測;
  (2)連接方向檢測;
  (3)Power Role檢測。
  這三部分都是通過USB Type-C接口的CC(CC1和CC2)管腳進行的,原理總結如下(具體細節請參考[2]中的說明,本文不詳細羅列了):
  1)參考3.2小節的說明,USB Type-C的插座有兩個CC(CC1和CC2),而插頭(或者說USB cable),有兩種情況:

  ▲ 正常情況下,只有一個CC,兩個Type-C端口連接到一起之後,只會存在一個CC連接。通過檢測哪一個CC有連接,就可以判斷連接的方向。
  ▲ 如果是可供電的USB cable(Powered cable),一個用做CC,另一個用作Vconn,檢測方式參考後面的介紹。

  2)不同功能的USB port,需要在CC1和CC2管腳上接不同的上拉或者下拉電阻,規則如下:
  Source需要在CC1和CC2管腳接上拉電阻Rp(也可以使用電流源取代,本文就不介紹了),Rp的值可參考[2]中“Table 4-20 Source CC Termination (Rp) Requirements”的介紹。
  Sink需要在CC1和CC2管腳接下拉電阻Rd,Rd的值可參考[2]中“Table 4-21 Sink CC Termination (Rd) Requirements”的介紹。
  可以通過VCONN供電的USB電纜(Powered cable)爲了讓Source檢測到(以便通過VCONN爲它供電),需要在CC腳接下拉電阻Rd,並在Vconn串接一個電阻Ra(代表Vconn的負載)。
  其它配件的規則,不再介紹了(可參考[2]中有關的章節)。
  3)基於上面的規則,Source需要根據CC1和CC2的狀態(阻值)檢測Sink的連接及方向,規則如下:

如果CC1和CC2均爲Open狀態,表示沒有Sink連接。
如果CC1和CC2中的一個的阻值爲Rd(除去自己的Rp或者電流源的阻值)、另一個爲Open,表示有Sink連接,連接的方向由哪一個CC爲Rd決定。
如果CC1和CC2中的一個的阻值爲Ra(除去自己的Rp或者電流源的阻值)、另一個爲Open,表示有不帶Sink的Powered cable連接,連接的方向由哪一個CC爲Ra決定。
如果一個CC的阻值爲Ra,另一個爲Rd,則表示有帶SInk的Powered cable連接,連接方向由哪個CC爲Ra(Rd)決定。

  4)Source檢測到Sink的連接(及方向)後,會向Vbus和Vconn供電。之後:

Sink通過檢測Vbus來確定Source的連接。
Sink檢測到連接後,同樣根據CC管腳的狀態檢測連接方向。

  5)Source檢測到不帶Sink的Powered cable的連接後,不會向Vbus或者Vconn供電。
  6)Source檢測到帶Sink的Powered cable的連接(及方向)後,會向Vbus和Vconn供電,Sink的行爲後上面4)類似。
  
3.6 Power role檢測

  上面的過程,是基於某個port作爲Source,另一個port作爲Sink爲假設的。實際上,某一個Type-C port可能是DRP port,怎麼辦呢?簡單:
它可以在Source和Sink兩個狀態來回切換,在某一個狀態下的檢測邏輯,和上面3.5描述的完全一樣。
  當在Source狀態下,成功的檢測到Sink的連接時,則自己作爲Source;當在Sink狀態下成功檢測到Source的連接時,則自己作爲Sink。
另外,Type-C規範也提供了一個後悔藥,雖然我是DRP(Source或者Sink都可以支持),但我更傾向於作爲Source(或Sink)怎麼辦?好辦:
  當在動態檢測的過程中,自己變成了一個自己不喜歡的角色,還可以執行一個Try.SRC或者Try.SNK的過程,嘗試變成自己喜歡的角色。如果碰巧對方認可你作爲這個角色,OK,萬事大吉。
  注4:到目前爲止(在沒有USB PD協議參與的情況下),USB Type-C port的data role必須和power role保持一致(因爲Type-C規範沒有提供多餘的機制去單獨的協商data role)。
  
3.7 USB PD協議

  正確連接後,雙方通過CC管腳,使用USB PD(Power Delivery)協議,可以進行後續配置和操作,包括:

Data Role的切換(類似USB OTG的切換);
Power Role的切換;
Vconn role的切換(誰通過VconnPowered cable供電);
供電的調整;
等等(具體可參考[3]以及後續有關USB PD協議的介紹)。

4. 參考文檔

 [1] https://en.wikipedia.org/wiki/USB#2.0
 [2] USB Type-C Specification Release 1.3.pdf
 [3] USB_PD_R3_0 V1.1 20170112.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章