🛠 Ajouter une RTC au CM4 (PCF8523 sur I2C1 via dt-blob)

Raspberry Pi Compute Module 4 (CM4, 2020) — Fiche carte · intermediaire · Schéma : IMG-compute-module-4-intermediaire-2-rtc-i2c-dt-blob-cm4.svg — CM4 sur IO Board ; sur l'empreinte HAT 40 broches, un module RTC PCF8523 avec pile bouton est branché sur SDA1/SCL1 (GPIO44/45) ; un porte-pile est aussi dessiné sur le connecteur RTC dédié de l'IO Board.

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

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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels