2015年4月16日 星期四

USB Power Delivery for USB Type C

這篇文章是來解釋USB PD在TypeC是如何來進行的。TypeC與Type A/B在流程
上不同的是,Type-C需要先建透過CC pin去建立兩端DFP與UFP。而TypeA/B
的角色從Connector的公母端,就已經確定的,而TypeAB則是用ID pin來判斷
誰是DFP或UFP。當DFP與UFP透過Type-C連接,會先進行下面四點,這個在
我的另一篇網誌有解釋過了。

1. Detect attach of USB ports, e.g. a DFP to a UFP
2. Resolve cable orientation and twist connections to establish USB data 
    bus routing
3. Establish DFP and UFP roles between two attached ports
4. Configure VBUS: USB Type-C Current modes

在上面四點完成後,便開始進行USB PD的連接與溝通,這時VBUS電壓是5V,
電流是依照Type-C current mode,再來便是進行Power Negotiation 
(PD spec 8.3.2.3)。
1.Power Source會周期性的持續送Source Capabilities messages,
2.當Source收到SINK送出的GoodCRC,表示兩端PD已連接。
3. 連接後,SINK會送出Request message,裡面包括
4.Source認可SINK的Request後,發Accept給UFP。
5.Source轉換到SINK Request的電壓後,發PS_RDY給SINK。。
6.Power Negotiation完成,SINK開始依照新的供電來運作。

PD Negotiation的第3個動作,如果Source的Capabilities不能滿走SINK在電壓
或電流的需求,SINK送出的Request message (Table 6-13)便會設置Capability
Mismatch bitSource端在接收到後,Source端可以送出Get Sink Capabilities
,來得到SINK再回Sink Capabilities。之後Source再去確認,是否它可以得到更
大的供電能力來提供SINK。






33 則留言:

Roman 提到...

HI Kevin,
有一个问题不解? 电源模式上有type C模式与PD模式。CC上advertise电压来表示主机的供电能力,而PD是两都沟通到最合适的状态。
对于DFP与UFP来说,假设是支持PD,如何来定,是用type C的current模式还是需要用到PD模式呢?
是否支持PD就一定要沟通到PD相对应的电压、电流来工作?而不能用type C current mode 来工作?

KevinZheng USB&DSP&Firmware 提到...

Hi Roman
當兩端Type-C裝置接在一起,會用先Type-C current mode工作,再來兩端才會試著去用PD模式溝通,如果兩端認可溝通的結果,就會切換到PD的電壓電流。但如果兩端溝通失敗,就會維持Type-C current mode.

J 提到...

Hi Kevin:
想請教一個狀況
Source 送出Source Capabilities後
Sink 回的GoodCRC沒有成功送給Source
但後續的Request傳送成功

那Source會如何處理這筆Request?

謝謝

KevinZheng USB&DSP&Firmware 提到...

Hi J
請參考PD 2.0 spec,6.3.1 GoodCRC Message.在這裡,Sink用GoodCRC來回應Source送出的封包Source Capabilities是正確的,如果Source一直沒收到GoodCRC,它會持續送Source Capabilities(參考6.4.1.1.1)。我想應該不會去處理Request,如果沒通過CRC,他們會停留在PD Connection的階段,不會到PD Contract (Request)的階段。

Mark 提到...

請問一下是有關CC pin的問題
1.偵測host與device是靠CC pin上的阻值,所以CC pin在這,是算一個HW detect的機制?不是傳資料的用?
2.若支援PD mode的話,也是靠CC pin,但是是使用CC pin內部的電路來傳輸Protocol訊號,所以這時CC pin是有在傳Protocol資料?
第1個比較像HW,第2種則比較像SW
請問,有可能同時CC pin要做這兩種事嗎?應該不可能嗎?

那有先後順序嗎?
例如此CC pin的 HW detect完,
若有支援PD mode,接下來CC PIN內的電路才會啟用,靠CC pin 傳Protocol訊號?

請問我這樣理解對嗎?

Ben 提到...

支援PD mode的話,不是最高可以達100w
那它的V是由Vbus提供嗎?
vbus不是5V,那它是會根據若有支援PD mode的話,進行溝通後,vbus改傳20V之類的嗎?

匿名 提到...

請問一下有關cc pin的問題
1.偵測host與device是靠CC pin上的阻值,所以CC pin在這,是算一個HW detect的機制?並沒有傳資料的?

2.若支援PD mode的話,也是靠CC pin,但是是使用CC pin內部的電路來傳輸Protocol訊號,所以這時CC pin是有在傳Protocol資料?

第1個比較像HW,第2種則比較像SW

請問,有可能同時CC pin要做這兩種事嗎?應該不可能嗎?

那有先後順序嗎?

例如此CC pin的 HW detect完,
若有需要PD mode,
接下來CC PIN內的電路才會啟用,靠CC pin 傳Protocol訊號?

請問我這樣理解對嗎?

KevinZheng USB&DSP&Firmware 提到...

Hi Mark
如您所說的,會先做完CC pin Rd/Rp的detect,兩端才會去做PD的Communication。

KevinZheng USB&DSP&Firmware 提到...

Hi Ben
20V是由VBUS傳送,但必需兩端都能做PD的溝通,Provider才會供VBUS 20V。

Jocole 提到...

您好:

看完了兩篇您所撰述的type-C文章,因為本身不是電機背景出身所以並非完全理解type-C的模式判斷的邏輯,因此想請教您一個簡單的問題:

apple今年推出的new macbook已經改成type-C,包含配件的充電器也是type-C。

第一個問題是單純以macbook連接充電器的角度而言,是不是總共需要8個腳位,[(單邊Vbus,cc1,cc2,GND)x2=8個]即可自動判斷是否為充電模式?是不是代表今天我只要拉出這8個腳位,其他剩餘的腳位都不會影響到充電功能?

KevinZheng USB&DSP&Firmware 提到...

Hi Jocole

是的,不過VBUS跟GND都各有4PIN,所以總共是10PIN。另外如果你要支援BC1.2
的標準,那就還需要D+,D-的腳位。

PETS DOREA 提到...

Hi Kevin,

請問Macbook在充電時USB Type C接口是UFP嗎?如果是,那Macbook如何在充電的同時去存取其他的USB 裝置(UFP)?(例如對Macbook充電的是USB type C docking with PD)

謝謝。

Alex

KevinZheng USB&DSP&Firmware 提到...

Hi Alex

在Type-C spec有定義power role (Source,Sink)與date role (DFP,UFP),
意思是,你可以當data role的host同時當power role中的sink。

當Macbook接到docking時,它是data的host,但同時他卻是power的Sink。
一開始macbook接到docking時,docking是Source,Macbook是Sink,再來
用DR_SWAP command,讓Macbook作為DFP,請參考Type-C spec 1.1.
4.8.3 Sinking DFP

JL 提到...

Hi Kevin,

請問當兩端TYPE-C連接上,有偵測到Rp/Rd,就會送5V@3A/1.5A,如有PD才做PD的溝通是嗎?

若PD溝通失敗,這時5v@3A/1.5A也還是持續送吧?

假設PD溝通成功,現在是20V,中間出現錯誤,是會中斷重新溝通還是會降電壓(20便12或5)?

謝謝

KevinZheng USB&DSP&Firmware 提到...

Hi JL

兩個裝置相接,會先做Type-C的偵測,連接成功後,VBUS出現5V。再來會試著去
做PD溝通,溝通成功後才會轉換電壓,如果PD溝通失敗,就會維持在原來的狀態。

JL 提到...

Hi Kevin,

如果溝通成功後,電壓變成12V,之後PD溝通斷掉,這時是直接轉成TYPE-C current mode嗎?

因為我對PD一直有疑惑,如果轉換電壓後,PD溝通失敗,那我還是12V,不就可能燒掉後端device

謝謝

KevinZheng USB&DSP&Firmware 提到...

Hi JL
你指的PD溝通斷掉,是指cable重新插拔嗎?或者是什麼樣的狀態?
如果重新插拔就會回到Type-C current mode。

如果一開始溝通成功,升到12V,就代表這個device可以耐得住
12V,後來就算通訊有問題,也不會導致device被燒掉吧。

Jack 提到...

Hi Kevin,
請教一下,假若我的Type-C裝置需要12V的電壓, 若連接到macbook或是chromebook的type-c, 是否就可以提供12V給周邊裝置呢?謝謝.

KevinZheng USB&DSP&Firmware 提到...

Hi Jack
Macbook跟Chromebook有支援PD 20V,可以由Type-C port
供20V給他們,但這不代表他們可以供20V或12V出去。我有
測過Mac Air,它只能提供5V出去。

Unknown 提到...

Hi Kevin,
請問一下若Macbook 接了 Type-C Hub(外接電源),後頭可以接pendrive,且透過Hub對Macbook充電嗎?
謝謝...

Clement

KevinZheng USB&DSP&Firmware 提到...

Hi Clement

Type-C有分Power role與Data role,可以讓Macbook作為Data role的host,
同時也作為Power role的Sink,讓Hub可以供電給Macbook。這樣才能同時傳
資料又進行供電。

Unknown 提到...

Hi Kevin大,
想請問您是否有遇過市面上是否有Host type C port,
在device(UFP)插入後會辨認到host(DFP)有3A以及SDP的資訊存在
因目前坊間就我所知在CC logic IC以及D+ D-的phy是分開做的
有可能造成插入後同時認到兩種資訊,使device不知該取捨何種電流值

甚至就我所知目前市場有C to A Cable所埋入的pull-up resistance並非56k,而是不符合規範的10k
在device端插入傳統USB 2.0 port會有拉3A的情形發生,造成Host端shutdown

KevinZheng USB&DSP&Firmware 提到...

Hi 阿川
如你所說,Type-C的電流是由CC來偵測,SDP是由D+/D-來偵測。
這可以由一顆MCU分別來讀取這兩個偵測的結果,再由MCU來判
斷。理論上應該是CC的偵測優先,如果是D+/D-優先,電流就沒
辦法到3A。

傳統的Type-A HOST Port是沒辦法輸出3A的,所以A to C的
cable應該是放56K,輸出900/500mA。如果放10K,就表示它跟
DEVICE宣告,他可以輸出3A,這種Cable是很危險的。

匿名 提到...

HI Kevin,
請問一下幾個問題,謝謝
1.若我使用的是current模式(設計提供3A電路)的話其溝通要用CC LOGIC去detcet其rp與rd的電阻值是嗎?
2.另外在溝通的時候是否會在cc上傳送bmc去溝通呢?
3.若我的cable不是使用emark cable而是直接在device端pull down 5.1k
這樣是否還是會提供3A的電流呢?這樣不會有危險嗎?還是會有其它的機制會去避這個問題

KevinZheng USB&DSP&Firmware 提到...

Hi
1.若我使用的是current模式(設計提供3A電路)的話其溝通要用CC LOGIC去detcet其rp與rd的電阻值是嗎?
決定Type-C current模式,是看Rp的阻值。
2.另外在溝通的時候是否會在cc上傳送bmc去溝通呢?
同上,current模式不需要BMC。PD的溝通才需靠BMC。
3.若我的cable不是使用emark cable而是直接在device端pull down 5.1k
如果是CtoC的3A的Cable,是不需要Emark。在device端pulldown 5.1k,
只是讓Host端輸出,能提供多大的電流要看Host端的能力。

John Kuo 提到...

Hi,

我思目前再開發相關產應用請問
PD source capabilites
PD sink capabilites, 式說明什麼樣的行為呢?

KevinZheng USB&DSP&Firmware 提到...

Hi John
當PD Source裝置接上PD Sink裝置,Source裝置需要先送出Source capability來表示
自已的供電能力(例如20V/3A,12V/3A,5V/3A),再來Sink裝置會發出RDO (從Source
capabilities中選一個)給Source裝置,Source就會依RDO的要求來輸出電壓/電流。
另外Source裝置也可以送出Get_Sink_Cap命令給Sink裝置,Sink裝置會回覆Sink
capabilities給Source,Source就可以得知Sink端需要的電壓/電流。

匿名 提到...

HI
1.如果是PD部分,當連結時,是如何決定誰當UFP.DFP?
2.UFP.DFP、 Source.Sink、Device.Host,這三組其實是一樣嗎?
UFP=Source=Device
DFP=Sink=Host

3.PD要供多少電壓、電流,它的機制是如何決定?

KevinZheng USB&DSP&Firmware 提到...

HELLO
1.當兩端連接上,一開始是由CC來建立Type-C連接。
CC為pullup的那端,會先當DFP,pulldown的那端
當UFP。但兩端還是可以跟據他們的需求,來發送
data role swap,交換兩邊的角色。
2.DFP=HOST,UFP=DEVICE,這是用來定義USB data的
角色。而Source與Sink是用來定義Power的角色。通
常一開始DFP會做為Source,但可以經由Data Role
swap或Power role swap,來改變自已的角色。

jungobears 提到...

Hi Kevin,

有兩個問題請教。
(1) 假設系統是由 DFP + E-mark Cable + UFP 所組成,請問在進行 PD Communication 時的順序是如何的呢?例如是由 DFP 和 E-mark Cable 先溝通、 E-mark Cable 和 UFP 接著溝通,最後才是 DFP 和 UFP 溝通嗎?還是跳過 E-mark Cable 直接由 DFP 和 UFP 來溝通?
(2) 在哪個階段 (Type-C Current Mode or PD Communication) DFP 可以判讀出 E-mark Cable 是帶 3A 還是 5A?
不好意思問題有點外行,麻煩了,謝謝。

KevinZheng USB&DSP&Firmware 提到...

Hello Jungobears

1.Source(DFP)會先跟E-mark cable溝通,再跟Sink(UPF)。例如Source
要先送出Source capability給Sink,如果source current capability
是超過3A,它就需要先跟cable溝通,得知cable的電流能力是否能超過3A,
才能送出更準確的source capability。
2.DFP在一接上Cable後,如果偵測到Cable內有Ra電阻,DFP就可以透過SOP'
封包給E-marked,來確認Cable的電流能力。

匿名 提到...

Dear Kevin,

您好,請教個問題:
Vbus由Source送至Sink時,Sink要看到Vbus的電壓值為多少才算偵測到? 是否有Threshold值呢?


by Brian

KevinZheng USB&DSP&Firmware 提到...

Hi Brian

USB PD的spec有定義,Sink在偵測到Source的attachment由Vsafe5V,
而Vsafe5V的範圍在4.75~5.5V。