車内のワイヤレス充電パッドでだけ充電が極端に遅いとき、原因がスマホの設定ではなく発熱だった事例を adb で実測した記録。対象: Galaxy S25+ (SM-S936N, Android 16 / One UI 8.5) + Audi A5 純正ワイヤレス充電パッド + ワイヤレス Android Auto の同時使用。
要点 — スマホの設定に間違いはなかった。代わりにスマホが 38°C あたりから自分で充電電流を削る。
机の上、有線、エアコンの効いた室内でも、バッテリーが 38.5°C に達した時点で入力上限が 1500 → 1000 mA、充電上限が 3456 → 1800 mA に削られた。温度が下がれば元に戻る。車内はこの温度を常に超える — ワイヤレス AA が Wi-Fi を出し続け、ワイヤレス充電はコイルで熱を出し、ダッシュボードのパッドには風が通らない。
以下の診断コマンドはすべて読み取り専用。端末の設定を変更しない。
「ワイヤレス充電が遅い」は 2 つが重なった結果かもしれない。1 つはパッドと何 W で交渉するか、もう 1 つは交渉した電力をスマホが熱でどれだけ削るかだ。前者はパッド側の問題、後者はスマホ側の問題。区別するには別々に測る必要がある。
この事例で確実に掴めたのは後者。前者はまだ掴めていない(後述の「まだ分かっていないこと」参照)。
方向を決めた観察が 1 つある。自宅・オフィスのワイヤレス充電器では同じスマホが正常な速度で充電される。 同じスマホ、同じワイヤレス方式で車だけ遅いなら、差はスマホの設定ではなく熱か交渉電力にある。
机 / 有線(Mac USB)/ エアコン室内 / バッテリー 98%。カーネルが 10 秒ごとに出す !@new_battery_dump ログを解析した。
| 時刻 | 入力上限 | 充電上限 | バッテリー温度 | 表面(SKIN)温度 | 何が起きたか |
|---|---|---|---|---|---|
| 09:56:52 | 1500 | 3456 | 38.1 | 37.3 | 基準 |
| 09:57:02 | 1500 | 1800 | 38.3 | 39.7 | 表面が 38°C を超えて充電上限が半分以下に |
| 09:57:12 | 1200 | 1800 | 38.5 | 39.3 | 入力上限も削られる |
| 09:59:14 | 1000 | 2000 | 38.1 | 37.8 | 入力上限が累計 33% 減 |
| 10:03:38 | 1000 | 3456 | 37.7 | 36.8 | 温度が下がって充電上限が復帰 |
| 10:03:48 | 1500 | 3456 | 37.6 | 36.7 | 入力上限も復帰 |
まとめるとこうなる。
この値はスマホが持っている熱しきい値と一致する。
adb shell dumpsys thermalservice
SKIN mHotThrottlingThresholds = [38.0, 40.0, 42.0, 45.0, 47.0, 60.0, 90.0]
BAT mHotThrottlingThresholds = [NaN, NaN, NaN, NaN, NaN, 55.0, 85.0]
表面温度の 1 段目が 38.0°C。スマホの表面としてはかなり低い値で、ここで既に充電が削られ始める。
調査中に 4 分間のワイヤレス充電区間が偶然捕まった。dumpsys battery のイベントリングバッファに残っていた記録だ。
| 時刻 | 電流 | 温度 | misc_event |
|---|---|---|---|
| 09:45:50 | 約 1.05 A | 37.6 | 0x10000 |
| 09:45:51 | 約 1.23 A | 37.7 | 0x10040 |
| 09:45:52 | 約 1.24 A | 37.8 | 0x10040 |
| 09:46:02 | 約 0.62 A | 38.6 | 0x10040 |
12 秒で電流がちょうど半分になり、温度上昇とぴったり噛み合った(37.8 → 38.6°C、1.24 → 0.62 A)。有線で見た 38°C の境目がワイヤレスでも同じように働くということだ。車内では開始温度が既に高いので、この下降がもっと速く、もっと深く起きる。
もう 1 つ。misc_event の 0x40 ビットがワイヤレス充電中だけ立つ。 有線区間では一度も出なかった。Samsung の sec_battery ドライバのワイヤレス専用ビットで、異物検知(FOD)やコイル検知の断絶系に見えるが確定できていない — カーネルヘッダが見られず /sys/class/power_supply は権限で塞がれている。
解釈の注意: この区間はバッテリー 99~100% だった。満充電付近では電流が元々低いので、絶対値(1.2 A ≈ 5 W)を見て「ワイヤレスが 5W で交渉された」と判断してはいけない。 ただし 12 秒での半減は残量変化では説明できず、温度とだけ噛み合っている。
車内には 38°C を超える条件が全部揃っている。
| 要因 | 効果 |
|---|---|
| ワイヤレス Android Auto | Wi-Fi Direct 5GHz で画面を出し続ける。AP とモデムが休まない。机の上でも AP 49.7°C / PA 49.1°C が出る |
| ワイヤレス充電そのもの | コイルで熱が出る。効率が有線(約 95%)より低く 70~80% 程度で、残りが熱になる |
| 7 月の車内 + 風が通らないダッシュボードパッド | 熱の逃げ道がない |
3 つが重なると 38°C は発進直後に超え、その後はずっと最低段に留まる。
ここにパッドの交渉電力まで低いと状況が悪くなる。5W で交渉して熱で半分削られれば実質 2~3W だ。ワイヤレス AA を動かす消費がその水準なので、充電器に載せているのに残量が減ることが起きる。
「ワイヤレス充電が遅い」でよく疑う項目は全部正常だった。これを先に確認しないと熱の方に進めない。
adb shell dumpsys battery
| 確認項目 | 値 | 判定 |
|---|---|---|
| ワイヤレス急速充電の設定 | mWirelessFastChargingSettingsEnable: true |
オン |
| ワイヤレス急速充電のサポート | FEATURE_WIRELESS_FAST_CHARGER_CONTROL: true |
サポート |
| ワイヤレスバッテリー共有 | ps:false |
オフ — スマホが電力を出していない |
| バッテリー劣化度 | mSavedBatteryAsoc: 99、BSOH 100.00 |
良好(使用 1 年 5 ヶ月) |
| 学習容量 | 4700 mAh(設計値を維持) | 良好 |
| USB ポートの水分検知 | mIsHiccupState=false |
正常 |
ワイヤレスバッテリー共有がオンだと、スマホがパッドの上で逆に電力を出そうとして充電がほとんど進まない。最初に見るべき項目だが、ここではオフだった。
ケースは PC 素材 0.8 mm で金属がない。この厚さはワイヤレス充電の妨げにならない。
ワイヤレス経路で Audi パッドと実際に何 W で交渉するかは掴めていない。 発熱だけで全部説明できるのか、それとも最初から 5W で交渉される問題が重なっているのかは、まだ分かれていない。
dumpsys batteryはMax charging current: 0で値を埋めてくれないので、カーネルが出す!@new_battery_dumpを捕まえるのが唯一の経路だ。ところがそれが簡単ではない — 下記参照。
misc_event の 0x40 ビットが FOD(異物検知)なのかも未確定だ。FOD なら原因の構造が変わる。
ここがこの文書で最も再利用できる部分だ。
Samsung は logcat のリングバッファを 5 MiB でハード制限している。もっと欲しいと言っても拒否される。
$ adb logcat -b main -G 64M
MAX log buffer size is 5 MiB. So set it to 5 MiB
この端末はログが毎分約 1.5 MiB 積まれるので、バッファは 14 分ほどで上書きされる。 実際、調査開始時に残っていた最も古いバッテリーログは USB を挿した時刻のもので、その前の走行区間は既に消えていた。
同じ端末のワイヤレス AA 切断調査でも同じ上限にぶつかった。この 5 MiB 制限は、バッテリーであれ Wi-Fi であれ走行ログを捕まえようとするあらゆる試みに共通で掛かる。
BatteryDump タグだけ絞って端末内のファイルに直接書く。フィルタを通せば 10 秒に 1 行(約 200 B)なので、1 時間の走行で 72 KB にしかならない。バッファが上書きされる余地がない。
# 走行前(USB 接続状態で実行)
adb shell "setsid nohup logcat -v time -s BatteryDump:E \
-f /sdcard/wcharge.log -r 2048 -n 4 >/dev/null 2>&1 &"
# 生きているか確認
adb shell 'for p in $(pidof logcat); do \
grep -q BatteryDump /proc/$p/cmdline && echo $p; done'
setsid でシェルのセッションから切り離して init(PPID 1)に付け替えるので、USB を抜いても回り続ける。 再起動すると死ぬので、端末を再起動したらもう一度立ち上げる。
# 走行後 — まず正常終了させてバッファの残りをファイルに落とす
adb shell "kill -TERM $(adb shell pidof logcat)"
adb pull /sdcard/wcharge.log
# リングバッファと無関係に保存される情報も一緒に取る
adb shell dumpsys battery > battery.txt
logcat -fは 4 KB ブロック単位で flush する。つまり最後の 2~3 分はまだファイルに降りていない。 回収前にkill -TERMで正常終了させれば残りがファイルに落ちる。
罠が 1 つある。logcat の -t N はタグフィルタより先に適用される。
# ほぼ常に 0 行 — 「最後の 4 行のうち BatteryDump のもの」になってしまう
adb logcat -d -t 4 -s BatteryDump:E
# こうする — タグで先に絞ってから後ろで切る
adb logcat -d -v time -s BatteryDump:E | grep new_battery_dump | tail -4
リアルタイムで見るならストリーミングではなく上のコマンドを数秒ごとに繰り返す方がいい。adb logcat -s ... | while read でパイプを繋ぐと logcat が 4 KB ブロックバッファリングをするので、フィルタ済みログが 200 B ずつ出る状況では 200 秒以上何も流れてこない。
計測はバッテリー 50~70% の区間で行うこと。 90% 以上は定電圧区間で電流が元々低いため、遅い原因を切り分けられない。この調査はまさにその限界に引っかかった。
!@new_battery_dump のフィールド対応E/BatteryDump タグで 10 秒ごとに出る。カンマ区切り、awk 基準の 1-based。
4339,1081,1500,3456,98,372,352,392,372,0,363,386,0,Charging,NO_CHARGING,Normal,Good,PDIC,...
$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18
| インデックス | 意味 | どう確認したか |
|---|---|---|
$1 |
バッテリー電圧 (mV) | BSOHChargingDataCollector ログの voltage:4.339 と一致 |
$2 |
現在電流 (mA) | 同じログの current:1.084375 と一致 |
$3 |
入力電流上限 (mA) | 温度に応じて 1500→1000 の変動を観測 |
$4 |
充電電流上限 (mA) | 3456→1800 の変動を観測 |
$5 |
残量 (%) | soc:0.98 と一致 |
$6 |
バッテリー温度 (0.1°C) | temperature:37.2 = 372 一致 |
$7 |
USB 温度 | thermalservice の USB 35.2 = 352 一致 |
$8 |
充電 IC 温度 | — |
$11 |
表面(SKIN)温度(推定) | thermalservice の SKIN 36.2 ≈ 363 に近い |
$14 |
充電状態 | Charging / Full |
$18 |
ケーブルタイプ | 有線 PD で PDIC を確認。ワイヤレスの値は未確認 |
$24 |
current_event ビット |
有線 0x20008000、ワイヤレス 0x40000000 系 |
$25 |
misc_event ビット |
ワイヤレスのときだけ 0x40 が立つ |
$9・$11 は thermalservice の値と似た動きをするのを見て推定したもので、確定ではない。
| ワイヤレス区間での観測 | 結論 |
|---|---|
| 入力上限が最初から低く温度と無関係に一定 | パッドの交渉電力の限界 |
| 入力上限が最初は高く、温度上昇とともに段階的に下降 | 熱で削られている |
| 両方見える | 複合 |
misc_event の 0x40 が正常な充電器より立ち続ける |
FOD 系を疑う |
cable_type が正常な充電器と違う文字列 |
交渉プロトコルの差 |
同じ残量区間で自宅・オフィスの充電器を一度測っておけば比較がすぐつく。
効果が大きい順。
ケースを変える理由はない。金属のない 0.8 mm はワイヤレス充電の妨げにならない。
バッテリー保護モード(適応型、80% 上限)は主に就寝充電の時間帯に掛かる機能なので、走行中の低速の主因とは考えにくい。優先度は低い。
| 項目 | どう判定したか | この事例の結果 |
|---|---|---|
| ワイヤレス急速充電がオフ | mWirelessFastChargingSettingsEnable |
違う — オン |
| ワイヤレスバッテリー共有がオン | ps: フィールド |
違う — オフ |
| バッテリー劣化 | ASOC / BSOH | 違う — 99% / 100% |
| ケースの干渉 | 素材・厚さ | 違う — 金属なし 0.8 mm |
| 熱で電流が削られる | !@new_battery_dump の入力・充電上限の変動 |
実測で確認 — 38°C で入力 −33%、充電 −48% |
| パッドの交渉電力の限界 | ワイヤレス区間の入力上限 | 未確定 — バッファが上書きされて掴めず |
| FOD(異物検知) | misc_event の 0x40 ビット |
未確定 — ワイヤレスのときだけ立つが意味が不明 |
端末から抜いたログにはアカウント・端末識別子が混じることがある。共有する前に確認すること。