ฉันมีปัญหาในการซิงค์กับระบบ Linux โดยใช้ PTP
ติดตั้ง:
PCB สองตัวที่มีโมดูล BegleCore และ DP83640 PHY เชื่อมต่อกันผ่านอีเธอร์เน็ต บอร์ดหนึ่งควรทำหน้าที่เป็น PTP มาสเตอร์ และอีกบอร์ดหนึ่งเป็นทาส
เดเบียน 10, เคอร์เนล: 4.19.94
โหลดไดรเวอร์สำหรับ Phy แล้ว
ใช้ลินุกซ์ ptp 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
ขสมก
เนื้อหาของ configSlave.cfg:
[ทั่วโลก]
ลูกค้าเท่านั้น 1
ขสมก
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 s0 ความถี่ -261066 เส้นทางล่าช้า 15040
ptp4l[438762.074]: เลือกนาฬิกาหลักที่ดีที่สุด 304511.fffe.0ff048
ptp4l[438765.074]: การชดเชยหลัก 2426120697575 s1 ความถี่ -270698 เส้นทางล่าช้า 15156
ptp4l[438767.072]: การชดเชยหลัก 2426120678191 s0 ความถี่ -270698 เส้นทางล่าช้า 15156
ptp4l[438768.075]: การชดเชยหลัก 2426120668273 s1 ความถี่ -280618 เส้นทางล่าช้า 15830
ptp4l[438769.072]: การชดเชยหลัก 2426120658469 s0 ความถี่ -280618 เส้นทางล่าช้า 15830
ptp4l[438770.073]: การชดเชยหลัก 2426120648789 s0 ความถี่ -280618 เส้นทางล่าช้า 16022
ptp4l[438771.076]: การชดเชยหลัก 2426120639057 s1 ความถี่ -290350 เส้นทางล่าช้า 16022
...
ค่าชดเชยที่รายงานคือประมาณ 40 นาที ก่อนเรียกใช้ ptp4l ฉันได้ตั้งค่านาฬิกา PTP ใน PHY ด้วย testptp -s
ตามเวลาของระบบปัจจุบัน ดังนั้นนาฬิกา PTP จึงอยู่ห่างกันเพียงไม่กี่วินาที
แต่ละครั้งที่ ptp4l รายงาน "master offset s1 ... " มันจะย้อนเวลา PTP กลับไป 40 นาที (ตรวจสอบด้วย testptp -g
). แต่ค่าชดเชยที่รายงานจะเปลี่ยนไปประมาณ 10 us เท่านั้น
ฉันยังตรวจสอบทราฟฟิกเครือข่ายด้วย Wireshark และเห็นว่าข้อความติดตามผลจากต้นแบบมีการประทับเวลาที่ประมาณ 69 นาทีของเวลาที่นาฬิกา PTP ใน PHY ตั้งไว้
หลังจากเพิ่มผลลัพธ์การดีบักไปยัง ptp4l ฉันเห็นว่าในสลาฟนั้น การประทับเวลาที่แยกออกจาก cmsgs ที่ส่งคืนจากซ็อกเก็ตจะถูกชดเชยประมาณ -27 นาทีจากเวลาที่นาฬิกา PTP ของไคลเอ็นต์เป็นจริง
ความแตกต่างจากการประทับเวลาเท็จ (+69 นาที) ที่ส่งโดยมาสเตอร์และการประทับเวลาที่อ่านผิดพลาด (-27 นาที) โดยไคลเอ็นต์ส่งผลให้มีการชดเชย 40 นาทีระหว่างนาฬิกาหลักและนาฬิกาไคลเอนต์