240 W と表示される USB-C ケーブルでも、ファイル転送速度は USB 2.0 の速度に留まる可能性があります。ノートパソコンがドックから充電できたとしても、そのポートがディスプレイ出力をサポートしているとは限りません。コネクタ、データ伝送、ビデオ、給電は相互に関連しつつも、個別に宣言される能力です。本稿ではこれらの概念を分解し、デバイスの列挙と電力の交渉プロセスを通じて「接続後に何が起こるか」を解説します。
データ 480M / 5G / 10G / 20G / 40G / 80G 給電 方向、交渉電圧、電流、ケーブル定格 ビデオ DP Alt Mode または USB4 ビデオトンネリング 役割 データ Host/Device と電力 Source/Sink 同じ USB-C 外形でも、4つの能力はそれぞれ確認が必要 ポート、ケーブル、ドック、デバイスがチェーンを形成します。いずれの段階でも目的のモードが欠けていると、利用可能 な能力が低下する可能性があります。
確認したい能力 参照箇所 同時に確認すべき事項
ファイル転送速度 データモードと有効スループット ホスト、ケーブル、Hub、デバイス、共有アップリンク
システムが認識しない理由 列挙とエンドポイント データケーブル、電力の安定性、記述子、構成、ドライバ
USB-C 両面挿入の仕組み ピングループと CC 方向検出、配線、高速リマルチプレクス
目標電力での充電可否 PD 契約 Source、Sink、ケーブル、電力パス、温度
モニター接続可否 DP Alt Mode と USB4 レーン数、速度、カラーディプス、圧縮、デバイス対応
コネクタ名はデータモードに代えられない
Type-A、Type-B、Micro-B、Type-C はコネクタのタイプであり、速度ではありません。従来の USB 2.0 Type-A には VBUS、D−、D+、GND の 4 つの接点があります。SuperSpeed Type-A では 5 つの接点が追加され、そのうち 4 つが高速差動信号の 2 ペアを構成し、もう 1 つは基準用接点です。追加されるのは 5 つの接点であり、決して 5 ペアの差動線ではありません。
USB-C コネクタの完全な定義には 24 個の接点がありますが、USB 2.0 のみの製品では高速データチャネルを接続しない場合があります。一部の簡素化コネクタでは全接点が提供されないこともあります。コネクタの外形が同じだからといって、完全なデータまたはビデオ機能が実装されていると推測してはいけません。
一般的なデータ能力 対応モード例 理解の境界
1.5 / 12 / 480 Mbit/s USB ロースピード / フルスピード / ハイスピード USB 2.0 デバイスは 480 Mbit/s をサポートする必要はない
5 Gbit/s USB 3.0、USB 3.1 Gen 1、USB 3.2 Gen 1×1 異なる仕様における同等速度の名称
10 Gbit/s USB 3.1 Gen 2、USB 3.2 Gen 2×1 USB 3.2 にはもう一つのデュアルチャネル組み合わせがあり、Gen 番号だけを見るのではない
20 Gbit/s USB 3.2 Gen 2×2 または USB4 20Gbps 同じ表示速度が同じリンクモードを意味するわけではない
40 / 80 Gbit/s 対応する USB4 能力 ポートとケーブルが対応モードをサポートする必要がある
USB-IF のユーザー向け命名では、USB 5/10/20/40/80Gbps で性能を表します。USB4 Version 2.0 は 80 Gbit/s レベルまで拡張されたため、USB4 を一律に最大 40 Gbit/s と書くのは不十分になりました。バージョン名称が、各製品がすべてのオプション機能を実装していることを意味するわけではありません。USB-IF:データ性能の命名 、USB4 概要
これらはリンク速度であり、ファイル速度として直接扱うことはできません。5 Gbit/s、8b/10b エンコーディングを例にとると、エンコーディング後には 5×8/10=4 Gbit/s、つまり 500 MB/s しか残りません。ヘッダー、フロー制御、再送、USB ストレージプロトコル、コントローラ、メディアがさらに予算を消費します。これが実測ディスクが必ず達成できるスループットであるかのように扱ったり、双方向の速度を単純に足して単方向速度として宣伝したりしないでください。
USB4 ポートが USB 3.2 Gen 2×2 デバイスに接続されている場合でも、Gen 2×2 を共通でサポートしているかどうかを確認する必要があります。「ホストの数字の方が大きい」からといって、すべての低い数字のリンク組み合わせが動作するとは限りません。Hub の複数のダウンストリームポートもアップストリーム帯域幅を共有しており、インターフェースが増えるたびにホストチャネルが自然に増えるわけではありません。
USB 2.0 と SuperSpeed の配線は同じではない
USB 2.0 は D+/D− を使用して半二重伝送を行います。ロースピードとフルスピードのプルアップ位置は接続/速度の識別に使用されます。ハイスピードデバイスはリセット段階でのハンドシェイクによってハイスピードモードに入り、D+ のプルアップだけを見てフルスピードとハイスピードを区別することはできません。ハイスピード信号の電気的条件は低/フルスピードとは異なり、「USB 2.0 差動 3.3 V」と一律に書くことはできません。
SuperSpeed は独立した送信と受信の差動チャネルを使用し、リンクトレーニング、電源状態、フロー制御があります。USB-C の高速ペアは挿入方向と使用モードに応じてリマルチプレクスされます。USB4 はさらに、ルーティングとトンネリングによってサポートされるプロトコルストリームを整理します。USB 2.0 D+/D− を直接加速するものではなく、すべての USB 世代の接続検出を D+ プルアップとして描くこともできません。
従来の USB バスはホスト/ルート Hub をルートとする階層ツリーを形成し、Hub がダウンストリーム接続を拡張します。ホストが伝送スケジューリングを制御し、デバイスはエンドポイントによって機能を提供します。これは、デバイスが常にリンク通知やウェイクアップ要求を送信できないことを意味するのではなく、通常の機能データが任意のピアツーピアネットワークのようにバスを勝手に占有できないということです。
列挙:電力供給からドライバ利用可能までには複数の状態がある
通常の USB 2.0 周辺機器を例に説明します。デバイス接続後、ホストはポートリセットを行い、デフォルトアドレス 0 のコントロールエンドポイントを使用して初期情報を読み取り、アドレスを割り当て、完全な記述子を取得して構成を選択します。システムによって読み取り順序に差異がありますが、デフォルトコントロールエンドポイント、アドレス、構成は異なる段階です。
接続とリセット 接続を検出;ハイスピード能力はリセットハンドシェイク段階で交渉 デフォルトアドレス 0 必要な初期記述情報の読み取り;エンドポイント 0 はすでにコントロール伝送に使用可能 デバイスアドレスの割り当て SET_ADDRESS 完了後、新しいアドレスで通信を継続 完全な記述子の読み取り 構成の選択とドライババインディング USB 2.0 デバイスのデータパス確立:エンドポイント 0 がまずコントロール要求を 担当 デバイス、構成、インターフェース、エンドポイント、および必要なクラス記述子 SET_CONFIGURATION;クラス/ベンダードライバが対応するインターフェースを準備 これは教育的なメインラインです。ホスト実装は読み取りや要求順序の調整を繰り返すことができ、「アドレスが割り当て られた」ことをビジネス利用可能と同一視してはいけません。
オブジェクト 何を記述するか 一般的な誤解
Device VID/PID、バージョン、構成数など VID/PID は唯一のドライバマッチングルールではない
Configuration インターフェースの集合と対応する属性 記述子を読み取ったからといって、その構成が選択されたわけではない
Interface / Alternate setting 1 つの機能とそのエンドポイントの組み合わせ 1 つの物理デバイスに複数のインターフェースとドライバが存在する可能性がある
Endpoint 方向、伝送タイプ、パケット長など エンドポイントはコネクタ上の独立した配線ではない
IN/OUT は常にホストの視点から命名されます。IN はデバイスからホストへ、OUT はホストからデバイスへです。エンドポイント 0 はデフォルトのコントロール伝送を担当し、他のエンドポイントは構成とインターフェース記述子によって宣言されます。複合デバイスにはキーボードインターフェースとベンダーデータインターフェースを同時に含め、それぞれにドライバをバインドできます。「1 つのデバイスドライバをロードする」ことをすべてのデバイスの固定モデルと見なすべきではありません。Microsoft:USB エンドポイントとパイプ
4 種類の伝送タイプが約束する「信頼性」は同じではない
タイプ 主な用途とスケジューリング特徴 保証されないこと
Control 列挙、構成、コントロール要求、エラー処理あり リクエスト内容がビジネスによって必ず受け入れられるわけではない
Bulk 利用可能な帯域幅を最大限に活用、データ完全性が優先されるシナリオに適す 固定スループットまたは最悪のレイテンシ
Interrupt 周期的なサービス機会、少量の即時データに適す デバイスがハード割り込みでホストバスを直接占有する
Isochronous リアルタイムストリームのためにサービス機会を予約、見逃したデータは通常のトランザクションで再送して取り戻さない 各データユニットが必ず到達する
エンドポイントのスケジューリング制約とアプリケーションがデータを受信する時間の間には、コントローラ、ドライバ、バッファ、システムスケジューリングが存在します。オーディオ/ビデオは時間的な連続性を維持するために少量の損失を受け入れます。ファイル転送は通常、完全性を優先します。USB 伝送が成功したからといって、アプリケーションがデータを永続化したことを意味するわけではなく、デバイス内部のキャッシュとコマンド完了のセマンティクスは別途確認する必要があります。Linux:USB ホスト API と伝送モデル
一般的なクラスには、HID、Mass Storage、CDC ACM/NCM、Audio、Video、DFU があります。「ドライバ不要」は通常、オペレーティングシステムに互換性のあるクラスドライバがすでに存在することを意味します。バージョン、記述子、デバイスサブクラス、ベンダー拡張はサポートに影響を与えます。CDC は一連の通信クラス定義であり、CDC すべてを「ドライバが必要」と表示し、その中の ACM を「ドライバ不要」と表示するのは正しくありません。実際には常にドライバが存在し、ユーザーが追加でインストールする必要があるかどうかの違いだけです。
Type-C ピンは機能別にグループ化され、誤ったミラー文字図よりも参照しやすい
ピングループ 役割 実装上の注意点
VBUS / GND 給電とリターン 複数接点での分流、電流能力、電力パス制御
D+ / D− USB 2.0 データ コネクタの両面の対応する同名接点はリファレンスデザインに従って接続
4 ペアの高速信号 USB 3.x、USB4 またはモードリマルチプレクス 方向検出、差動インピーダンス、適切な MUX/retimer
CC1 / CC2 接続、方向、電流通知、PD 関連通信 2 つの CC を直接ショートしてはいけない
SBU1 / SBU2 モード関連サイドバンド信号 例えば DP Alt Mode の AUX、一般的な USB データの第 2 グループではない
ここでは信号機能に基づいて説明し、表面/裏面を混乱させる可能性のあるパッド座標は提供しません。PCB を描画する場合は、選択したコネクタのデータシート、観察方向、パッケージピン番号に従って確認する必要があります。
CC は接続と電力役割を検出し、役割はさらに交渉できる
一般的な Source は Rp を提供し、Sink は Rd を提供します。挿入後、有効な CC パスによって接続と方向が検出されます。単純な固定 Sink コネクタは、CC1 と CC2 にそれぞれ独立した Rd を設定し、一般的な定格は 5.1 kΩ です。2 つのピンで 1 つの抵抗を共有してショートすることはできず、片側のみを取り付けると特定の方向で異常が発生する可能性があります。完全な役割、電流検出、または PD が必要な場合は、適切なコントローラと電力パス設計を使用する必要があります。TI:Type-C エンジニアリングガイド
Type-C の電流通知には、USB Default、1.5 A、3 A などの 5 V 能力が含まれます。USB Default は対応する USB/充電ルールと組み合わせて判断する必要があり、「挿入すればすぐに 500 mA を取得できる」と一律に考えることはできません。また、2 つの Rd が見えるからといって、すぐに 3 A を取得できるとデフォルトで考えることもできません。Sink は実際の通知とプロトコル制限に従って電力を取得する必要があります。
データ役割 Host/Device と電力役割 Source/Sink は分離して考えるべきです。例えば、ノートパソコンはドックを管理するデータホストとして、同時にドックから充電する Sink として動作できます。PD をサポートするデバイスは能力に応じて役割を交換できます。現在の CC 通信に使用されていない対応する接点は、VCONN を担う可能性があり、ケーブルの電子デバイスに電力を供給します。VCONN と大電力の VBUS は同じ給電パスではありません。
PD:契約を先に結び、契約に従って給電する
通常の Type-C 接続では、まず安全な接続検出とデフォルトの給電プロセスを完了する必要があり、挿入直後に任意の高電圧を印加することはできません。PD は CC 上のメッセージ交換によって新しい給電条件を要求します。Source は能力を提供し、Sink は自身、ケーブル、システムの制限に基づいて Request を提出します。固定 PDO の例示フローは以下の通りです。
Source Sink Source_Capabilities:例えば 5 V / 3 A、9 V / 3 A を提供 Request:9 V / 2 A を要求 Accept:その要求を承諾 PS_RDY:切り替え完了、電源準備完了 固定 PDO 交渉:Accept は要求の受諾、PS_RDY だけが電源準備完了を報告 電力切り替えウィンドウ:Accept を新しい電圧がすでに安定していると見なしてはいけない GoodCRC などのプロトコル詳細は省略;この例は固定電力契約であり、PPS ではなく、EPR にも自動的には移行しない。
Source が Accept を送信するのは、要求を受諾したことを意味するだけで、電源は切り替えと安定化が必要であり、PS_RDY によって準備完了を報告します。PPS はプログラム可能な電源機能であり、Accept の後の共通状態ではありません。Request は拒否される可能性があり、給電能力はマルチポートの共有や温度変化によって再交渉される可能性があり、デバイスは交渉の失敗と契約の変更を処理する必要があります。
機能 解決する問題 避けるべき推論
SPR 固定電圧 一般的な 5/9/15/20 V などの契約、範囲は 100 W に達する 各充電器がすべての電圧と 5 A を提供するわけではない
EPR 電圧範囲を拡張し、28/36/48 V を含み、最大 240 W 通常の古い 5 A ケーブルが自動的に 48 V をサポートするわけではない
PPS 宣言された範囲内でプログラム可能電圧/電流を要求 デバイス内部に充電管理や電力変換が不要なわけではない
PD 3.1 で導入された EPR は、上限を 48 V×5 A=240 W に拡張し、ポート、ケーブル、電力パスが関連する能力を共同で備える必要があります。PD の表示バージョンが具体的な能力宣言に代わるわけではありません。USB-IF:USB Power Delivery
PPS は電源がデバイスの充電リンクにより適した出力を行い、一部の変換損失を削減できるようにしますが、バッテリーには依然として制御された電圧/電流、保護、熱管理が必要であり、一般的なシステムでは依然として降圧やチャージポンプなどの回路を使用しています。PPS Request のプログラミング粒度が実測電圧精度や電流リップルに等しいわけではありません。充電速度はバッテリーの状態と全体のシステムポリシーによって共同で制限されます。
電力計算例:インターフェース入力電力はバッテリー電力ではない
20 V、3 A で交渉し、インターフェース上限が 60 W と仮定します。3 A 負荷、完全な給電ループ抵抗 0.10 Ω の教育条件下では、ケーブルの電圧降下は 0.30 V、損失は 0.90 W で、受信端には約 59.1 W が得られます。デバイス自体が 10 W を消費する場合、残りの電力がさらに仮定 90% の効率の充電パスを経由して、バッテリーには約 (59.1−10)×0.9=44.19 W が得られます。
これは配分予算であり、特定のスマートフォンやコンピュータの実測効率ではありません。交渉電力を上げても、デバイスが上限に従って継続的に吸収することが保証されるわけではありません。ポートの共有、バッテリー充電段階、温度制御などが実際の値を変更する可能性があります。
Accept直後に新電源を使える?
Rejectでは従来の準備済み条件を保つ。Acceptでは目標電圧を即利用可能とせず遷移中にする。ボタンは因果関係と前提を持つプロトコルイベントを表す。
図を準備しています 再読み込み
Accept直後に新電源を使える? Acceptは要求受理であり、電源遷移完了と利用準備を示すのはPS_RDY。
{"id":"pd-accept-ready","title":"Accept直後に新電源を使える?","summary":"Acceptは要求受理であり、電源遷移完了と利用準備を示すのはPS_RDY。","height":1000,"html":"<h2 data-i18n=\"heading\"></h2><p class=\"intro\" data-i18n=\"intro\"></p><div class=\"actions\"><button id=\"r9\" data-i18n=\"r9\"></button><button id=\"r20\" data-i18n=\"r20\"></button><button id=\"accept\" data-i18n=\"accept\"></button><button id=\"reject\" data-i18n=\"reject\"></button><button id=\"ready\" data-i18n=\"ready\"></button><button id=\"reset\" data-i18n=\"reset\"></button></div><div class=\"metrics\"><div><span data-i18n=\"state\"></span><strong id=\"state\"></strong></div><div><span data-i18n=\"requested\"></span><strong id=\"requested\"></strong></div><div><span data-i18n=\"usable\"></span><strong id=\"usable\"></strong></div></div><section class=\"panel\"><h3 data-i18n=\"history\"></h3><div id=\"history\"></div></section><details class=\"scope\"><summary data-i18n=\"scopeLabel\"></summary><p data-i18n=\"scope\"></p></details>","css":".intro{margin:8px 0 18px;color:var(--muted);font-size:14px}.caption,.hint{font-size:12px;color:var(--muted);margin-top:12px}.control{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 12px;align-items:center;margin:14px 0;font-size:13px}.control label{font-size:13px}.control output{color:var(--accent);min-width:5em;text-align:right;font-variant-numeric:tabular-nums}.control input{grid-column:1/-1;width:100%;margin:0}.presets{display:flex;gap:4px;align-items:stretch}.presets button{flex:1 1 0;min-width:0;overflow-wrap:anywhere;font-size:13px}.actions{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}.actions button{flex:1;min-width:0;font-size:13px;min-height:42px}.copy{display:grid;font-size:14px;margin:16px 0}.copy>*{grid-area:1/1;margin:0}.reserve{visibility:hidden}.scope{margin-top:14px;color:var(--muted);font-size:12px}.scope summary{padding:8px 0;cursor:pointer}.scope p{margin-top:10px}.two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:16px 0}.card{border:1px solid var(--rule);border-radius:9px;padding:14px;min-width:0}.card header{font-size:14px;font-weight:600;margin-bottom:10px}.card button{font-size:12px;width:100%;min-width:0}.card small{display:block;font-size:12px;color:var(--muted)}.card code{font-size:12px;overflow-wrap:anywhere}.metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:16px 0}.metrics>div{border-left:2px solid var(--accent);padding-left:10px;min-width:0}.metrics span{display:block;min-height:3.2em;color:var(--muted);font-size:12px}.metrics strong{font-size:23px;display:block;font-weight:550;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.formula{border-top:1px solid var(--rule);padding-top:12px;margin-top:14px;font-size:13px;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.value{font:550 20px ui-monospace,monospace}.legend{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:12px;color:var(--muted);margin:12px 0}.legend span:before{content:'';display:inline-block;width:8px;height:8px;border-radius:2px;background:var(--accent);margin-right:6px}.legend .second:before{background:var(--second)}.check{display:flex;align-items:center;gap:8px;font-size:13px;margin:12px 0}.check input{width:16px;height:16px;flex-shrink:0;accent-color:var(--accent)}select,input[type=text],input[type=number]{background:var(--paper);color:var(--ink);font:inherit;font-size:13px;padding:10px;border:1px solid var(--rule);border-radius:7px;max-width:100%;min-width:0}select{width:100%;min-height:42px}.band{height:20px;display:flex;background:var(--surface);border-radius:4px;overflow:hidden}.band i{height:100%;display:block;background:var(--accent);transition:width .25s}.band i.second{background:var(--second)}button:disabled{cursor:default}.status{font-size:13px;min-height:4.8em}.mono{font-family:ui-monospace,monospace;font-variant-numeric:tabular-nums}.muted{color:var(--muted)}\n@media(max-width:480px){.two{gap:8px}.card{padding:12px 9px}.actions button,.presets button{font-size:12px}.metrics strong{font-size:20px}.metrics{gap:8px}}\n@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;animation:none!important}}\n.track-row{margin:16px 0}.track-row>span{display:block;font-size:12px;color:var(--muted);margin-bottom:7px}.track{display:flex;gap:5px;min-width:0}.cell{flex:1;min-width:0;min-height:48px;border:1px solid var(--rule);border-radius:5px;background:var(--surface);display:flex;align-items:center;justify-content:center;text-align:center;padding:5px 3px;font-size:12px;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.cell.on{background:var(--accent-soft);border-color:var(--accent)}.cell.gold{background:var(--second-soft);border-color:var(--second)}.cell.empty{border-style:dashed;color:var(--muted)}.cell.error{border-color:var(--second);text-decoration:line-through}.choices{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin:14px 0}.choices button{min-width:0;padding:10px 4px;font-size:12px;overflow-wrap:anywhere}.choices button[aria-current=true]{border-color:var(--accent);background:var(--accent-soft)}.relation{display:grid;grid-template-columns:minmax(0,1fr) 28px minmax(0,1fr);align-items:center;gap:6px;margin:12px 0}.relation .cell{min-height:72px}.relation>i{text-align:center;font-style:normal;color:var(--accent)}.readout{font-size:13px;white-space:pre-line;min-height:6.4em;overflow-wrap:anywhere}.plot{position:relative;border-left:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:8px 0;margin:18px 0}.plot-row{height:28px;position:relative;margin:4px 0;background:var(--surface)}.plot-row i{position:absolute;inset-block:5px;background:var(--accent);min-width:2px;transition:width .2s,left .2s}.plot-row b{position:relative;padding:4px 6px;font:11px/28px ui-monospace,monospace;background:var(--paper);border-radius:3px}.axis{display:flex;justify-content:space-between;font-size:11px;color:var(--muted)}\n\n/* Action labels must remain readable across locales and narrow embeds. */\n.actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}\n.actions button{overflow-wrap:anywhere;white-space:normal;min-height:58px;padding:8px}\nbutton{overflow-wrap:anywhere}\n@media(min-width:640px){.actions{grid-template-columns:repeat(3,minmax(0,1fr))}}\n\n.metrics span{overflow-wrap:anywhere}\n.panel{border:1px solid var(--rule);border-radius:9px;padding:12px;margin:14px 0;min-width:0}.panel h3{font-size:13px;margin:0 0 10px;color:var(--muted)}.source{font:13px/1.8 ui-monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere;margin:12px 0}.source mark{background:var(--accent-soft);color:var(--ink);border-bottom:2px solid var(--accent)}.source .fault{background:var(--second-soft);border-color:var(--second)}.diagram{display:block;width:100%;height:auto;max-height:320px;margin:14px 0;overflow:visible}.diagram text{fill:var(--ink);font:12px ui-monospace,monospace}.diagram .edge{stroke:var(--muted);stroke-width:1.5;fill:none}.diagram .edge.on{stroke:var(--accent);stroke-width:3}.diagram .node{fill:var(--surface);stroke:var(--rule);stroke-width:1.5}.diagram .node.on{fill:var(--accent-soft);stroke:var(--accent)}.diagram .node.gold{fill:var(--second-soft);stroke:var(--second)}.log{font:12px/1.8 ui-monospace,monospace;white-space:pre-line;overflow-wrap:anywhere;min-height:7.2em}.table{display:grid;gap:5px;margin:14px 0}.table .tr{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px}.table .tr>*{padding:8px 5px;background:var(--surface);border-radius:4px;min-width:0;overflow-wrap:anywhere;font-size:12px}.table .tr .on{background:var(--accent-soft)}.table .tr .gold{background:var(--second-soft)}.choices button{min-height:44px}.metrics strong{min-height:1.6em}.code-line{display:block}.code-line.on{background:var(--accent-soft);border-left:2px solid var(--accent);padding-left:6px}.status-badge{font-size:12px;color:var(--accent)}.tile-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.tile-grid .cell{min-height:40px}.actions button{min-height:48px}.form-field{display:grid;gap:8px;margin:14px 0;font-size:13px}.form-field input{width:100%;font-family:ui-monospace,monospace}.metrics.three{grid-template-columns:repeat(3,minmax(0,1fr))}.formula{min-height:3.2em}.presets{flex-wrap:wrap}.presets button{flex-basis:25%;min-height:44px}\n\n.budget{display:flex;height:28px;margin:16px 0;background:var(--surface);border-radius:5px;overflow:hidden}.budget i{display:block;background:var(--accent);transition:width .2s}.budget i.gold{background:var(--second)}.intervals{margin:16px 0}.interval{position:relative;height:36px;background:var(--surface);margin:6px 0;border-radius:4px;overflow:hidden}.interval i{position:absolute;height:100%;background:var(--accent-soft);border-left:2px solid var(--accent)}.interval i.gold{background:var(--second-soft);border-color:var(--second)}.interval span{position:relative;z-index:1;font:12px/36px ui-monospace,monospace;padding-left:7px}.table .tr>*{min-height:4.8em}.formula{white-space:pre-line;min-height:7.2em}.actions:has(>button:only-child){grid-template-columns:1fr}.metrics strong{min-height:3.2em}.rangegrid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:3px;margin:14px 0}.rangegrid .cell{min-height:30px;padding:3px 1px;font-size:10px}.message{min-height:7.2em;white-space:pre-line;font:13px/1.8 ui-monospace,monospace;overflow-wrap:anywhere}\n/* Allow CJK hanging punctuation without overflowing a metric's border box. */\n.metrics>div{padding-right:4px}.metrics span{line-break:anywhere}\n\n.chart-wrap{margin:18px 0}.chart-label{font-size:12px;color:var(--muted);min-height:3.2em}.curve{display:block;width:100%;height:auto;max-height:320px;overflow:visible}.curve text{font:11px ui-monospace,monospace;fill:var(--muted)}.gridline{stroke:var(--rule);stroke-width:1}.metrics strong{font-size:20px;min-height:3.2em}.formula{font:12px/1.8 ui-monospace,monospace;min-height:9em}.readout{min-height:8em}.presets button{flex-basis:30%}.scope p{overflow-wrap:anywhere} .unit-note{font-size:12px;color:var(--muted);margin:10px 0}\n\n.metrics span{word-break:break-all;line-break:strict}.metrics>div{padding-right:6px}\n\n#state,#usable{min-height:6.4em}#history{min-height:8em;white-space:pre-line;font-size:13px}","js":"const $=s=>document.querySelector(s);const set=(id,v)=>$('#'+id).textContent=v;const t=k=>viz.t(k);function cells(id,values){$('#'+id).replaceChildren(...values.map(v=>{const e=document.createElement('div');e.className='cell '+(v.cls||'');e.textContent=v.text;e.title=v.title||v.text;return e;}));}function pressed(mode){document.querySelectorAll('[data-mode]').forEach(e=>e.setAttribute('aria-pressed',String(e.dataset.mode===mode)));}const esc=s=>String(s).replace(/[&<>\"']/g,c=>({'&':'&','<':'<','>':'>','\"':'"',\"'\":'''}[c]));const fmt=s=>'{'+[...s].sort().join(', ')+'}';function graph(id,nodes,edges){const el=$('#'+id);el.setAttribute('viewBox','0 0 360 200');el.innerHTML='<defs><marker id=\"arrow-'+id+'\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"5\" markerHeight=\"5\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"var(--muted)\"/></marker></defs>'+edges.map(e=>{const a=nodes[e[0]],b=nodes[e[1]],dx=b.x-a.x,dy=b.y-a.y,d=Math.hypot(dx,dy)||1;if(edges.some(r=>r[0]===e[1]&&r[1]===e[0])){const nx=-dy/d,ny=dx/d;return '<path class=\"edge '+(e[2]?'on':'')+'\" d=\"M '+(a.x+dx/d*22+nx*12)+' '+(a.y+dy/d*22+ny*12)+' Q '+((a.x+b.x)/2+nx*38)+' '+((a.y+b.y)/2+ny*38)+' '+(b.x-dx/d*25+nx*12)+' '+(b.y-dy/d*25+ny*12)+'\" marker-end=\"url(#arrow-'+id+')\"/>';}return '<line class=\"edge '+(e[2]?'on':'')+'\" x1=\"'+(a.x+dx/d*25)+'\" y1=\"'+(a.y+dy/d*25)+'\" x2=\"'+(b.x-dx/d*28)+'\" y2=\"'+(b.y-dy/d*28)+'\" marker-end=\"url(#arrow-'+id+')\"/>';}).join('')+nodes.map(n=>'<g><circle class=\"node '+(n.cls||'')+'\" cx=\"'+n.x+'\" cy=\"'+n.y+'\" r=\"25\"/><text x=\"'+n.x+'\" y=\"'+(n.y+4)+'\" text-anchor=\"middle\">'+esc(n.name)+'</text>'+(n.sub?'<text x=\"'+n.x+'\" y=\"'+(n.y+43)+'\" text-anchor=\"middle\">'+esc(n.sub)+'</text>':'')+'</g>').join('');}function table(id,rows){$('#'+id).classList.add('table');$('#'+id).replaceChildren(...rows.map(r=>{const row=document.createElement('div');row.className='tr';row.style.gridTemplateColumns='repeat('+r.length+',minmax(0,1fr))';r.forEach(x=>{const c=document.createElement('div');if(typeof x==='object'){c.textContent=x.text;c.className=x.cls||'';}else c.textContent=x;row.append(c)});return row;}));}function band(id,parts,total){$('#'+id).replaceChildren(...parts.map((p,i)=>{const e=document.createElement('i');e.style.width=(100*p.value/total)+'%';e.className=i%2?'gold':'on';e.title=p.name+': '+p.value;return e}));}function intervals(id,items,total){$('#'+id).replaceChildren(...items.map(p=>{const row=document.createElement('div');row.className='interval';const bar=document.createElement('i');bar.style.left=(100*p.start/total)+'%';bar.style.width=(100*(p.end-p.start)/total)+'%';bar.className=p.cls||'';const label=document.createElement('span');label.textContent=p.label;row.append(bar,label);return row;}));}function plot(id,series,xr,yr,opts={}){const e=$('#'+id),X=x=>42+(x-xr[0])/(xr[1]-xr[0])*298,Y=y=>175-(y-yr[0])/(yr[1]-yr[0])*148;let out='<defs><clipPath id=\"clip-'+id+'\"><rect x=\"42\" y=\"27\" width=\"298\" height=\"148\"/></clipPath></defs>';for(let i=0;i<3;i++){let x=xr[0]+i*(xr[1]-xr[0])/2,y=yr[0]+i*(yr[1]-yr[0])/2;out+='<path class=\"gridline\" d=\"M '+X(x)+' 27V175M42 '+Y(y)+'H340\"/><text x=\"'+X(x)+'\" y=\"194\" text-anchor=\"middle\">'+esc(opts.xfmt?opts.xfmt(x):Number(x.toFixed(2)))+'</text><text x=\"36\" y=\"'+(Y(y)+4)+'\" text-anchor=\"end\">'+esc(opts.yfmt?opts.yfmt(y):Number(y.toFixed(2)))+'</text>';}out+='<g clip-path=\"url(#clip-'+id+')\">';for(const s of series){out+='<path fill=\"none\" stroke=\"'+(s.color||'var(--accent)')+'\" stroke-width=\"2.5\" '+(s.dash?'stroke-dasharray=\"5 4\"':'')+' d=\"'+s.pts.map((p,i)=>(i?'L':'M')+X(p[0]).toFixed(2)+','+Y(p[1]).toFixed(2)).join(' ')+'\"/>';}for(const p of opts.points||[])out+='<circle cx=\"'+X(p[0])+'\" cy=\"'+Y(p[1])+'\" r=\"4\" fill=\"var(--second)\" stroke=\"var(--paper)\" stroke-width=\"1.5\"/>';if(opts.cursor!==undefined)out+='<path d=\"M'+X(opts.cursor)+' 27V175\" stroke=\"var(--muted)\" stroke-dasharray=\"3 3\"/>';e.innerHTML=out+'</g>';e.dataset.curves=JSON.stringify(series.map(s=>s.pts));}const curve=(fn,lo,hi,n=120)=>Array.from({length:n+1},(_,i)=>{const x=lo+(hi-lo)*i/n;return[x,fn(x)]});function inputs(draw){document.querySelectorAll('input,select').forEach(e=>{e.addEventListener('input',draw);e.addEventListener('change',draw)});draw()}const n=id=>+$('#'+id).value;const show=(id,v,d=3)=>set(id,Number(v.toFixed(d)));let state='idle',voltage=5,request=null,log=[];function draw(){set('state',t(state));set('requested',request===null?'—':request);set('usable',state==='switching'?t('transition'):voltage+' V');set('history',log.slice(-5).join('\\n'));$('#r9').disabled=$('#r20').disabled=state!=='idle';$('#accept').disabled=$('#reject').disabled=state!=='waiting';$('#ready').disabled=state!=='switching';$('#state').dataset.state=state;$('#usable').dataset.voltage=state==='switching'?'unknown':voltage;}for(const v of[9,20])$('#r'+v).onclick=()=>{request=v;state='waiting';log.push('Request '+v+' V');draw()};$('#accept').onclick=()=>{state='switching';log.push('Accept');draw()};$('#reject').onclick=()=>{state='idle';log.push('Reject');request=null;draw()};$('#ready').onclick=()=>{voltage=request;request=null;state='idle';log.push('PS_RDY '+voltage+' V');draw()};$('#reset').onclick=()=>{state='idle';voltage=5;request=null;log=[];draw()};draw();","audio":false,"strings":{"accept":"Source:Accept","heading":"Accept直後に新電源を使える?","history":"イベント記録","idle":"準備完了","intro":"9 Vまたは20 Vを要求し、受理・遷移・準備完了を区別。","r20":"20 V要求","r9":"9 V要求","ready":"Source:PS_RDY","reject":"Source:Reject","requested":"要求電圧(V)","reset":"リセット","scope":"5 V準備済み接続から固定PDO交換だけを説明。遷移中のVBUS波形、完全なPD状態機械・タイムアウト・電流規則は扱わない。","scopeLabel":"モデルの範囲と前提","state":"交換状態","switching":"受理済み、遷移中","transition":"遷移中、PS_RDY待ち","usable":"電源状態","waiting":"応答待ち"}}
ケーブル表示とビデオ能力は別々に確認する
USB-IF の USB-C ケーブル認証表示はデータ性能と電力能力を区別します。USB 2.0 データケーブルでも高い PD 電力をサポートできるため、「240 W」が高速ケーブルの証明ではありません。e-marker はケーブル能力識別の一部であり、チップがあるからといってすべての速度をサポートすると判断することはできません。USB-IF:ケーブルとコネクタ 、Type-C 製品説明ガイド
DP Alt Mode は高速信号ペアを DisplayPort に割り当てることができます。一般的な 2 本の DP レーン構成では、もう 1 つの USB 3.x トランシーバ接続が保持され、4 本の DP レーン構成では高速ペアがビデオに使用され、USB 2.0 D+/D− は引き続き使用できます。解像度はレーン数だけで決まるわけではなく、リンク速度、ブランキング、リフレッシュレート、カラーディプス、クロマサブSampling、DSC サポートにも依存し、「2 レーンが 4K60」と固定して書くことはできません。VESA:DisplayPort Alt Mode
USB4 内のビデオトンネリングは、USB4 接続内で帯域幅を割り当てるものであり、コネクタの高速ペアをネイティブ DP に直接切り替える Alt Mode とは異なります。Thunderbolt にも独自のバージョンと認証要件があり、すべての USB4 製品を特定の世代の Thunderbolt と直接同一視することはできません。
失敗段階によって特定し、「より高価なケーブル」を繰り返し交換するよりも明確である
現象 まずどのレイヤーで区別するか 確認のポイント
C-to-C で給電しないが、A-to-C では使用可能 CC 接続検出 Rd、方向、Source/Sink 構成、電源スイッチ
充電できるが、システムがデバイスを認識しない データと列挙 ケーブルのデータ能力、D+/D−、高速パス、記述子とログ
片方向のみで動作 コネクタと方向リマルチプレクス 両側の CC、USB 2.0 対応接点、高速 MUX
USB-C で表示出力なし ビデオ能力とモード ホストポート、ケーブル、ドック、モニター、モード交渉
ファイル転送が遅い 実際のチェーンと共有負荷 交渉速度、Hub アップリンク、ストレージメディア、プロトコルオーバーヘッド
充電が銘板電力に達しない 給電契約と全体のシステムポリシー PDO、ケーブル定格、マルチポート配分、温度制御、バッテリー段階
帯域幅と電力の再計算
from math import isclose
encoded_byte_rate = 5e9 * ( 8 / 10 ) / 8
assert encoded_byte_rate == 500e6 voltage , current , loop_r = 20 , 3 , 0. 10
loss = current * * 2 * loop_r
received = ( voltage - current * loop_r ) * current
assert isclose ( loss , 0. 9 ) and isclose ( received , 59. 1 )
assert isclose ( received + loss , voltage * current )
assert isclose ( ( received - 10 ) * 0. 9 , 44. 19 )
assert 48 * 5 == 240
print ( ' エンコードスループット、ケーブル電圧降下、電力配分、EPR 上限の計算式チェック通過' )
継続的な参照