【番外編】USB充電規格をできるだけ簡単にまとめてみる(前編: 野良チャージャーからQC3.0まで)
今では一般的になったけど、実はよくわからないことも多い「USB充電器」。以前コラムでもQuick Chargeまでの記事を書いたことがあるのですが、最近USB PDについて再びまとめ始めたこともあって、改めてnoteの方にも記事を書いて公開します。
本記事は有料記事ですが、最後の参考リンクを除いて無料で公開します。もし、なにかのお役にたったら購入(投げ銭)していただけると筆者が喜びます。
はじめに
昨年の夏(2022年7月5日)に、twitterを中心にAnkerのUSB充電器の評価記事がプチ炎上しました。
Ankerの充電器に不具合? ブログの指摘記事に公式声明「一般使用には問題ない」
最終的にはブログ記事の方も訂正をいれて、Ankerも充電器のFWを修正することで決着がつきました。
その時に改めて「USB充電器は一般的になったけど、色々な規格のものが混在しているよなぁ」と思ったので、これまでの規格化の経過も含め簡単にまとめてみました。
なお、規格の詳細については一般公開されていないものもあり、分かる範囲調べて記載しています。
勘違い・間違いがあったらコメントいただけると非常に助かります。
「USB充電」の簡単な経過
1996年に「わかりにくいPCの周辺機器の接続を1個にまとめよう」という発想から登場したのが、今ではすっかり普及したUSB(Universal Serial Bus)です。
USBは周辺機器をつなぐだけで認識してつかえるようになる「Plug and Play」をサポートし、Windows98でOSレベルでサポートされたことにより、一気に普及しました。
USBが普及するに従い「USBポートから電源(標準で5V/100mA、最大で500mA)が供給できる」という特徴から、USBポートを携帯電話(いわゆるガラケー)やMP3プレイヤーといったデバイスの充電用電源に使用するという用途が出てきました。
そして、それらのデバイスを充電するための充電専用USBポート(USB-A)を搭載したUSB充電器(以降「野良チャージャー」*)と、USB扇風機のようなUSBをただの5V電源として電流管理をせずに使用するデバイス(以降「野良デバイス」*)が市場にたくさん登場してきました。
*当時、USB関係者の間では本当にこう呼ばれていました。
ただ、「野良デバイス」のなかにはUSB規格で許容された電流(当時は最大で500mA)を超えるものがあり、PCのUSBポートにダメージを与えたり、最悪はPC自体が故障するというケースも出てきました。
そのため、これらの規格を統一しスマートフォン等の充電にも対応できる規格として、USBの標準化団体であるUSB Implementers Forum (以降 USB-IF)から「USB Battery Charging Specification」(以降 USB BC)が登場しました。
その後、供給できる電力(電圧 x 電流)を増やしたいという市場の要求もあり、Type-Cコネクタを使い5V以上が出力可能なUSB-IFによる正式規格「USB Power Derivary」(以降 USB PD)が登場し、現在に至ります。
また、スマートフォン向けのSoCを作っている米Qualcomm社も独自の高速充電規格である「Quick Charge」(以降、QC)をリリースしました。
QCはAndroidスマートフォンを中心に普及していて、従来のUSB-Aポートをそのまま使用することもあって、現行のUSB充電器でもサポートしているものをよくみかけます。
野良チャージャー時代
上でも書きましたが、USBポートを電源として使用するに際してUSB規格(USB2.0)で規定されている最大電流(5V/500mA)では充電時間が長すぎたり機器を動作させるためには不足だったり、というケースが出てきてました。
そこで、USBを携帯電話やMP3プレーヤーの充電に、しかも少しでも速く充電したいという各社が独自規格で拡張した、いわゆる「野良チャージャー」が多数市場に出回りました。
「Apple」と「Sony」の独自規格
代表的なものは、「Apple」と「Sony」の独自規格で、充電器側でUSBの通信ライン(D+/D-)に抵抗分割した特定の電圧を加えることで、接続したデバイスが充電器の種類を特定して充電に要求する電流をコントロールする、という方式です。
特に、「Appleチャージャー」はかなり普及し、USB BC1.2がするまでは多くのUSB充電器が対応していて、今でも多くのUSB-Aポートを備えた充電器でサポートされています。
「Sonyチャージャー」は、Sonyのデバイスを中心にサポートされていました。
ただ、「Play Station 3」のワイヤレスコントローラ(DUALSHOCK3)のように、USBの通信(enumeration)ができないと充電ができないデバイスがあり、サードパーティのUSB充電器によっては充電できないということで、色々と混乱がありました。
USB Battery Charging Specification 1.2
USB Battery Charging Specification 1.2とは
前述のように、独自拡張で互換性に問題が発生し規定以上の電流を引っ張ってPCのUSBポートにダメージを与えるようなデバイスや、急速充電に対応していないのに規定以上の電流を引くことができてしまい安全性に疑問がつくUSB充電器があったりと、混沌とした状態から脱却するために、USBの標準化団体であるUSB-IFがUSB充電の標準規格である「USB Battery Charging Specification」(USB BC)を規定しました。何度かのバージョンアップの後、市場に受け入れられて製品が普及したのが「USB BC1.2」です。
ちなみに、USB関連の規格書はオープンになっていて、誰でも入手可能というのも普及に一役買ったと思います。
「USB BC1.2」では、受電側(デバイス)と給電側(ポート)の両方が規定されています。給電側(ポート)の通信ライン(D+/D-)の状態を 検出して受電側(デバイス)が充電に使用する電流を制御するというのが「USB BC1.2」の基本的な考え方です。
USB2.0とUSB BC1.2を両立させる仕組み
USB BC1.2は従来のUSB2.0の通信と両立できるように規定されています。
USB2.0ではPortにDeviceが接続(Attach)されたら、Deviceは通信開始の準備を行い通信可能になったらD+またはD-をプルアップ(Hレベル)にして(Connect)Hostに通知します。
USB BC1.2ではこの"Attach"から”Connect"までの期間を利用して、D+/D-にHレベルと判断されない電圧(約0.6V)をかけることでPortの種類を判別します。
USB BC1.2対応デバイスのハードウエア構成
「USB BC1.2」では、受電側(デバイス)を「充電可能な2次電池搭載のデバイス」と定義し、「Portable Device」と呼びます。「Portable Device」に要求される機能は以下です。
接続された「Port」の種類判別
VBUSからの最大電流を「Port」の供給能力に合わせて制限する
Portable DeviceがPortの種類を判別する手順は以下になります。
VBUS Detect: VBUSの電圧を検出しPortに接続されたことを検出する
Data Contact Detect (オプション): D+/D-のピンが接続されたことを検出する
Primary Detection: 接続されたのが通常のUSBポート(SDP)か、充電対応ポート(CDP/DCP)かを判別する
Secondary Detection(省略可能): 充電対応ポートの種類(CDP or DCP)を判別する
ACA Detection(オプション): USB充電用のアクセサリーの種類を検出する※
※"ACA Detection"に対応したアクセサリーは実際にはほとんど普及していないので説明は省略します
それぞれの判別手順に対応したハードウエア構成の例は以下の図のようになります。
USB BC1.2対応ポートのハードウエア構成
「USB BC1.2」では、給電側(Host)を「Port」と呼びます。「Port」は充電能力と通信機能により「SDP」「CDP」「DCP」の3種類が規定されています。
ちなみに、USB2.0で通信する場合、Host側のポートを「Downstream Facing Port(DFP)」、Device側のポートを「Upstream Facing Port(UFP)」と呼ぶので、「USB BC1.2」で通信機能がある場合は「Downstream Port」という名称を使います。
Standard Downstream Port (SDP)
USB2.0規格の通常のUSBポート(PC等についているUSB Host)で、充電に供給できる最大電流は500mAです。SDPではハードウエアの追加は必要ありません。
Charging Downstream Port (CDP)
USB通信が可能な充電対応ポートで、充電に供給できる最大電流は1.5Aです。
USBデバイスと通信する必要があるため、充電電流によるVBUS電圧の変動範囲は 4.75~5.25V と厳しくなっています。CDPではPortable Deviceからの判別へ応答(ハンドシェイク)するための回路追加が必要となります。
Dedicated Charging Port (DCP)
USB通信は行なわない充電専用ポートで、充電に供給できる最大電流は1.5Aです。
充電電流によるVBUS電圧の変動範囲は 2.0~5.25V と電圧が低い方に緩和されています。
一般に安価で販売されているUSB BC1.2対応のUSB充電器のほとんどはこれに該当しています。
DCPではD+とD-を200Ω以下の抵抗で接続するだけです。実際はD+とD-をショート(短絡)するだけでよくコストへの影響を最小限にするように配慮されています。
デバイスによるポート種類判別の手順
次に、USB BC1.2で規定されているPort判別の手順(ハンドシェイク)をまとめてみます。
[1] VBUS Detect ~ Data Contact Detect (接続検出、オプション)
VBUS Detect ~ Data Contact Detectでは、Portable DeviceがPortに物理的に接続されたことを以下の手順で検出します。
Potable Deviceは、VBUS電圧がしきい値(VOTG_SESS_VLD)を超えたら、Portに”attach”されたと判断する
“attach”されたら以下の手順でD+/D-が想定するPortと”contact”されたかを判別する
D+に電流源(IDP_SRC)を、D-にプルダウン抵抗(RDM_DWN)を接続する。このときのIDP_SRCの値はRDM_DWNに流れてもBC1.2のL/H判別の閾値(VDAT_REF)より小さくなるように設定する。
D+がプルダウン抵抗(RDM_DWN)によってLレベルになったら、"contact"されたと判断する
DCDはオプションなので、実装しない場合は、“attach”から300~900ms待って、Primary Detectionへ移行する
下図の赤いラインで示すように、SDP/CDP/DCPであればD+はいずれもLレベルになります。
[2] Primary Detection (Charging Port検出)
Primary Detectionでは、接続先が通常のUSB Port (SDP)なのか、Charger Port (DCP or CDP)なのかを以下の手順で判別します。
D+に電圧源(VDP_SRC)、D-に電流源(IDM_SINK)を接続しD-の電圧を確認する。VDP_SRCの電圧は、VDAT_REF < VDP_SRC < VLGC(USB2.0でのL/H判別の閾値) とする。
D- < VDAT_REFであればSDPと判断し、USB2.0での接続処理(enumerate)へ移行する。(VBUS電流は最大500mA)
VDAT_REF < D- かつ D- < VLGC (Optional)であればCharging Portと判断し、必要に応じてSecondary Detectionへ移行する。(VBUS電流は最大1.5A)
下図の赤いラインで示すように、CDPの場合は電圧源 (VDM_SRC)を使用してD-に電圧出力します。DCPの場合はD+の電圧がそのままD-に出力されます。
[3] Secondary Detection (充電専用ポート(DCP)判別、省略可能)
Primary DetectionでのCharging Port検出後に、Portable Deviceは必要に応じてSecondary Detectionを実行し充電ポートが通信可能なポート(CDP)なのか、専用充電ポート(DCP)なのかを以下の手順で判別します。
D-に電圧源(VDM_SRC)、D+に電流源(IDP_SINK)を接続しD+の電圧を確認する。VDM_SRCの電圧は、VDAT_REF < VDM_SRC < VLGCとする。
D+ < VDAT_REF であればCDP、 VDAT_REF < D+ であればDCPと判断し、VBUSから必要電流(最大1.5A)を引くことが可能となる。
CDPの場合は”Connect”としUSB2.0での接続処理(enumerate)へ移行する。
USB BC1.2でのVBUS電圧の許容範囲「Allowed Operating Range」
デバイス(受電側)の「Allowed Operating Range」
USB BC1.2では、充電電流の増加に対応するために受電側・給電側ともにVBUS電圧の許容範囲(Allowed Operating Range)はUSB2.0から拡大されています。
受電側のPortable Deviceでは、500mA〜1.5AではVBUSが2Vまで下がっても”充電動作”をすることが許容(Allowed)されています。
ポート(給電側)の「Allowed Operating Range」
給電側のPortでは、USB通信可能なCDPと充電専用のDCPで許容範囲が異なります。
CDPの場合は、USB通信を行うために1.5AまではVBUS電圧は4.75〜5.25V(5V +/- 5%)の範囲に入っている必要(Required)があります。
DCPの場合は、500mAまではVBUS電圧は4.75〜5.25V(5V +/- 5%)の範囲に入っている必要(Required)がありますが、500mA以上の電流ではVBUSが2V以下になることが許容(Allowed)されています。下図では全てのカーブがDCPでは許容されています。
USB-PS/2変換アダプタ問題
USBの登場以前のPCにはマウス・キーボード接続に「PS/2ポート」を使用していました。
そのため、以前はUSBキーボードやUSBマウスをPS/2ポートに接続して使用するための「USB-PS/2変換アダプタ」というものが存在しました。
このアダプタを使用してPCのPS/2ポートに接続した場合、タイミングによってはD+/D-がHigh(5V)になってしまい、Charging Portと誤認識する恐れがあります。
PS/2のVCCは最大100mAなので、Charging Portと誤認識してPS/2ポートから大電流を引くとPCに物理的ダメージを与える可能性があります。
そのため、USB BC1.2の規格書では、D+/D-がLogic Highレベル(VLGC)以上であるかどうかも検出して、Highの場合は電流を引かないことが推奨されています。
今では「USB-PS/2変換アダプタ」はほとんど見かけませんが、実際のUSBデバイス製品の中には、厳密に保護するためにD+/D-が5Vレベルであることを検出して充電できないものも存在しました。
Quick Charge 3.0
Quick Chargeとは
USB BC1.2で5V/1.5Aまでの充電に対応したのですが、スマートフォンの高機能化に従うバッテリーの大容量化の流れもあり、さらなる急速充電の対応のために、米Qualcomm (https://www.qualcomm.com/) が策定した急速充電規格が「Quick Charge」(以降 QC)です。
「Quick Charge」の最初のバージョン(1.0)は2013年に登場し、その後バージョンアップを重ねて、2023年3月時点の最新バージョンは5.0です。QC4.0以降はUSB Power Delivery(USB PD)のスーパーセットとなり、充電器はUSB規格を遵守したものとなっています。
USB充電器のQCへの対応状況
現在(2023年3月)時点で市場に一番多く流通しているのはQC3.0対応のUSB充電器ですので、この記事ではQC3.0について解説します。
QC3.0では、さらなる急速充電に対応するためにUSB充電器の充電電圧(VBUS)をデバイスの要求に応じて、3.6〜20Vまで可変できる仕様で、規格上の最大出力電力は36W(12V x 3A)です。
USBの通信ライン(D+/D-)を使用してUSB充電器〜デバイス間のやり取りを行いますので、 Type-Cコネクタを使わずに通常の4ピンの「USB-A」コネクタで対応できるというメリットがあります。
QCは基本的には以下の組み合わせで動作します。
デバイス: QualcommのSoC( 例:Snapdragon)搭載のスマートフォン
充電器: Quick Charge対応充電器
Snapdragon搭載のスマートフォンが市場に多く普及していることもあり、充電器もQCに対応しているものが多く発売されています。
USB 充電コントローラICにもUSB PDとQC3.0の両方をサポートしているものがあり、「USB PD+QC3.0対応」の充電器も一般的に流通しています。
Quick Charge判別の手順
「Quick Charge」の正式な規格は一般にはオープンされていません。そこで、ネット上で入手できるQC対応ICのデータシートを参考にしてモード判別の手順(ハンドシェイク)をまとめました。
Quick Chargeのモード判別の基本の流れは以下のようになります。説明では充電器を「ホスト」、スマートフォンを「デバイス」と記載しています。
デバイス(スマートフォン)とホスト(充電器)の双方でお互いがQC対応か判別
QC対応であれば、デバイスがD+/D-ラインに0V/0.6V/3.3V の3値の組み合わせで出力する電圧を要求
ホストは、D+/D-ラインの電圧の組み合わせに応じた電圧をVBUSに出力
実際のモード判別の仕組みはPower Integrations(https://www.power.com/)のCharger Interface Physical Layer IC「CHY100」のデータシートに記載があります。以降、これをベースに解説していきます。
[1] ホストがUSB BC1.2充電器(DCP)としてデバイスと接続
ホストのVBUS電圧が閾値(3.9V)を超えたら、20ms以内にD+とD-を接続しUSB BC1.2互換の充電器としてVBUS出力電圧を5Vに設定します。
D+とD-を接続したらホストはD+の電圧の監視を開始します。
[2] デバイスがQuick Charge対応であることをホストに通知
デバイスはD+に0.6Vを1.25秒以上継続して出力します。ホストはこのD+の電圧を検出してQuick Chargeモードに入ります。
ちなみに、検出期間中にD+がローレベル(< 0.325V)になると、1.25 秒タイマーはリセットされ、USB BC1.2 互換モード(出力電圧5V)で動作します。
[3] ホストがQuick Charge対応であることをデバイスに通知
ホストはQuick Chargeモードに入ったらD+とD-を切り離し、D-を19.53kΩで1ms以上の期間GNDにプルダウンします。
デバイスはD-の電圧が1ms以上の期間ローレベル(<0.325V)になると、Quick Charge対応のホストであると認識します。
[4] デバイスがホストに要求する出力電圧を通知
デバイスはQuick Chargeモードのホストであると判別したら、D+とD-に要求する出力電圧に応じた電圧(出力電圧テーブルを参照)を印加します。印加する電圧は0V/0.6V/3.3Vの3値です。
ホストはD+とD-に印加された電圧の組み合わせに応じて、要求された電圧をVBUSに出力します。
なお、Quick Chaegeのホストは最大出力電圧に応じてClass A(12Vまで)とClass B(20Vまで)の2種類があります。
上記の手順を波形にすると以下のようになります。
連続モードでの電圧可変の仕組み
QC3.0で追加された連続モード(Continues Mode)では、デバイスは200mVステップでの出力電圧の可変をホストに要求することができます。
電圧可変の仕組みはFitipower Integrated Technology(https://www.fitipower.com/) のUSB充電ポートコントローラ「FP6601Q」およびON Semiconductor(https://www.onsemi.com/)のQualcomm Quick Charge 3.0 HVDCP Controller「NCP4371」のデータシートに記載があります。
出力電圧のインクリメント(+200mV)
デバイスはD+を3.3Vに200usの間引き上げてパルスをホストに送り、次にD+を0.6Vに戻します。
出力電圧のデクリメント(-200mV)
デバイスはD-を0.6Vに200usの間引き下げてパルスをホストに送り、次にD-を3.3Vに戻します。
後編ではUSB Power Delivary 3.0について解説をしていきます。
参考リンク
ここから先は
¥ 300
よろしければサポートお願いします。分解のためのガジェット購入に使わせていただきます!