🛠 Horodatage industriel : PTP IEEE 1588 sur le PHY Ethernet du CM4
Objetivos
Una particularidad única en la gama Pi: el CM4 incorpora un PHY Ethernet Gigabit compatible con IEEE 1588 (PTP) en el módulo — pensado para la sincronización de tiempo real industrial (las tarjetas insignia utilizan PHYs discretos sin esta característica). Este tutorial configura un dominio PTP de dos nodos con linuxptp: un grandmaster, un esclavo, y mide la desviación residual en microsegundos.
Material
- 2 × CM4 (con Ethernet, por lo tanto no un CM4S) en una IO Board, bajo Raspberry Pi OS de 64 bits
- 1 cable Ethernet directo entre los dos puertos RJ45 (topología directa: un switch no transparente degrada fuertemente la precisión)
- Red de control separada (Wi-Fi o segundo puerto) para la configuración SSH
sudo apt install -y linuxptpen ambos nodos
Código completo
# --- 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'
Verificación esperada
En la salida de ptp4l -m en el lado del esclavo, las líneas master offset convergen hacia valores del orden de la microsegunda en topología directa; pmc 'GET TIME_STATUS_NP' muestra un master_offset estable y la identidad del grandmaster; phc2sys ya no informa de saltos. Los dos comandos date en ambos extremos coinciden con una precisión de milisegundos.
Errores frecuentes
- Pasar por un switch doméstico: sin soporte PTP transparente, la asimetría de tránsito hace que la desviación se estanque en el orden de las centenas de microsegundos o más.
- Intentar usar PTP sobre Wi-Fi: el medio inalámbrico (CYW43455) no ofrece la estabilidad de los registros de tiempo (timestamps); solo el PHY cableado es compatible con 1588.
- Olvidar
phc2sys: PTP sincroniza el reloj de hardware (hardware clock) de la interfaz, no CLOCK_REALTIME; sin este demonio,dateno cambia. - Conflicto con systemd-timesyncd/NTP: desactivar
sudo timedatectl set-ntp falseen el esclavo, de lo contrario NTP «corrige» permanentemente la desviación PTP.
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
- Ajouter une RTC au CM4 (PCF8523 sur I2C1 via dt-blob)
- Son sur CM4 : DAC I2S/PCM (PCM5102) sans prise jack
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash