(五)1588的代码迁移重点与1588的调试?ptpd?ptp4l?

三种情况

这里可以大致的分为以下的几种情况

  1. linux-桌面级
  2. 嵌入式linux
  3. 其他的,比如单片机等等

在第一和第二中,都是使用linux,这个就简单多了,可以直接下载ptpd或者是ptp4l的代码,直接安装或者是交叉编译,这个是几乎没有工作量的。

问题主要集中在3,也就是单片机的嵌入式的迁移。最开始的时候,我曾经设想,把ptpd或者是ptp4l迁移到单片机中,但是后面放弃了,是因为太麻烦了,从驱动层到应用层的依赖过多,本不想搭在这个上面多少时间的。

所以,我这边选择了一个ST公司改的一个PTP的工程。然后再加入自己的应用逻辑。

实现路径与编码(这里只是说ipv4-udp)

1.在你的嵌入式系统中,一定要有一个精度很高的守时的模组,一般可以在10ns左右的,这个是1588的基础,要不,你自己不会计时,那什么都没招。要配置两个接口,分别是setTime和getTime。

2. 你需要清楚,1588这个是一个协议,所以,你需要启动两个socket,用于事件接口和通用接口,打开多播,配置多播IP,端口号是319和320。做好回调函数,接入1588时间同步的状态机中。这个是别人写好的,你不需要有任何的操作。

(三)1588的事件接口(event interface)和通用接口(general interface),1588的报文格式?-CSDN博客

 3. 在接受数据之后,在应用层打上时间戳,这个对应的是T2,可以参考这个链接中的图。诸如此类的,T3的时间戳是在发送的时候打上的。这两个量是全局变量。

(四)1588的E2E模型,P2P模型?-CSDN博客

至此,很简单,你就拿到了所有的关键的时间信息,然后配合好内部的函数,就完成了时间的同步(先不管精度,你现在最起码可以同步时间了,就是这么简单)

现在写一下关于一般情况的调优(针对IPV4-UDP):

1. 一般而言,是强制设备为从机(话说回来了,要是做主机的话,就不会用ipv4-udp了)

2. 设定这两个线程的优先级最高,因为要尽可能的减少操作系统中其他任务的干扰。

(二)1588时钟的误差的来源,如何最直观的理解1588的各种机制?如何科学的解决这些时钟误差?-CSDN博客
3.在场景中,尽可能的避免复杂的网络,更不要有回环的网络

4. PID的调试。

最后(关于PHY-1588)

能不用IPV4-UDP就不用,最好是用PHY层的。《1588时钟的误差的来源,如何最直观的理解1588的各种机制?如何科学的解决这些时钟误差?》讲的很清楚,你要是用操作系统和协议栈,不论你的主频有多高,操作系统的节拍一般而言也就是1K-10K左右,稍微波动一下,0.1ms级别的时间就抖动没了,这个精度就没法保证了。

我为什么总是说IPV4-UDP呢,是因为我给一个老系统升级,这个PHY不支持1588。

简单的说一下PHY的工作原理,实际上也很简单,就是PHY认识这个1588的报文,当这个报文到达PHY的时候,PHY自己就会记录一个时间,这个时候你的操作系统和协议中是不知道的,后面他们收到数据之后,你通过你的应用层的代码去解析,哦,我收到了一个1588的报文,然后去读PHY的寄存器,这个寄存器就会给你收到这个数据的时间。

这里就替换了T2与T3的应用层的时间戳,这样的精度就可以有大幅度的提高。

若是没有做到PHY层的话,实际上PID是没有意义的。

至此,初级篇已经结束。

  • 22
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值