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

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

3天内不再提示

基于NXP iMX8系列处理器的TSN网络时钟同步测试

要长高 来源:eetop 作者:Toradex秦海 2023-12-01 16:02 次阅读

简介

IEEE 802.1 TSN(Time-Sensitive Networking)工作组定义了一个基于802.x网络架构上提供同步时间低延迟服务能力的协议,其前身为IEEE AVB(Audio Video Bridgin)工作组,后于2012年重命名为TSN工作组以便于将相关协议标准更广泛推广;AVB/TSN包含多种具体协议标准(见如下表格),其中最重要的协议标准之一就是IEEE 802.1AS时钟同步协议标准,它基于IEEE 1588协议进行精简和修改,也称为gPTP协议。

1678956789487540.png

PTP协议是一种精确的时间同步协议,IEEE 1588标准为时钟分配定义了一个主从式架构,由一个或多个网段及一个或多个时钟组成。在局域网中能将时间同步精度控制在亚微秒级。PTP协议对时间戳在MAC层进行加盖, 消除了数据包在网络协议栈中的处理时间延迟; 对时间戳的记录和发送进行确认, 得到数据包准确的发送和接收时间。 相比于其它时间同步协议(如NTP),PTP协议的同步精度是最高的。

本文就基于NXP最新的i.MX8系列ARM处理器平台进行TSN时钟同步的简单测试。

本文所演示的平台来自于ToradexVerdin iMX8M Plus和ApalisiMX8嵌入式平台,这两个平台是基于近年发布的NXP iMX8系列ARM处理器,核心为Cortex-A53/A72。

2).硬件准备

a).Verdin iMX8MP ARM核心版配合Dahlia Carrier Board载板,并连接调试串口,后续测试中作为TSN网络中的Master Clock节点平台。Verdin iMX8MP核心板板载PHY芯片的一路千兆网络是完整支持包括TSN/AVB/IEEE1588等相关协议标准的网口,另外一路RGMII接口的MAC则支持AVB/IEEE1588。

b).Apalis iMX8 ARM核心版配合Apalis Eva Board载板,并连接调试串口,后续测试中作为TSN网络中的Slave Clock节点平台。Apalis iMX8核心板提供的两路千兆网络都是只支持AVB/IEEE1588,而不支持完整的TSN,不过由于本文仅测试时钟同步因此也可以正常和Verdin iMX8MP搭配使用。

c).两个平台的千兆网口通过一根网线直通连接。

3).软件准备

a).如下图,Toradex Verdin iMXMP模块标准Ycoto Linux BSP中已经包含了测试IEEE 802.1AS时钟同步的Linuxptp工具,可以参考这里说明分别在Verdin iMX8MP模块以及Apalis iMX8模块上面安装目前最新的LTS 5.7.2版本。

1678956790476559.png

b).如果需要在本文基础上进一步测试IEEE 802.1Qav/Qbu/Qbv等队列转发协议,则需要如下方式在Ycoto编译环境或者Linux BSP Runtime环境手动安装ipoute2-tc工具软件,并且可能需要对Linux Kernel/Device Tree做适当的修改,可以参考这里一个NXP Application Note文章说明。

---------------------------------------

### Ycoto Environment ###

# Add below to /build/conf/local.conf #

IMAGE_INSTALL_append = " iproute2-tc"

### Linux BSP Runtime ###

$ opkg install iproute2-tc_5.5.0-r0_aarch64.ipk

---------------------------------------

3).具体测试流程

a).Toradex Ycoto Linux默认使能了NTP时间同步协议,这是目前应用最为广泛的网络时间同步协议,精度可以达到毫秒级别,在大多数对于时间同步精度要求没有那么高的场景都可以应用,本文为了测试gPTP高精度时间同步,具体测试过程中需要关闭NTP服务,详细步骤后续说明会提供。

b).实际的TSN网络中,Master Clock节点通常会产生一个高精度时钟,来源一般是GNSS(Global Navigation Satellite System) 结合PPS(Pulse Per Second)信号来进行卫星授时,本文重点不在于此,因此对于作为Master Clock节点的Verdin iMX8MP设备在安装好Linux系统后,先仅只通过默认开启的NTP服务来进行System Clock的同步校准,来简单替代卫星授时的功能。

./ NTP服务详细配置方法可以参考这里,首先在Verdin iMX8MP Linux下完成NTP时间同步。

---------------------------------------

### NTP同步完成前的状态信息###

root@verdin-imx8mp-07250979:~#timedatectl

Local time: Thu 2023-03-16 04:20:08 UTC

Universal time: Thu 2023-03-16 04:20:08 UTC

RTC time: Thu 2023-03-16 04:20:07

Time zone: Universal (UTC, +0000)

System clock synchronized: no

NTP service: active

RTC in local TZ: no

### NTP同步完成后的状态信息###

root@verdin-imx8mp-07250979:~#timedatectl

Local time: Thu 2023-03-16 06:12:27 UTC

Universal time: Thu 2023-03-16 06:12:27 UTC

RTC time: Thu 2023-03-16 06:12:28

Time zone: Universal (UTC, +0000)

System clock synchronized: yes

NTP service: active

RTC in local TZ: no

---------------------------------------

./同步完成后关闭NTP服务

---------------------------------------

root@verdin-imx8mp-07250979:~# timedatectl set-ntp false

root@verdin-imx8mp-07250979:~# timedatectl

Local time: Thu 2023-03-16 06:17:49 UTC

Universal time: Thu 2023-03-16 06:17:49 UTC

RTC time: Thu 2023-03-16 06:17:50

Time zone: Universal (UTC, +0000)

System clock synchronized: yes

NTP service: inactive

RTC in local TZ: no

---------------------------------------

b). Verdin iMX8MP Master Clock节点上面通过linuxptp工具来配置gPTP服务

./主要使用的工具如下

ptp4l: daemon that synchronizes the PTP Hardware Clock (PHC) from the NIC

phc2sys: daemon that synchronizes the PHC and the System clock

pmc: utility tool to configure ptp4l in run-time

./首先后台加载ptp4l daemon进程,用于同步PHC

---------------------------------------

root@verdin-imx8mp-07250979:~# ptp4l -i eth0 -f ./gPTP.cfg --step_threshold=1 -m &

[1] 1092

ptp4l[1140.933]: selected /dev/ptp0 as PTP clock

root@verdin-imx8mp-07250979:~# ptp4l[1140.972]: port 1: INITIALIZING to LISTENING on INIT_COMPLE

TE

ptp4l[1140.972]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE

ptp4l[1144.641]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES

ptp4l[1144.641]: selected local clock 00142d.fffe.6ea423 as best master

ptp4l[1144.641]: assuming the grand master role

---------------------------------------

//参数说明如下,更多参数选项以及详细说明可以查看ptp4l manpage

-f选项指定gPTP.cfg配置文件,这个文件用于配置ptp4l工作于gPTP模式的设置参数

-i选项指定ptp4l所要控制的NIC网口界面

--step_threshold选项用于配置步进时钟的阈值,超过阈值,直接调整时钟时间,单位秒

-m参数使能log信息打印输出,这个可以视测试需要打开或者关闭

// Master所需的gPTP.cfg文件如下,更详细的配置文件参考说明和模板可以参考这里。需要主要目前Linux系统里面的linuxptp软件版本是2.0.1,请查看对应branch的信息。

---------------------------------------

#

# 802.1AS example configuration containing those attributes which

# differ from the defaults. See the file, default.cfg, for the

# complete list of available options.

#

[global]

gmCapable 1

priority1 248

priority2 248

logAnnounceInterval 0

logSyncInterval -3

syncReceiptTimeout 3

neighborPropDelayThresh 800

min_neighbor_prop_delay -20000000

assume_two_step 1

path_trace_enabled 1

follow_up_info 1

transportSpecific 0x1

ptp_dst_mac 01:80:C2:00:00:0E

network_transport L2

delay_mechanism P2P

masterOnly 1

---------------------------------------

//默认情况下,ptp4l通过BMCA(Best Master Clock Algorithm) 来判定当前PHC是否可以被作为Grand Master职责,也可以通过masterOnly或者slaveOnly参数来强制指定,本文使用后者。

---------------------------------------

ptp4l[1144.641]: selected local clock 00142d.fffe.6ea423 as best master

ptp4l[1144.641]: assuming the grand master role

---------------------------------------

./ PHC同步完成后,接下来进行System Clock同步,这个步骤主要针对那些依赖于System clock工作的应用,比如ALSA/GStreamer frameworks AVTP插件。

//由于PHC时间采用TAI(International Atomic Time) 标准,而System Clock采用(Coordinated Universal Time) 标准,需要通过pmc runtime工具配置相应的转换参数

---------------------------------------

root@verdin-imx8mp-07250979:~# pmc -u -b 0 -t 1 "SET GRANDMASTER_SETTINGS_NP clockClass 248 \

clockAccuracy 0xfe offsetScaledLogVariance 0xffff \

currentUtcOffset 37 leap61 0 leap59 0 currentUtcOffsetValid 1 \

ptpTimescale 1 timeTraceable 1 frequencyTraceable 0 \

timeSource 0xa0"

sending: SET GRANDMASTER_SETTINGS_NP

ptp4l[3021.662]: selected local clock 00142d.fffe.6ea423 as best master

00142d.fffe.6ea423-0 seq 0 RESPONSE MANAGEMENT GRANDMASTER_SETTINGS_NP

clockClass 248

clockAccuracy 0xfe

offsetScaledLogVariance 0xffff

currentUtcOffset 37

leap61 0

ptp4l[3021.662]: assuming the grand master role

leap59 0

currentUtcOffsetValid 1

ptpTimescale 1

timeTraceable 1

frequencyTraceable 0

timeSource 0xa0

---------------------------------------

//然后通过phc2sys工具来同步PHC和System Clock

---------------------------------------

root@verdin-imx8mp-07250979:~# phc2sys -s eth0 -c CLOCK_REALTIME --step_threshold=1 --transportSpecific=1 -w -m &

[2] 1058

phc2sys[600.436]: CLOCK_REALTIME phc offset 37000001087 s0 freq +0 delay 875

phc2sys[601.437]: CLOCK_REALTIME phc offset 37000001117 s1 freq +30 delay 875

phc2sys[602.437]: CLOCK_REALTIME phc offset -75 s2 freq -45 delay 875

phc2sys[603.437]: CLOCK_REALTIME phc offset 30 s2 freq +37 delay 875

phc2sys[604.437]: CLOCK_REALTIME phc offset -58 s2 freq -42 delay 875

---------------------------------------

//参数说明如下,更多参数选项以及详细说明可以查看ptp4l manpage

-s选项指定来自于对应NIC(eth0) 设备的PHC作为master clock

-c选项指定System Clock作为slave clock

--step_threshold选项用于配置步进时钟的阈值,超过阈值,直接调整时钟时间,单位秒

--transportSpecific选项在基于gPTP domain运行是必要选项

-w参数使得phc2sys处于等待状态直到ptp4l完成同步

-m参数使能log信息打印输出,这个可以视测试需要打开或者关闭

//打印的log信息中,当phc offset小于100ns即表示时钟同步成功

c). Apalis iMX8 Slave Clock节点上面通过linuxptp工具来配置gPTP服务,具体的流程和命令和Master一致,只是在gPTP.cfg配置文件中将masterOnly修改未slaveOnly。

./首先由于是Slave节点设备,保持Linux System Clock为系统安装后的默认时间设置,直接关闭NTP服务不进行任何时间同步操作

---------------------------------------

root@apalis-imx8-07308034:~# timedatectl

Local time: Wed 2023-03-01 07:21:21 UTC

Universal time: Wed 2023-03-01 07:21:21 UTC

RTC time: Wed 2023-03-01 07:21:21

Time zone: Universal (UTC, +0000)

System clock synchronized: no

NTP service: inactive

RTC in local TZ: no

---------------------------------------

./通过和Verdin iMX8MP设备的直连网络和Master Clock同步PHC时间,由于gPTP协议都是基于MAC层的,因此网口无需设置IP地址也没有问题。

---------------------------------------

root@apalis-imx8-07308034:~# ptp4l -i eth0 -f ./gPTP.cfg --step_threshold=1 -m &

[1] 28567

ptp4l[2838.949]: selected /dev/ptp0 as PTP clock

root@apalis-imx8-07308034:~# ptp4l[2838.996]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE

ptp4l[2838.996]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE

ptp4l[2842.064]: selected local clock 00142d.fffe.6f8302 as best master

ptp4l[2842.197]: port 1: new foreign master 00142d.fffe.6ea423-1

ptp4l[2844.197]: selected best master clock 00142d.fffe.6ea423

ptp4l[2844.197]: updating UTC offset to 37

ptp4l[2844.197]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE

ptp4l[2845.348]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED

ptp4l[2845.973]: rms 646417001599952 max 1292834003200590 freq +9621 +/- 3636 delay 668 +/- 0

ptp4l[2846.973]: rms 8 max 10 freq +10997 +/- 6 delay 668 +/- 0

ptp4l[2847.974]: rms 9 max 10 freq +11008 +/- 1 delay 668 +/- 0

ptp4l[2848.974]: rms 4 max 6 freq +11006 +/- 3 delay 668 +/- 0

......

---------------------------------------

//打印log信息中,rms为PHC和Grand Master clock之间offset的平方值,当rms输出持续小于100ns时候,表示同步成功。

//同时在Verdin iMX8MP的Master端,ptp4l也会打印如下信息,证明Slave以及连接Master 进行精准时间同步。

---------------------------------------

ptp4l[4137.874]: port 1: link up

ptp4l[4137.924]: port 1: FAULTY to LISTENING on INIT_COMPLETE

ptp4l[4141.728]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES

ptp4l[4141.728]: selected local clock 00142d.fffe.6ea423 as best master

ptp4l[4141.728]: assuming the grand master role

---------------------------------------

//此时查看System Clock还是未同步的时间

---------------------------------------

### synchronous System clock on Verdin iMX8MP ###

root@verdin-imx8mp-07250979:~# date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-25

2023-03-16 08:01:22.94530

### non- synchronous System clock on Apalis iMX8 ###

root@apalis-imx8-07308034:~# date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-25

2023-03-01 08:02:46.75497

---------------------------------------

./通过phc2sys工具来同步PHC和System Clock

---------------------------------------

root@apalis-imx8-07308034:~# phc2sys -s eth0 -c CLOCK_REALTIME --step_threshold=1 --transportSpecific=1 -w -m &

[2] 15230

phc2sys[1487.465]: CLOCK_REALTIME phc offset -1295917493725168 s0 freq +0 delay 2625

phc2sys[1488.466]: CLOCK_REALTIME phc offset -1295917493714065 s1 freq +11096 delay 2625

phc2sys[1489.466]: CLOCK_REALTIME phc offset -64 s2 freq +11032 delay 2625

phc2sys[1490.467]: CLOCK_REALTIME phc offset -71 s2 freq +11006 delay 2624

phc2sys[1491.467]: CLOCK_REALTIME phc offset 34 s2 freq +11090 delay 2625

---------------------------------------

//打印log信息中phc offset小于100ns即表示时钟同步成功

//此时查看System Clock则已经和Grand Master同步

---------------------------------------

### synchronous System clock on Verdin iMX8MP ###

root@verdin-imx8mp-07250979:~# date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-25

2023-03-16 08:07:39.33336

### synchronous System clock on Apalis iMX8 ###

root@apalis-imx8-07308034:~# date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-25

2023-03-16 08:07:40.54055

---------------------------------------

d).另外为了更方便的测试PHC和System Clock是否同步成功,可以使用check_clocks工具,下载源码后参考这里说明用如下命令进行交叉编译,生成可执行文件在设备Linux下运行验证时钟同步情况

---------------------------------------

### compile binary on developing host ###

$ ${CROSS_COMPILE}gcc -o check_clocks check_clocks.c

### check on Verdin iMX8MP Master ###

root@verdin-imx8mp-07250979:~# ./check_clocks -v -d eth0

Dumping timestamps and deltas

rt tstamp: 1678954738288637418

tai tstamp: 1678954775288637543

phc tstamp: 1678954775288641175

rt latency: 125

tai latency: 125

phc latency: 1860

phc-rt delta: 37000003757

phc-tai delta: 3632

Clocks on this system are synchronized :)

### check on Apalis iMX8 Slave ###

root@apalis-imx8-07308034:~# ./check_clocks -v -d eth0

Dumping timestamps and deltas

rt tstamp: 1678954739151415597

tai tstamp: 1678954776151415847

phc tstamp: 1678954776151421106

rt latency: 125

tai latency: 250

phc latency: 3468

phc-rt delta: 37000005509

phc-tai delta: 5259

Clocks on this system are synchronized :)

---------------------------------------

5).总结

本文基于NXP iMX8系列处理器简单演示了TSN通过gPTP协议进行网络时间同步的机制。

审核编辑:黄飞

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

    关注

    68

    文章

    18288

    浏览量

    222175
  • NXP
    NXP
    +关注

    关注

    60

    文章

    1214

    浏览量

    177269
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206738
  • 网络时钟
    +关注

    关注

    0

    文章

    6

    浏览量

    6742
  • TSN
    TSN
    +关注

    关注

    3

    文章

    207

    浏览量

    16484
收藏 人收藏

    评论

    相关推荐

    iMX8方案服务

    辰汉电子(股票代码900017)iMX8是飞思卡尔/NXP出品的新一代多媒体应用处理器,采用ARM Cortex-A53和Cortex-A72的内核,具备多屏同步4K视频解码能力,面
    发表于 05-22 11:03

    iMX8方案服务- 辰汉

    辰汉电子(股票代码900017)iMX8是飞思卡尔/NXP出品的新一代多媒体应用处理器,采用ARM Cortex-A53和Cortex-A72的内核,具备多屏同步4K视频解码能力,面
    发表于 05-31 16:34

    iMX8方案服务- 辰汉

    辰汉电子(股票代码900017)iMX8是飞思卡尔/NXP出品的新一代多媒体应用处理器,采用ARM Cortex-A53和Cortex-A72的内核,具备多屏同步4K视频解码能力,面
    发表于 06-12 17:13

    NXP IMX8资料合集(参考手册、数据手册、用户指南等)

    IMX8M微型应用处理器的数据手册i.mx 8M微型应用处理器代表了NXP最新的视频和音频体验,结合了最先进的媒体特定功能和高性能
    发表于 08-12 14:50

    NXP iMX8iMX6 ARM处理器网络性能对比分析

    NXP iMX8已经正式发布,相较于之前NXP i.MX系列的主力产品iMX6,其性能有了大幅提升,本文就针对
    发表于 12-28 07:04

    如何在iMX8X arm处理器上利用GPU加速运算快速傅里叶变换FFT

    传输,边缘计算能够带来更低的延时、更可靠的数据安全。但这也对边缘计算设备带来更大的挑战,特别是计算性能。下面我们将介绍如何在NXP 最新的 iMX8X arm处理器上面利用 GPU 加速运算快速
    发表于 12-28 07:15

    基于NXP iMX6Q ARM处理器的Apalis iMX6Q ARM嵌入式平台

    Parallel Camera Interface,MIPI/CSI-2 串行摄像头接口,USB接口,网络接口等。本文所演示的ARM平台来自于Toradex 基于NXP iMX6Q ARM处理
    发表于 12-29 07:02

    基于NXP iMX8平台演示如何在嵌入式Linux BSP中集成网络浏览器

    BSP中集成网络浏览器,包括Chromium浏览和基于Qtwebenine的示例浏览quicknanobrowser。本文所演示的平台来自于Toradex Apalis iMX8
    发表于 12-21 08:08

    【技术分享】NXP iMX8M Mini芯片应用处理器开发板专题

    IMX8 ARM+FPGA通信案例创龙科技TLIMX8-EVM是一款基于NXP i.MX 8M Mini的4核ARM Cortex-A53 + 单核ARM Cortex-M4多核
    发表于 12-28 11:27

    请问nxp imx8平台如何测试camera csi到v4l2的时间?

    请问nxp imx8平台如何测试camera csi到v4l2的时间?
    发表于 02-22 06:18

    imX8 Plus处理器连续工作时间?

    亲爱的: 我对 imX8 Plus 处理器有疑问1、连续工作时间?2. 故障发生前的时间是多长时间?
    发表于 03-20 06:32

    IMX8系列PCIE挂起失败怎么解决?

    你好恩智浦 参考社区,i.MX8M Quad EVK 板挂起/恢复功能在 PCIE 接口中失败。关于imx8系列imx8mm imx8m
    发表于 03-28 07:37

    iMX8测评| 存储、千兆网、4K解码 iMX8MQ 开发板 评测

    飞凌OKMX8MQ-C开发板基于NXP iMX8系列处理器iMX8MQ设计,ARM Cortex-A53和Cortex-M4内核。
    的头像 发表于 10-28 18:55 2137次阅读
    <b class='flag-5'>iMX8</b>测评| 存储、千兆网、4K解码 <b class='flag-5'>iMX</b>8MQ 开发板 评测

    NXP iMX8M Mini芯片应用处理器技术专题

    NXP iMX8M Mini芯片应用处理器技术专题,本期主要包含6家厂商
    的头像 发表于 12-31 16:01 1393次阅读
    <b class='flag-5'>NXP</b> <b class='flag-5'>iMX</b>8M Mini芯片应用<b class='flag-5'>处理器</b>技术专题

    「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!

    NXP IMX8图形开发指南(GPU) 基于Graphical Demo,支持OpenGL、OpenVG
    的头像 发表于 09-10 10:19 1270次阅读
    「含源码」关于<b class='flag-5'>NXP</b> <b class='flag-5'>IMX8</b> Mini的图形开发指南(GPU)案例分享!