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個管腳,插座和插頭在管腳信號的定義上有一點點的不同,分別如下:
A1 | A2 | A3 | A4 | A5 | A6 | A7 | A8 | A9 | A10 | A11 | A12 |
GND | TX1+ | TX1- | VBUS | CC1 | D+ | D- | SBU1 | VBUS | RX2- | RX2+ | GND |
? |
GND | RX1+ | RX1- | VBUS | SBU2 | D- | D+ | CC2 | VBUS | TX2- | TX2+ | GND |
B12 | B11 | B10 | B9 | B8 | B7 | B6 | B5 | B4 | B3 | B2 | B1 |
表格1:USB Type-C Receptacle Interface (Front View)
A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 |
GND | RX2+ | RX2- | VBUS | SBU1 | D- | D+ | CC | VBUS | TX1- | TX1+ | GND |
? |
GND | TX2+ | TX2- | VBUS | VCONN | ? | ? | SBU2 | VBUS | RX1- | RX1+ | GND |
B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B10 | B11 | B12 |
表格2:USB Full-Featured Type-C Plug Interface (Front View)
以上信號按照功能可以分為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部分的內容:
連接檢測;
連接方向檢測;
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的切換(誰通過Vconn向Powered 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
評論
查看更多