Am probleme cu sincronizarea cu sistemele Linux folosind PTP.
Înființat:
Două PCB-uri cu un modul BegleCore și un DP83640 PHY sunt conectate între ele prin Ethernet. O placă ar trebui să acționeze ca master PTP, cealaltă ca slave.
Debian 10, Kernel: 4.19.94
Driverul pentru Phy este încărcat.
Folosind linuxptp v3.1
Pe sistemul master rulez comanda:
sudo ptp4l -i eth0 -f linuxptp/configs/configMaster.cfg -m
Pe sistemul client rulez:
sudo ptp4l -i eth0 -f linuxptp/configs/configslave.cfg -m
Conținutul configMaster.cfg:
[global]
serverNumai 1
BMCA nu
Conținutul configSlave.cfg:
[global]
clientDoar 1
BMCA nu
step_threshold 1
Acest lucru are ca rezultat următoarea ieșire pe slave:
ptp4l[438753.396]: selectat /dev/ptp0 ca ceas PTP
ptp4l[438753.409]: portul 1 (eth0): INITIALIZING la SLAVE pe INIT_COMPLETE
ptp4l[438753.414]: portul 0 (/var/run/ptp4l): INITIALIZING la LISTENING pe INIT_COMPLETE
ptp4l[438753.418]: portul 0 (/var/run/ptp4lro): INITIALIZING la LISTENING pe INIT_COMPLETE
ptp4l[438754.075]: port 1 (eth0): nou master străin 304511.fffe.0ff048-1
ptp4l[438758.074]: selectat cel mai bun ceas principal 304511.fffe.0ff048
ptp4l[438762.072]: offset principal 2426120726467 s0 freq -261066 întârziere cale 15040
ptp4l[438762.074]: selectat cel mai bun ceas master 304511.fffe.0ff048
ptp4l[438765.074]: offset principal 2426120697575 s1 freq -270698 întârziere cale 15156
ptp4l[438767.072]: offset principal 2426120678191 s0 freq -270698 întârziere cale 15156
ptp4l[438768.075]: offset principal 2426120668273 s1 freq -280618 întârziere cale 15830
ptp4l[438769.072]: offset principal 2426120658469 s0 freq -280618 întârziere cale 15830
ptp4l[438770.073]: offset master 2426120648789 s0 freq -280618 întârziere cale 16022
ptp4l[438771.076]: offset principal 2426120639057 s1 freq -290350 întârziere cale 16022
...
Decalajul raportat este de aproximativ 40 min. Înainte de a rula ptp4l, am setat ceasurile PTP în PHY-uri cu testptp -s
la ora curentă a sistemului. Ceasurile PTP se aflau de fapt la câteva secunde unul de celălalt.
De fiecare dată când ptp4l raportează un „master offset s1...” face înapoi ceasul PTP cu 40 de minute (verificat cu testptp -g
). Cu toate acestea, compensarea raportată se modifică doar cu aproximativ 10 us.
De asemenea, m-am uitat în traficul de rețea cu Wireshark și am văzut că mesajele de urmărire de la master conțin un marcaj de timp care este cu aproximativ 69 de minute față de ceea ce este setat ceasul PTP din PHY.
După ce am adăugat ieșiri de depanare la ptp4l, am văzut că pe slave, marcajul de timp pe care îl extrage din cmsg-urile returnate de la socket este compensat cu aproximativ -27 min față de ceasul PTP al clientului.
Diferența dintre marcajele temporale false (+69 min) trimise de master și marcajele temporale citite fals (-27 min) de către client rezultă în 40 de minute de decalaj asumat între ceasul principal și ceasul clientului.