USB PD はなぜ5Vから始めるのか
差した瞬間に20Vが出ていたら、5V専用の機器は一発で壊れます。USB PD は、抵抗だけで決まる段階と、通信してから電圧を動かす段階に分けて、それを避けています。
いきなり20Vを出さない理由
USB Type-C のコネクタは、5V 0.5A しか受け取らない機器にも、20V 5A のノートPCにも、表裏どちらの向きでも刺さります。そのためソースは、差された瞬間には相手が何ボルトまで耐えるか分かりません。
そこで USB PD は順番を固定しています。まず 5V(vSafe5V、4.75〜5.5V)だけを出し、相手と話がついて明示的に要求されたときだけ電圧を動かします。電圧が上がるのは常に、シンクが自分から要求したあとです。
通信の前に、抵抗だけで決まること
最初の段階に通信はありません。CC1 / CC2 の抵抗の分圧だけで、接続の有無、ケーブルの向き、5Vで流していい電流が決まります。
ソースは CC を Rp でプルアップし、シンクは Rd = 5.1kΩ でプルダウンします。CC が引き下げられたほうが結線されている側で、これで向きが決まり、CC の電圧がそのまま「5Vで何アンペアまで取っていいか」の広告になります。
| ソースの Rp(5Vプルアップ) | 等価な電流源 | シンクが見る CC 電圧 | 許される電流 |
|---|---|---|---|
| 56kΩ | 80µA | 0.20〜0.66V | USB既定(0.5A / 0.9A) |
| 22kΩ | 180µA | 0.66〜1.23V | 1.5A |
| 10kΩ | 330µA | 1.23V 以上 | 3.0A |
このため、PDのICを載せなくても5V 3Aまでなら取れます。
eMarker 入りのケーブルは Ra(800Ω〜1.2kΩ)でもう1本の CC を引き下げ、ソースはそこを VCONN として給電してチップと話します。5A には eMarker が必須です。
交渉の順番
5Vが出たあとは、CC 上のメッセージで進みます。
- Source_Capabilities:ソースが出せる電圧と電流の一覧(5V/3A、9V/3A、20V/5A…)を送る
- Request:シンクが一覧から1つ選んで要求する
- Accept:ソースが受理する。この時点では電圧はまだ動いていません
- PS_RDY:電圧が新しい値に落ち着いたあとで、ソースが「準備できた」と送る
時間の制約もあります。返事を待つ tSenderResponse は 24〜30ms(PD 2.0)/27〜33ms(PD 3.0)、Accept を送ってから電圧を動かしはじめるまでの tSrcTransition は 25〜35ms、電圧遷移を終えるまでの tPSTransition は最大 550ms です。
電圧が動くのは Accept と PS_RDY のあいだで、この区間シンクは「古い契約と新しい契約の、電流の小さいほう」まで負荷を落とさなければなりません。20Vを要求した直後に全力で電流を引くと、ソースは電圧を持ち上げられません。
上げるときと、下げるとき
上げるときはソースが VBUS と入力コンデンサを充電するので、時間はソースの設計で決まります。
下げるときが厄介です。ソースは電流を出せても吸い込めるとは限らず、20Vから5Vへ落ちる速さは VBUS の総容量と負荷が引いている電流で決まります。シンクが省電力に入って数mAしか引いていなければ、電圧はなかなか落ちません。
電圧を下げられるソースにはだいたい放電回路(VBUS を引き下げるFET)が入っていて、省くと軽負荷のときだけ tPSTransition に間に合わない、再現しにくい不具合になります。
検証では軽負荷での降圧を必ず見てください。重い負荷では勝手に落ちて問題が隠れます。
交渉が壊れたときの Hard Reset
交渉がうまくいかなくなったときは、途中から復旧せず最初からやり直します。これが Hard Reset です。
ソースは VBUS を vSafe0V(0.8V以下)まで 650ms 以内(tSafe0V)に落とし、tSrcRecover(660〜1000ms)待ってから vSafe5V で再スタートします。電源が1秒近く切れるので、「PD対応の機器をつなぐと、ときどき再起動する」症状はたいていこれです。
入力コンデンサへの突入電流
5Vから20Vへ上がるとき、シンクの入力容量には ΔV ぶんの充電電流が流れます。100µF で 15V 上がると電荷は 1.5mC で、550ms かけて上げるなら平均 2.7mA、ソースのスルーレートが速ければ瞬間の電流はずっと大きくなります。
設計で見落としやすい点
- 5V用の回路には20Vを見せません。PDコントローラの PS_RDY 相当の出力で負荷スイッチを入れ、要求した電圧が来てから後段を投入します。
- eMarker の無いケーブルは3Aまでです。20V 5A(100W)を想定した設計で、手元のケーブルが3Aだったという取り違えはよくあります。
- PPS(Programmable Power Supply)では 20mV 刻みで電圧を指定でき、負荷側から見ると電圧が動く電源になります。
- PD 3.1 の EPR は 28V / 36V / 48V を追加し(最大 240W)、SPR(20Vまで)とは入り口の手順から違います。
よくある質問
PDのICを載せずに、Type-Cから電源を取れますか?
Accept が返ってきたのに電圧が変わりません。
降圧のときだけ、たまに落ちます。
100W を想定したのに 60W しか出ません。
参考にした規格・資料
- USB Power Delivery Specification(USB-IF) — メッセージの定義と、tSenderResponse / tSrcTransition / tPSTransition / tSrcRecover などのタイミング
- USB Type-C Cable and Connector Specification(USB-IF) — Rp / Rd / Ra の値、CC の電圧しきい値、VCONN と eMarker
- USB Power Delivery Compliance Test Specification(USB-IF) — 各タイミングの測定条件