У меня проблемы с синхронизацией с системами Linux с использованием PTP.
Настраивать:
Две печатные платы с модулем BegleCore и DP83640 PHY связаны друг с другом через Ethernet. Одна плата должна выступать в качестве ведущего PTP, а другая — в качестве ведомого.
Debian 10, ядро: 4.19.94
Драйвер для Phy загружен.
Использование linuxptp v3.1
В основной системе я запускаю команду:
sudo ptp4l -i eth0 -f linuxptp/configs/configMaster.cfg -m
В клиентской системе я запускаю:
sudo ptp4l -i eth0 -f linuxptp/configs/configslave.cfg -m
Содержимое configMaster.cfg:
[Глобальный]
серверТолько 1
BMCA ноуп
Содержимое configSlave.cfg:
[Глобальный]
clientOnly 1
BMCA ноуп
step_threshold 1
Это приводит к следующему выводу на подчиненном устройстве:
ptp4l[438753.396]: выбран /dev/ptp0 в качестве часов PTP
ptp4l[438753.409]: порт 1 (eth0): ИНИЦИАЛИЗАЦИЯ в ПОДЧИНЕННЫЙ на INIT_COMPLETE
ptp4l[438753.414]: порт 0 (/var/run/ptp4l): ИНИЦИАЛИЗАЦИЯ для ПРОСЛУШИВАНИЯ при INIT_COMPLETE
ptp4l[438753.418]: порт 0 (/var/run/ptp4lro): ИНИЦИАЛИЗАЦИЯ для ПРОСЛУШИВАНИЯ при INIT_COMPLETE
ptp4l[438754.075]: порт 1 (eth0): новый внешний мастер 304511.fffe.0ff048-1
ptp4l[438758.074]: выбраны лучшие главные часы 304511.fffe.0ff048
ptp4l[438762.072]: основное смещение 2426120726467 с0 частота -261066 задержка пути 15040
ptp4l[438762.074]: выбраны лучшие главные часы 304511.fffe.0ff048
ptp4l[438765.074]: основное смещение 2426120697575 частота с1 -270698 задержка пути 15156
ptp4l[438767.072]: основное смещение 2426120678191 с0 частота -270698 задержка пути 15156
ptp4l[438768.075]: основное смещение 2426120668273 частота с1 -280618 задержка пути 15830
ptp4l[438769.072]: основное смещение 2426120658469 с0 частота -280618 задержка пути 15830
ptp4l[438770.073]: основное смещение 2426120648789 с0 частота -280618 задержка пути 16022
ptp4l[438771.076]: основное смещение 2426120639057 частота с1 -290350 задержка пути 16022
...
Заявленное смещение составляет приблизительно 40 минут. Перед запуском ptp4l я установил часы PTP на физическом уровне с помощью testptp -s
к текущему системному времени. Таким образом, часы PTP фактически находились в пределах нескольких секунд друг от друга.
Каждый раз, когда ptp4l сообщает «главное смещение s1…», он переводит часы PTP назад на 40 минут (проверено с помощью testptp -g
). Тем не менее, сообщаемое смещение изменяется только примерно на 10 мкс.
Я также изучил сетевой трафик с помощью Wireshark и увидел, что последующие сообщения от мастера содержат метку времени, которая примерно на 69 минут меньше, чем часы PTP на физическом уровне.
После добавления выходных данных отладки в ptp4l я увидел, что на подчиненном устройстве временная метка, которую он извлекает из cmsgs, возвращенного из сокета, смещена примерно на -27 минут от того, что на самом деле представляют собой часы PTP клиента.
Разница между ложными временными метками (+69 минут), отправленными мастером, и ложно прочитанными временными метками (-27 минут) клиентом приводит к 40-минутному предполагаемому смещению между главными часами и часами клиента.