🛠 Surveiller température et bridage : le BCM2835 à l'épreuve
Objetivos
Establecer una monitorización continua del SoC: temperatura, frecuencia real y, sobre todo, el registro de estrangulamiento del firmware, que también señala las caídas de tensión. El BCM2835 del Model B+ funciona a 700 MHz y el firmware estrangula el rendimiento por encima de 85 °C o en caso de alimentación insuficiente; es necesario saber detectarlo antes de que se produzcan cortes.
Material
- Raspberry Pi Model B+ con Raspberry Pi OS legacy de 32 bits, conectado por Ethernet (tutorial de red)
- Fuente de alimentación de 5 V de calidad; disipadores o carcasa ventilada opcionales
- Carga de prueba: sysbench o un simple bucle de cálculo
Código completo
# Lecture ponctuelle
cat /sys/class/thermal/thermal_zone0/temp # milli-°C
vcgencmd measure_temp # °C format humain
vcgencmd measure_clock arm # fréquence courante (Hz)
vcgencmd get_throttled # 0x0 = rien à signaler
# Interprétation de get_throttled (masques) :
# bit0 sous-tension | bit3 bridage sous-température | bit5 bridage fréquence
# bit6 bridage sous-tension | bits 16-19 = événements passés depuis le boot
# Journal de surveillance toutes les 30 s, 24 h
timeout 86400 sh -c 'while :; do
echo "$(date -Is) $(cat /sys/class/thermal/thermal_zone0/temp) $(vcgencmd measure_clock arm | cut -d= -f2) $(vcgencmd get_throttled | cut -d= -f2)"
sleep 30
done' > /var/log/thermal.csv
# Charge de test dans un autre terminal
yes > /dev/null & # puis tuer : kill %1
Verificación esperada
En reposo, el sensor suele permanecer por debajo de 50 °C y get_throttled devuelve 0x0. Con «yes», la temperatura sube hacia el umbral de 85 °C y measure_clock puede bajar de 700 MHz, encendiéndose el bit de estrangulamiento. Un valor 0x50000 o 0x50005 denota una caída de tensión: el problema es la alimentación, no la refrigeración.
Errores frecuentes
- Creer que el CPU está defectuoso cuando get_throttled muestra un bit de caída de tensión: cambia primero el cable y el cargador micro-USB.
- Leer el registro una sola vez: los bits 16-19 se memorizan desde el arranque, por lo que es necesario vigilar su evolución en el tiempo.
- Hacer overclocking de un B+ a 1 GHz como si fuera un Pi 3: el ARM1176JZF-S no lo soporta; las ganancias son mínimas y la inestabilidad está garantizada.
- Olvidar que los 512 MB de RAM se comparten con la GPU: el estrangulamiento de memoria aparece antes que el estrangulamiento térmico en usos gráficos.
- Encajar la placa en una carcasa cerrada sin ventilación: la convección del diseño abierto deja de funcionar.
Otros tutoriales para esta placa
- Allumer une LED depuis la GPIO 17 avec libgpiod
- Lire un bouton et afficher les appuis dans la console
- Premier script Python : faire clignoter la LED
- Variation d'intensité d'une LED avec le PWM matériel (GPIO18)
- Interroger un capteur I2C (BME280) sur le bus du 40 broches
- Mettre le B+ en réseau par Ethernet et piloter en SSH
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython