Redmi K20 ProというQuick Charge 4+ certifiedなスマートフォンをQC4+ certifiedなACアダプターで充電したら、QC4+ certifiedではないACアダプターで充電した時よりも充電が遅かったり、そもそも充電すらできないという意味不明な現象が発生しました。
使用したスマートフォン・ACアダプター
Redmi K20 Pro
意味不明な現象が起きたスマートフォンはXiaomiのRedmi K20 Proです。
Redmi K20 ProはXiaomiの製品ページでQC4+対応と紹介されており、Qualcommが公開しているQuick Charge認定製品リストにもQC4+ certifiedとして掲載されています。
Anker PowerPort III 45W Pod
使用したACアダプターの1つ目はAnker PowerPort III 45W Pod [A2711121] です。Quick Charge認定は取得していない、ただのUSB PD PPS対応ACアダプターです。
Belkin F7U073dq
使用したACアダプターの2つ目はBelkin F7U073dqです。QC4+ certifiedです。
Razer RC30-021501
使用したACアダプターの3つ目は、Razer Phoneシリーズに付属している24W USB-C ACアダプター RC30-021501です。QC4+ certifiedです。
Redmi K20 Proを充電してみる
まずはAnker A2711121でRedmi K20 Proで充電してみます。
約24Wで充電されました。
続いて、QC4+ certifiedなBelkin F7U073dqで充電してみました。
Anker A2711121で充電した時の半分、約12Wで充電されました。なんでやねん。
(当然ですが、バッテリーは十分に減らしています)
続いて、QC4+ certifiedなRazer RC30-021501で充電してみました。
Hard Resetが発生し続け、そもそもマトモに充電できませんでした。金返してくれ。
過去バージョンのMIUIに戻して検証
ということで、Quick Charge認定のないAnkerのACアダプターが1番充電が早く、逆にQC4+ certifiedなACアダプターの方がむしろ充電が遅かったりそもそも充電できなかったりする現象が起きることを紹介しました。
まがりなりにもRedmi K20 ProはQC4+ certifiedなので、少なくとも発売前にULかAllionかGRLで行われたであろう認定試験の時点では問題なく充電できていたはずです。何が言いたいのかと言うと「発売時点では問題なかったが、その後Xiaomiが実施したアップデートで充電がぶっ壊れたのではないか」ということです。
幸いなことにXiaomiのスマートフォンはBootloader Unlockableなので、ファームウェアやAndroid OSをダウングレードすることができます。さすがにマイナーアップデートも含めた全バージョンで検証するのは無理なので、大きな変更がありそうないくつかのバージョンをピックアップし、それらで検証してみました。それぞれのバージョンの概要は以下の通りです。
- MIUI 10.3.6.0: Redmi K20 Pro向けMIUI Stable ROMで最も古いバージョン。Android 9ベース。2019年5月リリース。
- MIUI 10.3.17.0: Android 9ベースの中で最後のバージョン。2019年8月リリース。
- MIUI 11.0.2.0: Android 10ベースの中で最初のバージョン。2019年10月リリース。
- MIUI 11.0.8.0: 最後のMIUI 11 Stable ROM。Android 10ベース。2020年3月リリース。
- MIUI 12.5.6.0: 記事作成時点での最新バージョン。Android 11ベース。2021年10月リリース。
で、それぞれのMIUIバージョンで充電した結果が以下の表です。
MIUIバージョン | ACアダプター | 充電結果 | RDO (Request Data Object) |
---|---|---|---|
MIUI 10.3.6.0 | Anker A2711121 | 約17W | 3.3-16.0V⎓2.0A |
Belkin F7U073dq | 約17W | 3.3-11.0V⎓2.0A | |
Razer RC30-021501 | 約24W | 3.0-11.0V⎓2.65A | |
MIUI 10.3.17.0 | Anker A2711121 | 約17W | 3.3-16.0V⎓2.0A |
Belkin F7U073dq | 約17W | 3.3-11.0V⎓2.0A | |
Razer RC30-021501 | 約24W | 3.0-11.0V⎓2.65A | |
MIUI 11.0.2.0 | Anker A2711121 | 約27W | 3.3-16.0V⎓3.0A |
Belkin F7U073dq | 約25W | 3.3-11.0V⎓3.0A | |
Razer RC30-021501 | 約24W | 3.0-11.0V⎓2.65A | |
MIUI 11.0.8.0 | Anker A2711121 | 約27W | 3.3-16.0V⎓3.0A |
Belkin F7U073dq | 約12W | 3.3-11.0V⎓1.5A | |
Razer RC30-021501 | 充電不可 | – | |
MIUI 12.5.6.0 | Anker A2711121 | 約27W | 3.3-16.0V⎓3.0A |
Belkin F7U073dq | 約12W | 3.3-11.0V⎓1.5A | |
Razer RC30-021501 | 充電不可 | – |
どうやら充電がぶっ壊れたのはMIUI 11.0.2.0から11.0.8.0の間のようです。
MIUI 11.0.2.0〜11.0.8.0の間に何が起きたのか
複数のMIUIバージョンで検証した結果、QC4+ certifiedなACアダプターで充電が遅かったり、そもそも充電できない現象が起きるようになったのはMIUI 11.0.2.0から11.0.8.0の間だということが分かりました。
さらに追加で色々調べたところ、Xiaomiの独自充電規格である「Mi Turbo Charge」が今回の件の原因だという結論に至りました。
Mi Turbo Chargeには27W, 40W, 33W, 67W, 120Wなどいくつもの種類があり、すべてのワット数のMi Turbo Chargeで同じような動作が行われているかは不明ですが、少なくともいくつかのMi Turbo Chargeでは以下のような動作をします。これから説明するのはMi Turbo Charge 33Wについてです。
Mi Turbo Charge 33Wは名前こそ独自規格っぽい「Mi Turbo Charge」ですが、内部的には電力のハンドシェイクにUSB PD PPSを使用しています。USB PDはオープンな仕様なので、普通に実装すれば純正品だろうがサードパーティだろうが同じ速度で充電できるようになるはずですが、Xiaomiがそんな行儀の良いことをするわけがありません。具体的には、両方がXiaomi純正品でない場合はMi Turbo Charge 33Wが有効にならないようになっています。
Mi Turbo Charge 33W対応のACアダプターは、スマートフォンがXiaomi製だと確認できない場合はPPS PDOを通知しなくなります。
同様に、スマートフォン側も、ACアダプターがXiaomi製 (またはZMI製) ではない場合はMi Turbo Charge 33Wが有効にならないようになっています。
このように、少なくとも33WのMi Turbo ChargeにはスマートフォンとACアダプターの両方に、相手がXiaomi純正品でないと機能をフルに発揮しないDRM的な仕組みが組み込まれています。
そして、そのDRM的な仕組みが組み込まれているのはMi Turbo Charge 40Wも同様です。Mi Turbo Charge 40Wは電力のハンドシェイクにUSB PD PPSを使用するようになった最初にMi Turbo Charge規格で、小米9 Pro 5Gが対応しています。 (参考: GTrusted)
そしてその小米9 Pro 5Gが発売されたのは2019年9月末です。Redmi K20 Proの充電がぶっ壊れたのは2019年10月から2020年3月の間のアップデートなので、時期的にはほぼ一致します。
つまり、私の推測はこうです。
- Redmi K20 ProはQC4+対応
- QC4/4+は電力のハンドシェイクにUSB PD PPSを利用している
- 2019年9月末にMi Turbo Charge 40W対応の小米9 Pro 5Gが発表された
- 小米9 Pro 5G付属のACアダプターは、スマートフォンがXiaomi製だと確認できない場合はPPS APDOを通知してくれない → Redmi K20 Proを充電した場合はQC4+ではなくQC3.0での充電になってしまう
- どうすれば良いか → 「Xiaomi製であることを示すUSB PDのレスポンス」をRedmi K20 Proも返すようにアップデートで修正する
- そのアップデートによって小米9 Pro 5G付属のACアダプターがPPS APDOも通知してくれるようになり、Redmi K20 ProをQC4+充電できるようになる
- 一方で、そのアップデートで「ACアダプターがXiaomi製だと確認できない場合は充電のワット数をセーブする」というMi Turbo Chargeの仕様も取り込まれた
- これが原因で、QC4+ certifiedなACアダプターでの充電が遅くなった
充電時のUSB PDのパケットを確認してみても、MIUI 11.0.2.0以前では送信されていなかったACアダプターのベンダーを確認するためと思われるパケットが、MIUI 11.0.8.0以降では送信されるようになっていました。
そのため、MIUI 11.0.8.0以降でQC4+ certifiedなACアダプターでの充電が遅くなったり充電できなくなったのは、小米9 Pro 5Gの発売に伴ってMi Turbo Chargeの仕様がRedmi K20 Proに取り込まれたからである可能性が高いと考えられます。
Anker A2711121では正常に充電できた理由
「QC4+ certifiedなBelkinやRazerで充電が遅くなったり充電できなくなった原因は何となく分かったけど、なんでAnkerだけは普通に充電できているんだろう」と疑問に思う人もいるかもしれないので、その辺りを説明します。
Redmi K20 Proでは、以下の流れでスマートフォンとACアダプターが相互にXiaomi製か確認する動作が行われます。
- Data Role Swapを実行
- Discover Identify/SVIDsコマンドを使って相手がXiaomi製か相互に確認
- USB PD PPSでの充電が開始される
これらのうち、BelkinやRazerのACアダプターでは1は正常に行われています。しかし2でXiaomi製だと確認できないため、充電が遅くなったり充電できなくなっています。
一方、AnkerのACアダプターではそもそも1が完了しておらず (Redmi K20 ProがData Role SwapをリクエストするがAnkerがNot_Supportedをレスポンス) 、2の動作も行われていません。2を飛ばしてそのままPPSでの充電が行われています。
MIUI 11.0.8.0以降がインストールされているRedmi K20 Proでは、1が完了しない場合はQC4+モードになるようです。一方で、1が完了してしまうとMi Turbo Chargeモードになるようで、ACアダプターがXiaomi製だと確認できない場合はRedmi K20 Pro側が充電速度を制限します。
今回の場合では、Ankerはそもそも1が完了しないためQC4+モードとなり、約27Wで充電が行われたと考えられます。私は以前から「ACアダプターでDual Role Dataのフラグが立っているのはおかしい」ということを度々言ってきていますが、図らずもそれが証明された形であり、BelkinやRazerのACアダプターはDual Role Dataのフラグが立っていてData Role Swapが実行されてしまったため、それが原因でRedmi K20 Proの充電が遅くなったり充電できなくなっています。
Razer RC30-021501で充電できなかった理由
「BelkinとRazerはどっちもQC4+ certifiedなのに、なんでRazerの方は充電すらできないんだろう」と思う人もいるかも知れないので、一応説明しておきます。
上にも書きましたが、スマートフォンとACアダプターが相互にXiaomi製か確認する動作は以下の流れで行われます。
- Data Role Swapを実行
- Discover Identify/SVIDsコマンドを使って相手がXiaomi製か相互に確認
- USB PD PPSでの充電が開始される
RazerのACアダプターを使用した場合、2でRedmi K20 ProがDiscover Identifyコマンドを送信し、RazerはNot_Supportedをレスポンスしています。しかしながらRedmi K20 Proは懲りずにまたDiscovery Identifyコマンドを送信し、Razerは再度Not_Supportedをレスポンスします。
私が検証した時には、このやり取りが3回繰り返された後、最終的にHard Resetが実行されていました。恐らくですが、Razer側がリセットを実行したのだと思われます。
リセット後は、Data Role Swap → Discover Identify → Not_Supported → Hard Resetという一連の流れが再び行われていました。これが永遠に続くせいで、RazerのACアダプターではRedmi K20 Proを充電することができていませんでした。
MIUI 11.0.2.0以前であればDiscover Identify/SVIDsコマンドを使って相手がXiaomi製か確認する動作が行われないため、RazerのACアダプターでも正常に充電することができます。
所感
QC4+ certifiedスマートフォンはRedmi K20 ProだけでなくRazer Phoneも持っていますが、Razer PhoneはどのAndroidバージョン (Android 7〜9) でも、どのACアダプターでも正常に充電できていました。このような意味不明な現象が起きたのはRedmi K20 Proだけです。
Xiaomiだけに限った話ではないですが、スマートフォンメーカー、特にOPPO, Xiaomi, Huawei, vivoなどの中国系メーカーは仕様の一部分だけを自分の都合の良いように “つまみ食い” 的に利用していることが多く、仕様に準拠するという意識が低いため、実装に関してあまり信用しないほうがいいでしょう。