🛠 Ajouter une RTC au CM4 (PCF8523 sur I2C1 via dt-blob)
Objetivos
El módulo CM4 no tiene ni RTC con pila ni reloj de tiempo real integrado (a diferencia de lo que se podría pensar: la hoja de datos no lista ninguno — es la placa portadora la que proporciona una, ya que la IO Board tiene un conector RTC con soporte para pila). Este tutorial añade una RTC PCF8523 sobre I2C1 utilizando el flujo de trabajo dt-blob de la Guía de Software de Periféricos — el método oficial para configurar los pines de una placa portadora personalizada desde las primeras etapas del arranque — y luego sincroniza la hora del sistema con la RTC.
Hardware
- 1 × CM4 en la IO Board (o placa portadora propia con RTC PCF8523 en I2C1)
- 1 × módulo RTC PCF8523 (3,3 V) + pila de botón CR1220/CR2032 según el módulo
- Cableado hacia SDA1=GPIO44, SCL1=GPIO45 (en la huella HAT de la IO Board), 3,3 V y GND
sudo apt install -y device-tree-compiler i2c-tools
Código completo
# 1) Exposer I2C1 sur GPIO44/45 via dt-blob (méthode Peripheral Software Guide)
cat > minimal-cm-dt-blob.dts <<'EOF'
/dts-v1/; /plugin/;
/ {
pin-config {
pin@p44 { function = "i2c1"; termination = "pull_up"; }; // SDA1
pin@p45 { function = "i2c1"; termination = "pull_up"; }; // SCL1
};
};
EOF
sudo dtc -I dts -O dtb -o /boot/firmware/dt-blob.bin minimal-cm-dt-blob.dts
# 2) Activer le driver RTC et purger la fausse horloge
echo 'dtoverlay=i2c-rtc,pcf8523' | sudo tee -a /boot/firmware/config.txt
sudo apt remove -y fake-hwclock || true
sudo systemctl disable -q fake-hwclock.service 2>/dev/null || true
sudo reboot
# 3) Après reboot : vérifier bus, RTC et heure
sudo i2cdetect -y 1 # 68 = PCF8523 présent
sudo hwclock -s # RTC -> heure système
date && timedatectl | head -3
sudo hwclock -r -f /dev/rtc0 # lit l'heure de la RTC
Verificación esperada
i2cdetect -y 1 muestra la dirección 0x68; /dev/rtc0 existe; tras un corte de alimentación de 5 minutos, date devuelve la hora correcta sin NTP. dmesg | grep -i pcf8523 confirma la detección del controlador.
Errores frecuentes
fake-hwclockaún activo: reescribe la hora del sistema al arrancar con su fecha fija y oculta el correcto funcionamiento de la RTC.- Bus incorrecto: la PCF8523 de la IO Board está en I2C1 (GPIO44/45), no en I2C0/SDA0-GPIO0; olvidar el dt-blob o no activar
i2c_bcm2835dejai2cdetectvacío. - Overlay mal escrito (
pcf8523y nods1307para una PCF8523): el controlador no detecta el chip correcto. - Pila ausente o contacto invertido: la hora vuelve a 2000 en cada arranque en frío.
Otros tutoriales para esta placa
- Premier démarrage d'un CM4 Lite depuis la microSD de l'IO Board
- GPIO du CM4 : comprendre les banks 1,8 V / 3,3 V avant de câbler
- Basculer le Wi-Fi du CM4 sur l'antenne externe U.FL (dtparam=ant2)
- Bootloader EEPROM du CM4 : maîtriser BOOT_ORDER via usbboot
- Son sur CM4 : DAC I2S/PCM (PCM5102) sans prise jack
- Horodatage industriel : PTP IEEE 1588 sur le PHY Ethernet du CM4
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash