第14回(番外編): USB充電の歴史について簡単にまとめてみる その2 〜USB Battery Charging Specification 1.2〜
はじめに
前回に引き続き、「USB充電」についてです。今回は野良チャージャーをなんとかするために登場したとも言える、USB公式の充電規格である「USB Battery Chagrsing Specification」についてまとめてみます。
なお、今回は文章多めですがお付き合いいただけたら嬉しいです。
USB Battery Carging Specification 1.2の登場
野良チャージャー時代には、独自拡張で互換性に問題が発生し規定以上の電流を引っ張ってPCのUSBポートにダメージを与えるようなデバイスや、急速充電に対応していないのに規定以上の電流を引くことができてしまい安全性に疑問がつくUSB充電器が市場にいくつも存在しました。
この混沌とした状態から脱却するために、USBの標準化団体であるUSB-IF(USB Implementers Forum, https://www.usb.org/)がUSB充電の標準規格である「USB Battery Charging Specification」を規定しました。
何度かのバージョンアップの後、市場に受け入れられて製品が普及したのが、今回説明する「USB Battery Carging Specification 1.2(以降 USB BC1.2)」です。
USB BC1.2は、すでに市場で普及している製品との互換性を重視していて、以下をターゲットに規格が決められました。
- 既存のUSBデバイス・ホストと共存する
- 普及のために、USB充電器のコストアップはできるだけ避ける
ちなみに、USB関連のすべての規格書はhttps://www.usb.org/で公開されていて、特別な登録等は不要で誰でも入手可能です。
これもUSBが普及した大きな理由の一つだと思われます。
USB BC1.2で規定された機能の概要
「USB BC1.2」では、受電側(デバイス)と給電側(ポート)の両方が規定されています。給電側(ポート)の通信ライン(D+/D-)の状態を検出して受電側(デバイス)が充電に使用する電流を制御するというのが「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」では、給電側(Host)は「Port」と呼びます。「Port」は充電能力と通信機能により「SDP」「CDP」「DCP」の3種類が規定されています。
Standard Downstream Port (SDP)
USB2.0規格の通常のUSBポート(PC等についているUSB Host)で、充電に供給できる最大電流は500mAです。
ちなみに、USB2.0で通信する場合、Host側のポートを「Downstream Facing Port」、Device側のポートを「Upstream Facing Port」と呼ぶので、「USB BC1.2」で通信機能がある場合は「Downstream Port」という名称を使います。
SDPは従来のUSBポートですので、ハードウエアの追加は必要ありません。
Charging Downstream Port (CDP)
USB通信が可能な充電対応ポートで、充電に供給できる最大電流は1.5Aです。PC本体についている充電対応USBポート("CHG"という表示や"稲妻マーク"がついているポート)はCDPであるケースが多いです。
USBデバイスと通信する必要があるため、充電電流が増えてもVBUS電圧の変動範囲は 4.75~5.25V(+/- 5%)を守るように規定されています。
CDPではPortable Deviceからの判別へ応答(ハンドシェイク)するために、ハードウエア(回路)の追加が必要となります。
Dedicated Charging Port (DCP)
USB通信は行なわない充電専用ポートで、充電に供給できる最大電流は1.5Aです。一般で販売されているUSB BC1.2対応のUSB充電器のほとんどはこれに該当しています。
USBデバイスと通信する必要がないため、充電電流によるVBUS電圧の変動範囲は 2.0~5.25V と低い方に緩和されています。
DCPではD+とD-を200Ω以下の抵抗で接続するだけです。実際はD+とD-をショート(短絡)するケースが多く、コストへの影響を最小限にするように配慮されています。
USB2.0とUSB BC1.2を両立させる仕組み
USB BC1.2は従来のUSB2.0と両立できるように、うまく考えられた仕組みになっています。
USB2.0ではPortにDeviceが接続(Attach)されたらDeviceは通信開始の準備を開始し、通信可能になったら通信速度に応じてD+(FS)またはD-(LS)をプルアップ(Connect)してHostに通知します。
USB BC1.2ではこの"Attach"から"Connect"までの期間(規格上は最大1秒まで許可)を利用して、D+/D-にHレベルと判断されない電圧(約0.6V)をかけることでPortの種類を判別します。
USB BS1.2でのPort判別の手順
次に、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)へ移行する。
Portable Device(受電側)のVBUS電圧許容範囲
USB BC1.2では、充電電流の増加に対応するために受電側・給電側ともにVBUS電圧の許容範囲(Allowed Operating Range)が変更(緩和)されています。
受電側のPortable Deviceでは、500mA〜1.5AではVBUSが2Vまで下がっても"充電動作"をすることが許容(Allowed)されています。
Port(給電側)のVBUS電圧許容範囲
給電側のPortでは、USB通信可能なCDPと充電専用のDCPで許容範囲が異なります。
CDPの場合
CDPでは、USB通信を行うために1.5AまではVBUS電圧は4.75〜5.25V(5V +/- 5%)の範囲に入っている必要(Required)があります。
DCPの場合
DCPでは、500mAまではVBUS電圧は4.75〜5.25V(5V +/- 5%)の範囲に入っている必要(Required)がありますが、500mA以上の電流ではVBUSが2V以下になることが許容(Allowed)されています。下図では全てのカーブがDCPでは許容されます。
余談: PS/2ポート問題
以前のUSBキーボードやUSBマウスには「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変換アダプタ」はあまり見かけませんが、実際のPortable Device製品の中には、厳密に保護するためにD+/D-が5Vレベルであることを検出して充電できないものも存在しました。
次回「Quick Charge」に続きます...
次回更新は2週間後の8/2(火)の予定です。
コメント
ハチマキ先輩
このUSB充電の歴史シリーズ、とてもわかりやすく勉強になります