0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

同一网络,同一瞬间!一起玩转1588!

先楫半导体HPMicro ? 2022-08-03 10:05 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在HPM6700/6400系列微控制器上,提供了2个以太网控制器。都可以支持IEEE1588-2002IEEE1588-2008标准。方便用户实现基于网络的精确时间同步。

本文提供了与HPM6700/6400系列微控制器基于网络的IEE1588的功能示例和使用指南。


IEEE1588简介

IEEE1588的全称是网络测量和控制系统的精密时钟同步协议标准(PTP – Precision Time Protocol)。目前为2个版本,分别为IEEE1588(v1)和IEEE1588(v2)。IEEE1588的目的是为了对全网设备时钟同步,这对于网络设备在控制和采集同步尤为重要。本节简单介绍IEEE1588的基础知识,详细的协议描述,请参考相关网站。

1588的同步原理

1588的原理是通过网络中的主设备对从设备发送特殊的报文并以此和从设备进行交互得出时间的偏离以进一步将设备时钟同步。如下图所示:

33458b70-0f88-11ed-9ade-dac502259ad0.png

端口在t1时刻发送同步报文,并在接下来的报文中发送t1点的时间,从端口在t2时间点收到同步报文并在t3时刻发送响应给主端口,主端口在收到从端口的响应后再将t4时刻发送给从端口。


在这个过程中,得到网络延迟和时钟偏差。

Toffset=((t2 - t1) + (t4 – t3)) / 2

Tdelay=((t4 - t1) -(t3 – t2)) / 2

在整个网络拓扑中,所有的节点定期的进行时钟同步,最终达到纳秒(IEEE1588-2008)或者微秒级(IEEE1588-2002)的精度。


HPM67/64系列1588功能介绍

IEEE1588本身是基于以太网提出的,因此其详细使用以及寄存器描述请参见HPM6700/6400用户手册的第60章

使用1588功能,首先要为该功能赋予时钟源。因为HPM6700/6400有2个以太网控制器,ENET0, ENET1。因此,控制器为1588设立了2个时钟源,分别为:

CLOCK_TOP_PTP0;

CLOCK_TOP_PTP1。


HPM6700/6400微控制器上,CLOCK_TOP_PTP0/1分别作为ENET0/1的1588时间戳计数器的运行时钟,其默认频率选择是使用PLL1CLK1输出, PLL1CLK1的默认输出为400MHz,默认时钟分频系数为4,因此CLOCK_TOP_PTP0/1的默认频率为100MHz。用户可以根据自己的需要设置成不同的频率作为输入。

clock_set_source_divider(clock_ptp0, clk_src_pll1_clk1, 4);clock_set_source_divider(clock_ptp1, clk_src_pll1_clk1, 4);

用户需要设置以下几个寄存器来实现相应的1588功能

TS_CTRL 时间戳控制寄存器

SUB_SEC_INCR 次-秒增量寄存器

SYST_SEC 系统时间 – 秒寄存器

SYST_NSEC 系统时间 – 纳秒寄存器

SYST_SEC_UPD 系统时间 – 秒更新寄存器

SYST_NSEC_UPD 系统时间 – 纳秒更新寄存器

TS_ADDEND 时间戳加法寄存器

当确定好输入频率后,用户需要在SUB_SEC_INCR中填写增量值。它的填写主要依靠2个因素,一个是TS_CTRL中的第9位TSCTRLSSR,另一个因素是前面提到的输入频率。

TSCTRLSSR是计数方式的选择,当其置1时,SYS_NSEC纳秒寄存器到0x3B9AC9FF时翻转;当其置0时,SYS_NSEC纳秒寄存器到0x7FFFFFFF时翻转。SYS_NSEC每翻转一次代表时间上的1秒钟。因此,当TSCTRLSSR置1时,SYS_NSEC中的1代表1ns;当TSCTRLSSR置0时,SYS_NSEC中的1代表0.465ns。SUB_SEC_INCR.SSINC中的数代表着输入频率所对应的时间,它会根据SYS_NSEC中1个计数所代表的时间进行相应的折算。

例如,当输入频率为100MHz时,一个clock是10ns,当TSCTRLSSR置1时,则SUB_SEC_INCR.SSINC设为10(10/1);当TSCTRLSSR置0时,则SUB_SEC_INCR.SSINC设为21(10/0.465)

建议用户将TSCTRLSSR置1,这样理解和计算都更方便。


SYST_SEC和SYST_NSEC为MAC维护的时间戳。SYST_SEC为秒级时间戳,SYST_NSEC为纳秒级时间戳。其中SYS_NSEC会根据TSCTRLSSR的设置在不同的数据下翻转。当TSCTRLSSR置1时,它将会在0x3B9AC9FF时翻转,当TSCTRLSSR置0时,它将会在0x7FFFFFFF时翻转


SYST_SEC_UPD和SYST_NSEC_UPD为更新时间戳的寄存器,如果需要减少纳秒时间,需要将SYST_NSEC_UPD中的最高位置1,如果需要增加纳秒时间则需要将SYST_NSEC_UPD中的最高位置0。


假设时钟同步算法发现时钟偏慢,希望将累加的步长调整为10.1 ns,这时,可以保持SUB_SEC_INCR.SSINC为10,设置ADDEND = 0xFFFFFFFF * (0.1) = 0x19999999。此时,可以视为累加的等效步长为10.1 ns。

假设时钟同步算法发现时钟偏快,希望将累加的步长调整为9.9 ns,这时,需要设置SUB_SEC_INCR.SSINC为 9,设置ADDEND = 0xFFFFFFFF * (0.9) = 0xE6666666。此时,可以视为累加的等效步长为9.9 ns。


注意,以上所有的寄存器的写入都是需要通过设置TS_CTRL中相应的状态位为1,等待此位为0时,认为设置成功。


在先楫提供的SDK中,可以直接调用

../../hpm_sdk/drivers/src/hpm_enet_drv.c进行设置

void enet_init_ptp(ENET_Type *ptr, enet_ptp_config_t *config)void enet_set_ptp_timestamp(ENET_Type *ptr, enet_ptp_time_t *timestamp)

1588例程分析

在先楫发布的SDK中,可以找到1588的实现例程v1(即IEEE1588-2002)

..\..\hpm_sdk\samples\lwip\lwip_ptp\v1

其中包括master和slave, 分别对应主端口和从端口。在不改动任何设置的情况下,用户需要2块进行测试,一块作为主端口,另一块作为从端口。为了测试IEEE1588的时钟同步性能,我们采用了2块HPM6750EVK,分别烧写master和slave的程序。

需要注意一下2块板子的ip地址应该是不同的。默认的例程使用的是板子上的RMIIPHY,用户可以根据自身的需求更换成RGMII PHY进行测试。

1. 代码分析


初始化系统,首先初始化IO,以太网芯片以及设置1588的时钟。

board_init();board_init_enet_ptp_clock(ENET);board_init_enet_pins(ENET);enet_init(ENET);

在初始化以太网芯片成功后,初始化lwip,设置网络参数,ptp时钟

enet_ptp_init();lwip_init();netif_config();user_notification(&gnetif);ptpd_Init();

接受网络时钟同步数据包,并以此进行时钟校正。如此往复。

while (1) {ethernetif_input(&gnetif); ptpd_periodic_handle(localtime);}

2. 测试方法


因为1588的时钟精确同步功能需要在网络中实现,因此先楫用了2块HPM6750EVK通过对接的方式测试。在分别烧入了master和slave的程序后,通过网线直接连接板子上的RJ45(J10)端口。如图所示:

337a8c58-0f88-11ed-9ade-dac502259ad0.jpg

系统上电后,在从端口的串口中显示

(D 1651074120.060559130) state PTP_SLAVE(D 1651074121.919880830) addForeign: new record (0,1) 1 1 98bc9f:18(D 1651074121.923243890) event MASTER_CLOCK_CHANGED(D 1651074121.925549510) state PTP_UNCALIBRATED(D 1651074121.927681110) toState: Q = 0, R = 5(D 1651074123.919898550) updateOffset(D 1651074123.921597570) updateClock seconds(D 1651074134.003162180) setTime: resetting system clock to 1651074134s 3162050ns(D 1651074134.006781080) initClock(D 1651074134.008349500) one-way delay: 0s 0ns(D 1651074134.011270660) offset from master: -10s -79562820ns(D 1651074134.014279260) observed drift: 0(D 1651074135.999474620) updateOffset(D 1651074136.001174640) one-way delay: 0s 0ns(D 1651074136.004096190) offset from master: 0s 10170ns(D 1651074136.007017370) observed drift: 169(D 1651074137.999480800) updateOffset(D 1651074138.001180620) one-way delay: 0s 0ns(D 1651074138.004101330) offset from master: 0s 14370ns(D 1651074138.007022680) observed drift: 408

3. 测试结果

通过对结果的比对,我们将时间戳的偏移值进行比较,得到下图:


339c46d6-0f88-11ed-9ade-dac502259ad0.png

从图中可以看到,在同步之初,时间的偏差较大,但经过最初的快速调整后,时钟精确在±10us之内。这对于IEEE1588-2002来说,已经是非常好的效果。

总结

本文介绍了HPM6700/6400系列微控制器的以太网1588功能的使用和示例的演示。在IEEE1588-2002下,100MHz的网络测试中得到了很好的效果。对于1588-2008版本的测试,会在后续的文档中推出。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    114

    文章

    17251

    浏览量

    185409
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    POE防雷二合一网络浪涌保护器的行业应用方案

    数据传输完整性与直流供电安全。 二合一网络浪涌保护器:指同时对“网络信号线 + 直流/交流电源线”或“差模+共模”两类路径进行体化防护的装置。广义上也包括“单只设备内部集成数据线与PoE电源线保护”方案
    的头像 发表于 07-23 14:44 ?149次阅读
    POE防雷二合<b class='flag-5'>一网络</b>浪涌保护器的行业应用方案

    怎么将同一车间PLC设备划分到同一VLAN

    在某工厂网络中,管理人员需要将同一车间的自动化设备PLC划分到同一VLAN,确保只有该车间的设备能够相互访问,同时将这些设备接入交换实现与工厂MES系统的数据共享。但在网络改造时遇到困
    的头像 发表于 06-18 11:12 ?260次阅读
    怎么将<b class='flag-5'>同一</b>车间PLC设备划分到<b class='flag-5'>同一</b>VLAN

    为什么无法通过demo_feature_L2_bridge_vlan上的PFE转发VLAN标记的以太数据包?

    的 demo_feature_L2_bridge_vlan 演示,它基本上展示了以下内容: 1. 同一网络中 2 台设备之间的无标签通信(PC0_NOVLAN 和 PC1_NOVLAN) 2. 同一网络中 2
    发表于 03-25 08:05

    华为发布5G-A毫米波万兆网络

    ,黑龙江联通与华为携手合作,成功部署了基于毫米波和C-Band 3CC(三载波聚合)技术的5G-A万兆网络。这一网络通过毫米波与Sub-6GHz(低于6GHz的5G频段)的高低频协同组网,实现了前所未有的极速网络体验。 据了解,
    的头像 发表于 02-11 09:39 ?990次阅读

    AN-166:与Linduino一起飞行中更新

    电子发烧友网站提供《AN-166:与Linduino一起飞行中更新.pdf》资料免费下载
    发表于 01-12 10:09 ?0次下载
    AN-166:与Linduino<b class='flag-5'>一起</b>飞行中更新

    如何配置IPv6网络

    配置IPv6网络个涉及多个步骤的过程,包括规划、配置网络接口、设置路由协议、配置DNS以及测试和验证。 1. 规划IPv6网络 在配置IPv6
    的头像 发表于 10-29 17:35 ?2293次阅读

    黄色外壳的薄膜电容和安规X电容是同一种电容吗?

    黄色外壳薄膜电容与安规X电容外观虽然相似但不是同一种电容,薄膜电容采用塑料薄膜作介质,不需要安规认证;安规X电容用于抗干扰,需强制安规认证,获得安规认证,在选购时需分辨。
    的头像 发表于 10-28 17:27 ?984次阅读
    黄色外壳的薄膜电容和安规X电容是<b class='flag-5'>同一</b>种电容吗?

    黄色外壳的薄膜电容和安规X电容是同一种电容吗?

    黄色外壳薄膜电容与安规X电容外观虽然相似但不是同一种电容,薄膜电容采用塑料薄膜作介质,不需要安规认证;安规X电容用于抗干扰,需强制安规认证,获得安规认证,在选购时需分辨。
    的头像 发表于 10-28 17:24 ?831次阅读
    黄色外壳的薄膜电容和安规X电容是<b class='flag-5'>同一</b>种电容吗?

    LV和组态王上位机软件在同一电脑通过网线读写同一个PLC失败

    问题:LV和组态王上位机软件在同一电脑通过同一个网卡、同一根网线和IP读写同一个PLC失败 PLC型号:西门子S7-200 smart 现状:非标设备自带组态王上位机软件,因整条产线有
    发表于 10-18 08:26

    使用tlv320aic3101音频芯片时,发现在播放的一瞬间,会听到咔的声,为什么?怎么解决?

    我在使用tlv320aic3101音频芯片时,发现在播放的一瞬间,会听到咔的声。后面查找原因,发现是放大电路部分,有个电容,该电容在播放的一瞬间,产生了
    发表于 10-14 08:23

    大家好,请教个恒流源芯片并联使用接同一个LED的问题

    大家好,请教个问题,如果三路同款恒流源芯片都设定为1A的输出电流,三路并联,然后接同一个LED,那流过LED的实际电流是多少呢每路恒流源芯片的实际输出电流是多少呢假设是理想情况下。 如果两路同款
    发表于 10-12 09:39

    工业NAT网关实现不同网段IP转换成同一网

    的无缝通信,让不同网段IP的设备能够相互访问,物通博联提供基于工业NAT网关的解决方案,能够将不同网段的IP地址转换成同一网段的IP地址,从而简化网络管理,提升数据传输效率。 工业NAT网关能够实现对 PLC、HMI、CNC、DCS、MES等
    的头像 发表于 09-23 15:24 ?812次阅读
    工业NAT网关实现不同网段IP转换成<b class='flag-5'>同一网</b>段

    用LM2903做了个窗口比较器电路,比较器输出个变化的电平导致LED闪烁怎么解决?

    我用LM2903做了个窗口比较器电路,在8.6V 至8.9V输入时,比较器输出个变化的电平,导致我后面LED 闪烁,请问有什么办法可以解决?还有就是在电压低于窗口下限电压时,接电源的一瞬间
    发表于 09-18 08:44

    模拟地和电源地能接在一起

    模拟地和电源地是否能接在一起,取决于电子系统的具体要求和设计。在电子系统中,地(Ground)是个共同的参考点,用于构建电位参考平面。电源地是所有电源网络的参考点,用于确保电源的稳定性和系统的正常工作。模拟地则与模拟电路相关,
    的头像 发表于 09-15 11:43 ?3611次阅读

    多个网站放在同一台服务器ip有什么影响?

    将多个网站放在同一台服务器上,使用同一个IP地址,可能会有以下影响: 1、资源共享:多个网站共享同一台服务器的资源,如CPU、内存、存储空间和带宽。如果其中个网站流量或资源消耗突然增
    的头像 发表于 09-12 11:15 ?1426次阅读