🛠 Horodatage industriel : PTP IEEE 1588 sur le PHY Ethernet du CM4
Objectifs
Particularité unique dans la gamme Pi : le CM4 embarque un PHY Ethernet Gigabit compatible IEEE 1588 (PTP) sur le module — pensé pour la synchronisation temps réel industrielle (les cartes phares utilisent des PHY discrets sans cette revendication). Ce tuto met en place un domaine PTP à deux nœuds avec linuxptp : un grandmaster, un esclave, et mesure l'offset résiduel en microsecondes.
Matériel
- 2 × CM4 (avec Ethernet, donc pas un CM4S) sur IO Board, sous Raspberry Pi OS 64 bits
- 1 câble Ethernet droit entre les deux ports RJ45 (topologie directe : un switch non transparent dégrade fortement la précision)
- Réseau de contrôle séparé (Wi-Fi ou second port) pour la configuration SSH
sudo apt install -y linuxptpsur les deux nœuds
Code complet
# --- Nœud A : grandmaster ---
sudo tee /etc/linuxptp/master.conf >/dev/null <<'EOF'
[global]
slaveOnly 0
networkTransportAddress eth0:500
summaryRatio -1
syncInterval 0
EOF
sudo ptp4l -f /etc/linuxptp/master.conf -m &
# --- Nœud B : esclave ---
sudo tee /etc/linuxptp/slave.conf >/dev/null <<'EOF'
[global]
slaveOnly 1
networkTransportAddress eth0:500
EOF
sudo ptp4l -f /etc/linuxptp/slave.conf -m &
# Ajuste CLOCK_REALTIME depuis la hardware clock de eth0
sudo phc2sys -s eth0 -c CLOCK_REALTIME -O 0 -m &
# --- Sur l'esclave : interroger l'état de synchronisation ---
sudo pmc -u -b eth0 'GET TIME_STATUS_NP' | grep -E 'master_offset|gmIdentity'
Vérification attendue
Dans la sortie de ptp4l -m côté esclave, les lignes master offset convergent vers des valeurs de l'ordre de la microseconde en topologie directe ; pmc 'GET TIME_STATUS_NP' affiche un master_offset stable et l'identité du grandmaster ; phc2sys ne signale plus de saut. Les deux date aux deux extrémités concordent à la milliseconde près.
Erreurs fréquentes
- Passer par un switch domestique : sans support transparent PTP, l'asymétrie de traversée fait plafonner l'offset à la centaine de microsecondes ou plus.
- Vouloir faire du PTP sur Wi-Fi : le média sans-fil (CYW43455) n'offre pas la stabilité des horodatages ; seul le PHY filaire est concerné par la compatibilité 1588.
- Oublier
phc2sys: PTP synchronise la hardware clock de l'interface, pas CLOCK_REALTIME ; sans ce démon,datene bouge pas. - Conflit avec systemd-timesyncd/NTP : désactiver
sudo timedatectl set-ntp falsesur l'esclave, sinon NTP « corrige » en permanence l'offset PTP.
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
- Ajouter une RTC au CM4 (PCF8523 sur I2C1 via dt-blob)
- Son sur CM4 : DAC I2S/PCM (PCM5102) sans prise jack
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash