🛠 Ajouter une RTC au CM4 (PCF8523 sur I2C1 via dt-blob)
Objectifs
Le module CM4 n'a ni RTC à pile ni horloge temps réel embarquée (contrairement à ce qu'on pourrait croire : la datasheet n'en liste aucune — c'est la carte porteuse qui en fournit une, l'IO Board ayant un connecteur RTC avec porte-pile). Ce tuto ajoute une RTC PCF8523 sur I2C1 en utilisant le workflow dt-blob du Peripheral Software Guide — la méthode officielle pour configurer les broches d'une carte porteuse personnalisée dès les premiers stades du boot — puis câble l'heure système à la RTC.
Matériel
- 1 × CM4 sur IO Board (ou carte porteuse perso avec RTC PCF8523 sur I2C1)
- 1 × module RTC PCF8523 (3,3 V) + pile bouton CR1220/CR2032 selon module
- Filage vers SDA1=GPIO44, SCL1=GPIO45 (sur l'empreinte HAT de l'IO Board), 3,3 V et GND
sudo apt install -y device-tree-compiler i2c-tools
Code complet
# 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
Vérification attendue
i2cdetect -y 1 affiche l'adresse 0x68 ; /dev/rtc0 existe ; après une coupure d'alimentation de 5 minutes, date redonne l'heure correcte sans NTP. dmesg | grep -i pcf8523 confirme la sonde du driver.
Erreurs fréquentes
fake-hwclockencore actif : il réécrit l'heure système au boot avec sa date figée et masque le bon fonctionnement de la RTC.- Mauvais bus : le PCF8523 de l'IO Board est sur I2C1 (GPIO44/45), pas sur I2C0/SDA0-GPIO0 ; oublier le dt-blob ou
i2c_bcm2835non activé laissei2cdetectvide. - Overlay mal orthographié (
pcf8523et nonds1307pour un PCF8523) : le driver ne sonde pas la bonne puce. - Pile absente ou contact inversé : l'heure repart à 2000 à chaque cold boot.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash