¿Cómo detectar por software una mala alimentación de la Raspberry PI?
Si una Raspberry PI detecta que su voltaje es inadecuado, mostrará el icono de un rayo amarillo en la esquina superior derecha de la pantalla. Si no tienes la Raspberry PI conectada a una pantalla, pero puedes ver la propia Raspberry Pi, observarás que esta señala una mala alimentación apagando o haciendo parpadear el LED rojo.
¿Cómo puedes saber si la Raspberry PI tiene problemas de alimentación cuando no tenemos acceso físico a ella?
Hay varias opciones:
Advertencia
La Raspberry PI es una plataforma en evolución, por lo que a medida que aparezcan modelos nuevos o actualizaciones del sistema operativo pueden surgir otros mecanismos y algunos de los que muestro aquí podrían dejar de funcionar.
-
El pseudofichero /sys/class/leds/led1/brightness nos indica el estado del LED rojo. Un 255 indica que el LED está encendido (buen voltaje) y un 0 indica que el LED está apagado (mal voltaje).
-
Pin 35: El pin 35 nos indica el estado del LED rojo de alimentación. Podemos saber si está encendido o apagado y, de forma indirecta, saber si la Raspberry PI está señalizando problemas de alimentación.
Para ello configuramos el pin 35 como entrada y leemos su valor. Un 1 significa que todo va bien y un 0 significa que se está detectando un voltaje inadecuado.
# echo 35 >/sys/class/gpio/export # echo in >/sys/class/gpio/gpio35/direction # cat /sys/class/gpio/gpio35/value 1
Advertencia
Estas medidas indican el estado en el instante actual. Si la calidad de la alimentación es marginal y solo falla, por ejemplo, en momentos de alta demanda, debemos tener la suerte de comprobar esas mediciones en el instante justo.
-
Comando vcgencmd get_throttled:
En estos momentos la mejor forma de verificar problemas de alimentación o temperatura en la Raspberry PI, si tenemos un Sistema Operativo actualizado, es el comando vcgencmd get_throttled:
# vcgencmd get_throttled throttled=0x0
Este comando muestra eventos en curso en este momento y qué eventos han ocurrido alguna vez desde el último reinicio. Es decir, una ventaja importante de este comando es que nos indica si han ocurrido eventos durante el funcionamiento del equipo, además de si está ocurriendo algo ahora mismo. Esta ventaja es importantísima.
La cifra devuelta está formada por bits con el siguiente significado:
0 Bajo voltaje [1] 1 Limitación de frecuencia en los ARM 2 En limitación ahora mismo [2] 3 En limitación de temperatura "suave" [3] 16 Ha ocurrido un evento de bajo voltaje [1] 17 Ha ocurrido un evento de limitación de frecuencia ARM 18 Ha ocurrido limitación [2] 19 Ha ocurrido un evento de temperatura "suave" [3] Los bits bajos nos indican los eventos en curso, y los bits altos nos indican qué eventos han ocurrido desde el reinicio de la Raspberry PI.
Nota
Podrían añadirse más bits en futuras revisiones del Sistema Operativo.
El comando se puede invocar con un parámetro adicional. Dicho parámetro pone esos bits a cero tras devolver el resultado. De esta forma podemos ver si ha ocurrido un evento desde un momento anterior, no desde el arranque de la Raspberry PI. Por ejemplo:
Desde el arranque de la máquina han ocurrido limitaciones y eventos de temperatura "suave": root@osmcpi:~# vcgencmd get_throttled throttled=0xd0000 Pero desde que ejecuto estos comandos, solo están ocurriendo eventos de temperatura "suave", sin limitación: root@osmcpi:~# vcgencmd get_throttled 0xf throttled=0x80008 root@osmcpi:~# vcgencmd get_throttled 0xf throttled=0x80000 root@osmcpi:~# vcgencmd get_throttled 0xf throttled=0x80000 Y sí, mi Raspberry está caliente: root@osmcpi:~# vcgencmd measure_temp temp=65.5'C
Esto está explicado en:
- Re: Raspbian Jessie linux 4.4.9 Severe Performance Degradation
- Node-red-contrib-vcgencmd : reset throttling statistics
[1] (1, 2) La Raspberry PI debe tener un voltaje de alimentación de, al menos, 4.63 voltios.
[2] (1, 2) Hay más motivos para que una Raspberry PI entre en limitación además de por temperatura o alimentación eléctrica inadecuada. Este bit refleja ese hecho.
[3] (1, 2) La temperatura a la que una Raspberry PI entra en limitación "suave" varía según el modelo y no son valores que estén bien documentados.
Algunos ejemplos mal documentados y recogidos de aquí y de allí (podrían no ser de fiar o depender de la versión del Sistema Operativo):
-
La Raspberry PI 3B+ limita la CPU a 1.2GHz (de un máximo de 1.4GHz) al llegar a 60°C.
Esto se puede cambiar añadiendo temp_soft_limit=70 en el fichero /boot/config.txt, a riesgo de inestabilidad.
Se pueden ver los valores en curso con:
# vcgencmd get_config int | grep temp
Para ver la temperatura actual del SoC de una Raspberry PI podemos ejecutar:
-
Pseudofichero /sys/devices/platform/soc/soc:firmware/get_throttled:
Las versiones modernas del Sistema Operativo tienen un fichero /sys/devices/platform/soc/soc:firmware/get_throttled que, aparentemente, devuelve algo similar a vcgencmd get_throttled, pero a mí no me funciona.
Bibliografía
- How Raspbian Detects Under Voltage
- Raspbian Jessie linux 4.4.9 Severe Performance Degradation
- Under-voltage warnings
- vcgencmd get_throttled returns 0xd0000 and 0x50000
- Monitoring Raspberry Pi Power and Thermal Issues
- Detect low voltage PWR_LOW_N
- Pi3+ throttling back at 60C instead of 70C with new Raspbian
- Frequency management and thermal control
- vcgencmd
- Seeking help understanding vcgencmd get_throttled
- Overclocking options in config.txt
- Node-red-contrib-vcgencmd : reset throttling statistics