USB PD はなぜ5Vから始めるのか

差した瞬間に20Vが出ていたら、5V専用の機器は一発で壊れます。USB PD はそれを避けるために、抵抗だけで決まる段階と、通信してから電圧を動かす段階に分かれています。

最終更新: 2026-09-10 USB PDType-C電源シーケンスプロトコル

いきなり20Vを出さない理由

USB Type-C のコネクタは、5V 0.5A しか受け取らない機器にも、20V 5A を受け取るノートPCにも同じ形で刺さります。ケーブルの向きも表裏どちらでも刺さります。

つまりソース側は、差された瞬間には 相手が何ボルトまで耐えるかを知りません。ここで20Vを出していると、5V専用の機器を挿した人は一発で壊すことになります。

そこで USB PD は順番を固定しています。まず 5V(vSafe5V、4.75〜5.5V)だけを出す。相手と話がついて、相手が明示的に要求したときだけ、その電圧へ動かす。電圧が上がるのは常に、シンクが自分から要求したあとです。

通信の前に、抵抗だけで決まること

最初の段階には通信がありません。CC1 / CC2 の2本にぶら下がった抵抗の分圧だけで、接続の有無・ケーブルの向き・5Vで流していい電流が決まります。

ソースは CC を Rp でプルアップし、シンクは Rd = 5.1kΩ でプルダウンします。ソースから見て「CCが引き下げられたほう」が、いま結線されている側です。これで向きが決まります。

シンクから見ると、CC の電圧がそのまま「5Vで何アンペアまで取っていいか」の広告になっています。

Rp と、シンクが読み取る CC 電圧、および5Vで許される電流
ソースの Rp(5Vプルアップ)等価な電流源シンクが見る CC 電圧許される電流
56kΩ80µA0.20〜0.66VUSB既定(0.5A / 0.9A)
22kΩ180µA0.66〜1.23V1.5A
10kΩ330µA1.23V 以上3.0A

ここが効いてくるのは、PDのICを載せなくても5V 3Aまでなら取れるという点です。5.1kΩを1本入れて CC の電圧を見るだけで済みます。逆に、5Vより上が欲しければ必ず通信が要ります。

もう1本の CC はケーブル側で使われます。eMarker 入りのケーブルは Ra(800Ω〜1.2kΩ) でその線を引き下げていて、ソースは Ra を見つけると、そこを VCONN として給電し、ケーブル内のチップと話します。5A を流すにはこの eMarker が必須です。

USB Type-C の CC まわりソース側はCC1を抵抗Rpで5Vにプルアップし、シンク側は5.1キロオームのRdでプルダウンする。その分圧で決まるCCの電圧が、5Vで許される電流の広告になる。もう一方のCCはケーブル内のeMarkerが約1キロオームのRaで引き下げており、ソースはそれを見つけるとVCONNとして給電する。右の表は、Rpが56キロオームなら0.20から0.66ボルトでUSB既定、22キロオームなら0.66から1.23ボルトで1.5アンペア、10キロオームなら1.23ボルト以上で3アンペア。 通信の前に、抵抗の分圧だけで決まること 接続の有無・ケーブルの向き・5Vで許される電流は、ここで決まる ソース(給電側) シンク(受電側) ケーブル 5V Rp CC1 Rd 5.1k この電圧が広告になる CC2 / VCONN Ra 1k Rp と広告される電流 56k(80µA) CC 0.20〜0.66V USB既定 0.5A / 0.9A 22k(180µA) CC 0.66〜1.23V 5V 1.5A 10k(330µA) CC 1.23V 以上 5V 3.0A ここまではPDのICが要らない。5Vより上を使うときだけ、CC上での通信に進む CC1 と CC2 は別のピン。ソースは Ra を見つけた側を VCONN に切り替えて、ケーブル内のチップに給電する(5A を流すには必須)
図1:CC1 は Rp と Rd の分圧、CC2 はケーブルの Ra と VCONN。ここまでは通信ではなく、直流の分圧だけで決まる。

交渉の順番

5Vが出た状態から先は、CC を使った通信になります。順番は決まっています。

  1. Source_Capabilities:ソースが「自分はこれが出せる」という一覧(5V/3A、9V/3A、20V/5A…)を送る
  2. Request:シンクが一覧の中から1つ選んで要求する
  3. Accept:ソースが受理する。この時点ではまだ電圧は動いていません
  4. PS_RDY:電圧が新しい値に落ち着いてから、ソースが「準備できた」と送る

各メッセージには受信側から GoodCRC が返ります。届いたことの確認だけを担当する短い返事で、中身の合意とは別です。

時間の制約もそれぞれ決まっています。相手の返事を待つ tSenderResponse は 24〜30ms(PD 2.0)/27〜33ms(PD 3.0)。Accept を送ってから電圧を動かしはじめるまでの tSrcTransition が 25〜35ms。電圧遷移そのものを終える tPSTransition が最大 550ms です。

大事なのは Accept と PS_RDY のあいだで、ここが電圧の動いている区間です。シンク側にも義務があって、この区間は「古い契約と新しい契約の、電流の小さいほう」まで負荷を落としておかなければなりません。20Vを要求した直後に全力で電流を引くと、ソースは電圧を持ち上げられません。

USB PD の交渉シーケンス横軸を時間、縦軸をVBUSの電圧としたグラフ。未接続の0ボルトから、接続検出で5ボルトに上がり、そのままの電圧でSource_Capabilities、Request、Acceptのメッセージがやり取りされる。Acceptのあとソースは25から35ミリ秒待ってから電圧を上げはじめ、最大550ミリ秒で20ボルトに達し、そこでPS_RDYを送る。 5Vから目的の電圧まで、何がどの順で起きるか 電圧が動くのは Accept のあと。合図は PS_RDY 0 5V 20V VBUS 接続検出 → 5V Source_Capabilities Request(20V) Accept PS_RDY tSrcTransition 25〜35ms 電圧遷移 tPSTransition 最大550ms 青:ソースが送るもの 緑:シンクが送るもの 時間軸は等間隔ではない。実時間の比で描くと、ほとんどが5Vの区間になってしまうため
図2:VBUS の電圧と、CC上のメッセージの順番。時間軸は等間隔ではない(実時間の比で描くと5Vの区間だけになる)。

上げるときと、下げるとき

同じ「550ms以内」でも、上げと下げは難しさが違います。

上げるときは、ソースが能動的に電流を出して VBUS とシンク側の入力コンデンサを充電します。時間はソースの設計で決まるので、素直です。

下げるときが厄介です。ソースは電流を出せても、吸い込めるとは限りません。20Vから5Vへ落ちる速さは、VBUS の総容量と、そのとき負荷が引いている電流で決まります。シンクが省電力に入って数mAしか引いていなければ、電圧はなかなか落ちません。

そのため、電圧を下げられるソースには放電回路(VBUS を能動的に引き下げるFET)がだいたい入っています。ここを省くと、軽負荷のときだけ tPSTransition に間に合わない、という再現性の悪い不具合になります。

検証するときは、負荷が軽い状態での降圧を必ず見てください。重い負荷では勝手に落ちるので問題が隠れます。

USB PD の電圧遷移と Hard Reset左は昇圧で、Acceptのあと25から35ミリ秒待ってから最大550ミリ秒で20ボルトへ上がる。右は降圧で、重い負荷なら速く落ちるが、軽い負荷では出力容量が放電されず落ちきらない様子を2本の曲線で比べている。下段はHard Resetで、VBUSがvSafe0Vまで650ミリ秒以内に落ち、660から1000ミリ秒待ってから5ボルトで再開する。 上げるときと下げるときで、難しさが違う 上げる(5V → 20V) 5V 20V 最大550msで到達 25〜35ms待つ 昇圧:ソースが能動的に充電するので、時間はソースの設計で決まる 下げる(20V → 5V) 5V 20V 重い負荷:早く落ちる 軽い負荷:落ちきらない 降圧:ソースは電流を吸えない。VBUSの容量を放電するのは負荷なので、軽負荷だと間に合わないことがある Hard Reset:5Vからやり直す 5V 20V Hard Reset vSafe0V まで 650ms以内 tSrcRecover 660〜1000ms vSafe5V から再開
図3:上げるときはソースが押し上げる。下げるときは負荷任せになるので、軽負荷だと落ちきらない。下段は Hard Reset。

交渉が壊れたときの Hard Reset

交渉が破綻したときは、途中から復旧するのではなく 最初からやり直します。それが Hard Reset です。

ソースは VBUS を vSafe0V(0.8V以下)まで落とします。ここまでが tSafe0V で 650ms 以内。そのあと tSrcRecover(660〜1000ms)待ってから、また vSafe5V を出します。5Vからの再スタートです。

電源が1秒近く完全に切れるので、シンク側はここで落ちます。「PD対応の機器をつなぐと、ときどき再起動する」という症状を追いかけると、たいていこの Hard Reset に行き当たります。

設計するときに引っかかるところ

  • シンクの入力コンデンサに突入する。5Vから20Vへ上がるとき、入力容量には ΔV ぶんの充電電流が流れます。100µF なら 15V の上昇で 1.5mC。550ms かけて上げるなら平均 2.7mA ですが、ソースのスルーレートが速いと瞬間はずっと大きくなります。
  • 5V用の回路が20Vを見ないようにする。要求した電圧が来てから後段を投入する順番にします。PDコントローラの PS_RDY 相当の出力で負荷スイッチを入れるのが素直です。
  • eMarker の無いケーブルは3Aまで。5A を通すにはケーブル側のチップが必要です。20V 5A(100W)を想定した設計で、手元のケーブルが3Aだったという取り違えはよくあります。
  • 電圧が固定とは限らない。PPS(Programmable Power Supply)を使うと 20mV 刻みで電圧を指定できます。充電器としては便利ですが、負荷側から見ると「電圧が動く電源」になるので、後段の設計が変わります。
  • 48V まで上がる版がある。PD 3.1 の EPR は 28V / 36V / 48V を追加していて、最大 240W です。SPR(20Vまで)とは入り口の手順から違うので、対応するなら別物として扱ってください。

よくある質問

PDのICを載せずに、Type-Cから電源を取れますか?
5Vなら取れます。CC1 と CC2 にそれぞれ 5.1kΩ を落として、CC の電圧を見れば 0.5A / 1.5A / 3.0A のどれが許されているかが分かります。5Vより上を使いたい場合は、CC上での通信が必要なのでコントローラが要ります。
Accept が返ってきたのに電圧が変わりません。
Accept は「その要求を受理した」という返事で、電圧が動くのはそのあとです。ソースは tSrcTransition(25〜35ms)待ってから動かしはじめ、最大 550ms かけて新しい電圧に落ち着き、そこで PS_RDY を送ります。電圧が来たことの合図は PS_RDY であって Accept ではありません。
降圧のときだけ、たまに落ちます。
軽負荷での降圧を疑ってください。ソースは電流を吸えないので、VBUS の容量が負荷を通してしか放電されず、tPSTransition(550ms)に間に合わないことがあります。ソース側に放電回路があるか、シンク側で降圧時にダミー負荷を入れているかを確認します。
100W を想定したのに 60W しか出ません。
ケーブルを疑ってください。5A を通すには eMarker 入りのケーブルが必要で、無い場合は 3A に制限されます。20V × 3A = 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) — 各タイミングの測定条件

← コラム一覧へ