🛠 Gérer le bridage thermique à 80 °C d'un CM3+
Objectives
The RP-008163-DS datasheet §10 is explicit: "the BCM2837 quad ARM block can generate significant heat under load," and DVFS throttling kicks in at 80 °C on the chip sensor — 5 °C earlier than on the original CM3. This tutorial measures the module's actual behavior under load, then configures a more conservative software threshold (temp_soft_limit) for sealed enclosures, and validates the effectiveness of a heatsink.
Hardware
- CM3+ on CMIO3 (or custom board), known enclosure or ventilation
- Adhesive or clip-on heatsink for the BCM2837B0; thermal paste if using a closed enclosure
- Stable 5 V / 3.5 W minimum power supply to avoid confusing undervoltage with thermal issues
- The quad-core is capped at 1.2 GHz on the module: throttling drops below this, never above
Complete Code
# 1. Outillage de mesure
sudo apt install -y stress-ng
# 2. Test de charge : température + indicateur de bridage toutes les 2 s
stress-ng --cpu 4 --timeout 300s &
while sleep 2; do
printf '%s °C %s %s MHz\n' "$(vcgencmd measure_temp | cut -d= -f2)" "$(vcgencmd get_throttled)" "$(( $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq) / 1000 ))"
done
# 3. Abaisser le seuil logiciel à 70 °C (config.txt, après reboot)
sudo tee -a /boot/firmware/config.txt <<'EOF'
temp_soft_limit=70
EOF
sudo reboot
# 4. Rejouer le test avec le dissipateur posé, comparer la fréquence tenue
Expected Verification
Without a heatsink, the temperature exceeds 80 °C within minutes of running stress-ng on 4 cores, get_throttled raises the throttling bit (0x4/0x8), and the measured frequency drops below 1.2 GHz. With a heatsink, the frequency remains pinned at 1200 MHz. With temp_soft_limit=70, throttling kicks in earlier, but the module never exceeds 70-72 °C — a throughput/temperature trade-off for sealed enclosures.
Common Errors
- Confusing the two 80s: the components' operating range goes up to +80 °C ambient (eMMC/LPDDR2 limit), but die throttling occurs at 80 °C junction temperature — these are not the same measurement.
- Comparing with the CM3: the older model throttled at 85 °C; guides mentioning 85 °C do not apply to the CM3+ (datasheet threshold: 80 °C).
- Blaming temperature when
get_throttledshows 0x50000: bits 16+ indicate undervoltage, not thermal throttling — change the power supply before attaching heatsinks. - Attaching a heatsink to the metal shielding without thermal paste in an enclosure without airflow: the gain is marginal; plan for an air duct or a metal wall as a heatsink.
- Forcing the frequency above 1.2 GHz with force_64/overclock: the module is limited by its power supply, not just by thermal constraints — overclocking is not documented as supported.
- Neglecting eMMC temperature: beyond the nominal range, it is the storage chip that fails first, not the SoC.
Other tutorials for this board
Code examples for this board
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash