차 안 무선 충전 패드에서만 충전이 유독 느릴 때, 폰 설정이 아니라 발열이 범인인 경우를 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를 계속 쏘고, 무선 충전은 코일에서 열이 나고, 대시보드 패드는 바람이 안 통한다.
아래 진단 명령은 전부 읽기 전용이다. 기기 설정을 바꾸지 않는다.
"무선 충전이 느리다"는 두 가지가 겹친 결과일 수 있다. 하나는 패드와 몇 W로 협상하느냐, 다른 하나는 협상한 전력을 폰이 열 때문에 얼마나 깎느냐다. 앞의 것은 패드 문제고 뒤의 것은 폰 문제다. 둘은 따로 측정해야 구분된다.
이 사례에서 확실하게 잡힌 건 뒤쪽이다. 앞쪽은 아직 못 잡았다(아래 "아직 모르는 것" 참고).
한 가지 중요한 관찰이 방향을 잡아줬다. 집·사무실 무선 충전기에서는 같은 폰이 정상 속도로 충전된다. 같은 폰, 같은 무선 방식인데 차에서만 느리다면, 차이는 폰 설정이 아니라 열이나 협상 전력에 있다.
책상 / 유선(맥 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 분기점이 무선에서도 똑같이 작동한다는 뜻이다. 차 안에서는 시작 온도가 이미 높으니 이 하강이 훨씬 빨리, 더 깊게 일어난다.
또 하나. misc_event의 0x40 비트가 무선 충전 중에만 켜진다. 유선 구간에서는 한 번도 안 나왔다. 삼성 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월 차 안 + 통풍 없는 대시보드 패드 | 열이 빠져나갈 길이 없다 |
셋이 겹치면 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라면 원인 구조가 달라진다.
여기가 이 문서에서 가장 재사용할 만한 부분이다.
삼성이 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으로 정상 종료시키면 남은 내용이 파일로 떨어진다.
한 가지 함정이 있다. 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 비트 |
미확정 — 무선일 때만 켜지나 의미 불명 |
기기에서 뽑은 로그에는 계정·기기 식별자가 섞일 수 있다. 공유하기 전에 확인하라.