Registro medido con adb de un caso en el que la carga iba lenta solo en la base inalámbrica del coche, y el culpable era el calor, no un ajuste del móvil. Caso: Galaxy S25+ (SM-S936N, Android 16 / One UI 8.5) + base inalámbrica de fábrica del Audi A5 + Android Auto inalámbrico funcionando al mismo tiempo.
Lo importante — no había nada mal configurado en el móvil. El móvil recorta su propia corriente de carga a partir de unos 38 °C.
En un escritorio, por cable, en una sala con aire acondicionado, la batería llegó a 38,5 °C y el límite de entrada se recortó de 1500 a 1000 mA, y el de carga de 3456 a 1800 mA. Cuando baja la temperatura, todo vuelve. El habitáculo de un coche pasa esa temperatura constantemente: el AA inalámbrico mantiene la radio Wi-Fi ocupada, la carga inalámbrica genera calor en la bobina, y una base en el salpicadero no recibe aire.
Todos los comandos de diagnóstico de abajo son de solo lectura. Ninguno cambia un ajuste del dispositivo.
"La carga inalámbrica va lenta" puede ser dos cosas apiladas. Una es cuántos vatios acuerdan el móvil y la base. La otra es cuánto de eso recorta el móvil por el calor. Lo primero es un problema de la base; lo segundo, del móvil. Hay que medirlos por separado para distinguirlos.
Aquí quedó fijado el segundo. El primero sigue abierto (mira "Lo que aún no se sabe").
Una observación marcó la dirección. En los cargadores inalámbricos de casa y la oficina, el mismo móvil carga a velocidad normal. Mismo móvil, mismo método inalámbrico, lento solo en el coche: entonces la diferencia no está en un ajuste del móvil. Está en el calor o en la potencia negociada.
Escritorio / por cable (USB del Mac) / sala con aire acondicionado / batería al 98 %. Analizado a partir de la línea !@new_battery_dump que el kernel emite cada 10 segundos.
| Hora | Límite entrada | Límite carga | Temp. batería | Temp. superficie | Qué pasó |
|---|---|---|---|---|---|
| 09:56:52 | 1500 | 3456 | 38,1 | 37,3 | referencia |
| 09:57:02 | 1500 | 1800 | 38,3 | 39,7 | la superficie pasa 38 °C → el límite de carga cae a menos de la mitad |
| 09:57:12 | 1200 | 1800 | 38,5 | 39,3 | también se recorta el límite de entrada |
| 09:59:14 | 1000 | 2000 | 38,1 | 37,8 | el límite de entrada baja un 33 % en total |
| 10:03:38 | 1000 | 3456 | 37,7 | 36,8 | baja la temperatura → se restaura el límite de carga |
| 10:03:48 | 1500 | 3456 | 37,6 | 36,7 | se restaura el límite de entrada |
En resumen:
Esos números coinciden con los umbrales que lleva el propio móvil.
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]
El primer escalón de superficie es 38,0 °C. Es un valor bastante bajo para la superficie de un móvil, y ahí ya empieza a recortarse la carga.
Durante la investigación se capturó por casualidad una ventana de 4 minutos de carga inalámbrica, del búfer circular de eventos de dumpsys battery.
| Hora | Corriente | Temp. | misc_event |
|---|---|---|---|
| 09:45:50 | unos 1,05 A | 37,6 | 0x10000 |
| 09:45:51 | unos 1,23 A | 37,7 | 0x10040 |
| 09:45:52 | unos 1,24 A | 37,8 | 0x10040 |
| 09:46:02 | unos 0,62 A | 38,6 | 0x10040 |
En 12 segundos la corriente se partió por la mitad, justo al ritmo de la temperatura (37,8 → 38,6 °C; 1,24 → 0,62 A). La frontera de 38 °C que se vio por cable funciona igual sobre la bobina. En un coche la temperatura de partida ya es más alta, así que esta caída llega antes y va más abajo.
Otra cosa. El bit 0x40 de misc_event se activa solo durante la carga inalámbrica. No apareció ni una vez en las muestras por cable. Parece un bit exclusivo de la parte inalámbrica del driver sec_battery de Samsung — detección de objetos extraños (FOD) o un corte de detección de bobina — pero no está confirmado. No se pueden ver las cabeceras del kernel y /sys/class/power_supply está bloqueado por permisos.
Ojo con la lectura: aquí la batería estaba al 99~100 %. Cerca del máximo la corriente es baja de todos modos, así que no mires el valor absoluto (1,2 A ≈ 5 W) para concluir "lo inalámbrico negoció 5 W". Pero partirse por la mitad en 12 segundos no se explica por el nivel de carga: solo sigue a la temperatura.
El habitáculo tiene todo lo necesario para pasar de 38 °C.
| Factor | Efecto |
|---|---|
| Android Auto inalámbrico | Transmite la pantalla por Wi-Fi Direct 5 GHz sin parar. El AP y el módem no descansan. Incluso en un escritorio se ve AP 49,7 °C / PA 49,1 °C |
| La carga inalámbrica en sí | La bobina genera calor. El rendimiento ronda el 70~80 % frente a un 95 % por cable, y el resto se convierte en calor |
| Habitáculo en julio + base en el salpicadero sin ventilación | El calor no tiene por dónde salir |
Junta los tres y los 38 °C se pasan justo al arrancar. A partir de ahí se queda clavado en el escalón más bajo.
Si además la base negocia poca potencia, empeora. Negocia 5 W, pierde la mitad por calor, y te quedas en 2~3 W reales. Mover el AA inalámbrico consume más o menos eso, y así acabas perdiendo batería mientras está sobre el cargador.
Todo lo que se suele sospechar ante "la carga inalámbrica va lenta" salió correcto. Hay que descartar esto antes de pasar al calor.
adb shell dumpsys battery
| Elemento | Valor | Veredicto |
|---|---|---|
| Ajuste de carga inalámbrica rápida | mWirelessFastChargingSettingsEnable: true |
activado |
| Soporte de carga inalámbrica rápida | FEATURE_WIRELESS_FAST_CHARGER_CONTROL: true |
compatible |
| Compartir batería inalámbrica | ps:false |
desactivado — el móvil no está enviando energía |
| Desgaste de batería | mSavedBatteryAsoc: 99, BSOH 100.00 |
bien (17 meses de uso) |
| Capacidad aprendida | 4700 mAh (mantiene el valor de diseño) | bien |
| Detección de humedad en el puerto USB | mIsHiccupState=false |
normal |
Si "compartir batería inalámbrica" está activado, el móvil intenta enviar energía hacia fuera mientras está sobre la base y apenas carga. Es lo primero que hay que mirar. Aquí estaba desactivado.
La funda es de PC de 0,8 mm sin metal. Ese grosor no estorba a la carga inalámbrica.
No se ha capturado cuántos vatios acuerdan realmente el móvil y la base del Audi. Así que sigue abierto si el calor lo explica todo, o si debajo hay además un problema de negociación a 5 W.
dumpsys batteryinformaMax charging current: 0: no rellena el valor. Eso deja el!@new_battery_dumpdel kernel como única vía, y conseguirlo no es cómodo (ver abajo).
Tampoco está resuelto si el bit 0x40 de misc_event significa FOD. Si lo es, la forma de la causa cambia.
Esta es la parte más reutilizable del documento.
Samsung limita el búfer circular de logcat a 5 MiB. Pedir más se rechaza.
$ adb logcat -b main -G 64M
MAX log buffer size is 5 MiB. So set it to 5 MiB
Este móvil acumula unos 1,5 MiB de log por minuto, así que el búfer se sobrescribe en unos 14 minutos. De hecho, el log de batería más antiguo que quedaba al empezar la investigación era del momento de conectar el cable USB: el trayecto anterior ya había desaparecido.
La investigación de las desconexiones del AA inalámbrico en este mismo dispositivo chocó con el mismo tope. Este límite de 5 MiB bloquea cualquier intento de capturar un trayecto, tanto si buscas batería como Wi-Fi.
Filtra solo la etiqueta BatteryDump y escríbela a un archivo en el móvil. Tras el filtro es una línea cada 10 segundos (unos 200 B), así que una hora de trayecto son 72 KB. Nada puede sobrescribirlo.
# Antes del trayecto (ejecutar con el USB conectado)
adb shell "setsid nohup logcat -v time -s BatteryDump:E \
-f /sdcard/wcharge.log -r 2048 -n 4 >/dev/null 2>&1 &"
# Comprobar que sigue vivo
adb shell 'for p in $(pidof logcat); do \
grep -q BatteryDump /proc/$p/cmdline && echo $p; done'
setsid lo desengancha de la sesión del shell y lo reasigna a init (PPID 1), así que sobrevive a desconectar el cable. Un reinicio lo mata, así que vuelve a lanzarlo si has reiniciado el móvil.
# Después del trayecto — termínalo primero para que lo pendiente caiga al archivo
adb shell "kill -TERM $(adb shell pidof logcat)"
adb pull /sdcard/wcharge.log
# Coge también lo que sobrevive al margen del búfer circular
adb shell dumpsys battery > battery.txt
logcat -fhace flush en bloques de 4 KB. Es decir, los últimos 2~3 minutos todavía no están en el archivo. Enviarkill -TERMantes de recogerlo deja caer el resto al archivo.
Hay una trampa. El -t N de logcat se aplica antes del filtro de etiqueta.
# Casi siempre 0 líneas — se convierte en "cuáles de las últimas 4 líneas son BatteryDump"
adb logcat -d -t 4 -s BatteryDump:E
# Hazlo así — filtra por etiqueta primero y corta al final
adb logcat -d -v time -s BatteryDump:E | grep new_battery_dump | tail -4
Para verlo en vivo, repite ese comando cada pocos segundos en vez de usar streaming. Si lo canalizas con adb logcat -s ... | while read, logcat aplica búfer por bloques de 4 KB: con la salida filtrada llegando de 200 B en 200 B, no pasa nada durante más de 200 segundos.
Mide entre el 50 y el 70 % de batería. Por encima del 90 % estás en la fase de tensión constante, donde la corriente es baja de todos modos, y no puedes separar la causa. Esta investigación se topó justo con ese límite.
!@new_battery_dumpSe emite cada 10 segundos bajo la etiqueta E/BatteryDump. Separado por comas, base 1 para awk.
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
| Índice | Significado | Cómo se confirmó |
|---|---|---|
$1 |
tensión de batería (mV) | coincide con voltage:4.339 del log BSOHChargingDataCollector |
$2 |
corriente actual (mA) | coincide con current:1.084375 del mismo log |
$3 |
límite de corriente de entrada (mA) | se observó moviéndose de 1500 a 1000 con la temperatura |
$4 |
límite de corriente de carga (mA) | se observó moviéndose de 3456 a 1800 |
$5 |
nivel de carga (%) | coincide con soc:0.98 |
$6 |
temp. batería (0,1 °C) | temperature:37.2 = 372 |
$7 |
temp. USB | coincide con USB 35,2 = 352 de thermalservice |
$8 |
temp. del IC de carga | — |
$11 |
temp. de superficie (inferido) | cercano a SKIN 36,2 ≈ 363 de thermalservice |
$14 |
estado | Charging / Full |
$18 |
tipo de cable | PDIC confirmado en PD por cable. Valor inalámbrico desconocido |
$24 |
bits de current_event |
por cable 0x20008000, inalámbrico familia 0x40000000 |
$25 |
bits de misc_event |
0x40 se activa solo en inalámbrico |
$9 y $11 se infieren porque se mueven al ritmo de los valores de thermalservice; no están confirmados.
| Lo que veas en la ventana inalámbrica | Conclusión |
|---|---|
| Límite de entrada bajo desde el principio y plano pese a la temperatura | tope de potencia negociada de la base |
| Límite de entrada alto al principio y luego escalonado hacia abajo al subir la temperatura | el calor lo está recortando |
| Ambos | combinado |
0x40 en misc_event se mantiene más que en un cargador bueno |
sospecha de FOD |
cable_type distinto al de un cargador bueno |
diferencia en el protocolo de negociación |
Toma una medida en un cargador de casa o la oficina al mismo nivel de carga y la comparación sale enseguida.
De mayor a menor impacto.
No hay razón para cambiar la funda. 0,8 mm sin metal no estorba.
El modo de protección de batería (adaptativo, tope del 80 %) actúa sobre todo en las horas de carga nocturna, así que es poco probable que sea la causa principal de la carga lenta en un trayecto. Prioridad baja.
| Elemento | Cómo se juzgó | Resultado aquí |
|---|---|---|
| Carga inalámbrica rápida desactivada | mWirelessFastChargingSettingsEnable |
no — está activada |
| Compartir batería inalámbrica activado | campo ps: |
no — está desactivado |
| Desgaste de batería | ASOC / BSOH | no — 99 % / 100 % |
| Interferencia de la funda | material y grosor | no — 0,8 mm, sin metal |
| El calor recorta la corriente | movimiento de los límites en !@new_battery_dump |
medido — a 38 °C, entrada −33 %, carga −48 % |
| Tope de potencia negociada de la base | límite de entrada en la ventana inalámbrica | sin resolver — el búfer lo sobrescribió |
| FOD (detección de objetos extraños) | bit 0x40 de misc_event |
sin resolver — solo en inalámbrico, significado poco claro |
Los logs extraídos del dispositivo pueden llevar identificadores de cuenta y de dispositivo. Revísalos antes de compartir.