欢迎淘宝搜索飞灵科技,我司相关新产品陆续上线。

想学习IEEE 1588/802.1AS时钟同步技术?看完这篇文章,你就知道从哪里入手学习了。IEEE 1588/802.1AS首先它是IEEE制定的标准,虽然标准是不变的东西,而这两个标准应用于实际工程项目时,可能会碰到各种各样的芯片方案,

  • 不同芯片厂商在网络控制器上实现自家的1588硬件辅助
  • 不同的PHY芯片厂商直接在PHY上实现自家的1588硬件辅助
  • 或者直接在FPGA上实现1588

也可能碰到各种各样的PTP软件协议栈

  • 开源的有linuxptp,ptpd,AVnu的gptp等
  • 虽然协议是一样的,但软件协议栈里的servo算法,滤波算法可能又各不相同

这篇文章就告诉你该从何入手学习IEEE 1588/802.1AS时钟同步技术。操作系统以Linux,硬件设备以TSync时钟同步开发板为例。(https://flyelf-tech.gitee.io/docs/tsync/intro/)

1 系统框图

我们通过一个系统框图对1588软硬件系统进行整体的认识。这个系统框图是基于Linux操作系统的,纯FPGA的1588实现就不介绍了。

  • 硬件层:硬件层就是带有1588硬件辅助的网络控制器,由硬件PTP时钟向网络报文提供时间戳,时间戳的捕获是在MAC这一层。图里没有画PHY,类似地,如果使用PHY的1588功能的话,那硬件层就是PHY,由PHY上的PTP时钟向网络报文提供时间戳,时间戳的捕获是在PHY这一层。
  • 内核空间:Linux内核空间主要由两部分驱动来支持1588功能。其一是PTP时钟驱动,用于对硬件PTP时钟进行操作。其二是网络驱动,确切的说是网络驱动中的1588硬件时间戳的支持,用于捕获收发报文的硬件时间戳。当然,如果硬件层使用的是PHY的1588功能的话,内核空间对应的收发网络报文硬件时间戳的支持就在PHY驱动中。
  • 用户空间:PTP软件协议栈是用户空间的应用程序,它与内核驱动以及硬件的交互,是通过内核的用户空间API的实现的。对PTP时钟的操作是通过PHC (PTP Hardware Clock) API,对报文的收发以及硬件时间戳的使用是通过socket函数和SO_TIMESTAMPING选项。

2 IEEE标准学习

如果你学习的目的只是为了理解IEEE 1588/802.1AS标准,那就专心研读标准文档吧。能实际操作一下PTP设备的同步,动手配一配时钟类型,传输协议,P2P/E2E延迟机制等,看看主从时钟确定以及同步的数据,用tcpdump或者wireshark把同步过程中的报文抓下来,研究下报文格式和时序,就会对标准有更深入的理解。

3 PTP/gPTP软件协议栈学习

拿PTP/gPTP软件协议栈的源码来学习,这当然是要建立在你已经对IEEE 1588/802.1AS标准有一定学习和理解的基础之上,不然是什么也看不懂。和学习标准的建议一样,要实际操作一下PTP设备的同步,动手配一配时钟类型,传输协议,P2P/E2E延迟机制等,看看主从时钟确定以及同步的数据,用tcpdump或者wireshark把同步过程中的报文抓下来,研究下报文格式和时序。再结合代码学习,就没有那么难啦。一些开源的PTP软件:

  • linuxptp: http://linuxptp.sourceforge.net/
  • AVnu gptp: https://github.com/AVnu/gptp
  • ptpd2: https://sourceforge.net/projects/ptpd2/

如果你学习的目的也是为了写一个PTP软件,那Linux 1588用户空间的API一定要学习。这里直接贴上Linux 5.4源码文档的链接。

  • PHC API: https://elixir.bootlin.com/linux/v5.4/source/Documentation/driver-api/ptp.rst
  • Timestamping: https://elixir.bootlin.com/linux/v5.4/source/Documentation/networking/timestamping.txt

对这两部分API,Linux里同样也有测试工具验证。

  • testptp: https://elixir.bootlin.com/linux/v5.4/source/tools/testing/selftests/ptp/testptp.c
  • timestamping: https://elixir.bootlin.com/linux/v5.4/source/tools/testing/selftests/networking/timestamping/timestamping.c

4 Linux 1588驱动的学习

学习驱动当然离不开对硬件的理解。回到之前对内核空间部分的介绍,Linux内核空间主要由两部分驱动来支持1588功能。其一是PTP时钟驱动,用于对硬件PTP时钟进行操作。其二是网络驱动,确切的说是网络驱动中的1588硬件时间戳的支持,用于捕获收发报文的硬件时间戳。

4.1 PTP时钟驱动

PTP公共驱动代码在这里,

  • https://elixir.bootlin.com/linux/v5.4/source/drivers/ptp/ptp_clock.c

以TSync时钟同步开发板为例,PTP设备驱动是,

  • https://elixir.bootlin.com/linux/v5.4/source/drivers/net/ethernet/freescale/fec_ptp.c

4.2 网络驱动硬件时间戳的支持

显然内核中的UDP, IP层的协议代码完全没必要看,硬件时间戳的代码是直接嵌在MAC驱动中的,以TSync时钟同步开发板为例,直接看网络控制器的设备驱动,

  • https://elixir.bootlin.com/linux/v5.4/source/drivers/net/ethernet/freescale/fec_main.c

对发送来说,发出去的skb会有一个拷贝,通过skb_tstamp_tx(skb, &shhwtstamps)函数,时间戳信息会随着skb拷贝进入socket的错误队列,提供给应用层。

对接收来说,时间戳的信息放在接收skb的skb_hwtstamps(skb)位置,应用层就可以拿到了。

5 硬件原理学习

各种芯片厂商的1588硬件各不相同,所以硬件原理的学习只能是针对具体的硬件,研究硬件的参考手册。但通常都是会实现一个硬件时钟计数器,以纳秒计数,并且可以做频率的补偿以调整计数的快慢。这个计数器用来向网络控制器收发报文提供硬件时间戳。以TSync时钟同步开发板为例,其使用IMX6ULL处理器,1588硬件功能介绍可以参考IMX6ULLRM.pdf参考手册22.6.10 IEEE 1588 functions

6 结束语

本文主要为想学习IEEE 1588/802.1AS技术的人提供学习建议,欢迎讨论。

IEEE 1588/802.1AS标准、硬件,Linux软件学习建议相关推荐

  1. 尚硅谷Linux视频学习建议贴及linux全套视频,运维版本180G高质量视频教程免费下,linux教程

    纯视频版本: 链接:https://pan.baidu.com/s/12lJCAn9MFssFEyx8Dmu5Eg  提取码:5fr7 含源码版本: 链接:https://pan.baidu.com/ ...

  2. 如何学好linux,linux的学习建议

    学习linux 最关键两点:1.嵌入式是什么? 1.嵌入式需要哪些知识? 知道了这两点,好办!我就开始规划学习路线.计算机的基本理论不能丢,于是重点看组成原理,数据机构,操作系统.c++.同时论坛上了 ...

  3. 国内外9款常用3D建模软件,你知道几个?教你如何选择软件学习

    今天介绍国内外9款3D建模软件,不知大家知道几个呢. 3Dmax: 一款基于PC系统的三维动画渲染和制作软件,它强大的功能和灵活性是实现创造力的最佳选择.拥有许多理想的命令供制作者使用. MAYA:世 ...

  4. 无线射频专题《协议类,IEEE 802.11/802.11b/802.11a/802.11g/802.11n/802.11ac标准简介》

    IEEE 802.11 标准和格式 IEEE 802 是指处理局域网和城域网的一系列IEEE 标准.IEEE 802 家族标准由IEEE 802 局域网/ 广域网标准委员会(LMSC) 维护.各个工作 ...

  5. 【以太网硬件一】802.3xx标准怎么这么多?它们有什么关系?

    一.802.3标准是什么? 802.3标准的全称为:以"载波侦听多路复用/冲突检测"(CSMA/CD,Carrier Sense Multiple Access/Collision ...

  6. IEEE 802.1AS-2011 第八章 IEEE 802.1AS的概念和术语

    本文翻译自IEEE Standard for Local and metropolitan area networks-Timing and Synchronization for Time-Sens ...

  7. edup无线网卡驱动安装linux,802.11n无线网卡驱动-edup 802.11n驱动下载最新版-802.11n驱动西西软件下载...

    edup 802.11n驱动是一款支持大部分802.11n无线网卡的驱动,802.11n标准虽然在2009年才得到IEEE的正式批准,不过采用MIMO OFDM技术的厂商已经有很多,如果你的网卡是采用 ...

  8. IEEE 802.1标准简介

        IEEE 802.1简介 IEEE 802.1是一组协议的集合,如生成树协议.VLAN协议等.为了将各个协议区别开来,IEEE在制定某一个协议时,就在IEEE 802.1后面加上不同的小写字母 ...

  9. IEEE 802.3标准就是ISO 802.3标准

    IEEE是英文Institute of Electrical and Electronics Engineers的简称,其中文译名是电气和电子工程师协会.该协会的总部设在美国,主要开发数据通信标准及其 ...

最新文章

  1. 網絡問題flapping between port
  2. DDD:关于聚合的思考
  3. 很认真地聊一下 “选择比努力更重要”
  4. hdu3339 In Action(Dijkstra+01背包)
  5. Oracle FGA审计的使用
  6. ES6 的解构赋值前每次都创建一个对象吗?会加重 GC 的负担吗?
  7. FCKEditor报java.lang.NullPointerException
  8. CentOS+NodeJS环境
  9. 小游戏大天地 ——开发者的梦想
  10. Unity4.6版本下载
  11. duilib 添加自定义list一例
  12. 华为各系列交换机限速配置
  13. gimp 架构_GIMP 2.10正式发布,史无前例的改动
  14. 有没有开以修改服务器游戏数据,剑网3指尖江湖第二批服务器数据互通啦 来看看有没有你所在的大区...
  15. 注解处理器(Annoation Processor)
  16. 团队的英文翻译缩写_动漫团队名称-团队英文名称~~人数不限的、 最好是** – 手机爱问...
  17. 使用IDEA连接本地数据库
  18. Incorrect string value: ‘\\xB2\\xE9\\xD1\\xAF\\xCA\\xD3...‘ for column ‘name‘ at row 1
  19. 华为HGU改成SFU的方法
  20. H3C 不同版本登录认证配置

热门文章

  1. 作为数据分析师这8项关键技能将带来无限可能
  2. 美国打车应用Lyft抢先Uber上市 上市首日股价上涨8.74%
  3. 【读书笔记】ZipArchive 类整理
  4. plc的毕业设计冷门题目_基于plc的个毕业论文题目
  5. linux apache php loadmodule,解决windows下安装Apache+PHP出现LoadModule takes two
  6. Linux生成可执行文件
  7. 《软件工程导论》学习笔记·
  8. java p12证书验证_authentication - 使用.p12证书验证Selenium WebDriver(Java) - SO中文参考 - www.soinside.com...
  9. 元胞自动机交通模型案例2
  10. 前端面试 --数据结构与算法篇