工控網首頁
>

應用設計

>

NXP iMX8系列處理器TSN網絡時鐘同步測試

NXP iMX8系列處理器TSN網絡時鐘同步測試

By Toradex秦海

1). 簡介

IEEE 802.1 TSN(Time-Sensitive Networking) 工作組定義了一個基于 802.x 網絡架構上提供同步時間低延遲服務能力的協議,其前身為 IEEE AVB(Audio Video Bridgin) 工作組,后于2012年重命名為 TSN 工作組以便于將相關協議標準更廣泛推廣; AVB/TSN 包含多種具體協議標準(見如下表格),其中最重要的協議標準之一就是 IEEE 802.1AS 時鐘同步協議標準,它基于 IEEE 1588 協議進行精簡和修改,也稱為 gPTP 協議。

 

NXP iMX8系列處理器TSN網絡時鐘同步測試330.png 

 

PTP 協議是一種精確的時間同步協議,IEEE 1588 標準為時鐘分配定義了一個主從式架構,由一個或多個網段及一個或多個時鐘組成。在局域網中能將時間同步精度控制在亞微秒級。 PTP 協議對時間戳在 MAC 層進行加蓋, 消除了數據包在網絡協議棧中的處理時間延遲; 對時間戳的記錄和發送進行確認, 得到數據包準確的發送和接收時間。 相比于其它時間同步協議(如 NTP ), PTP 協議的同步精度是最高的。

 

本文就基于 NXP 最新的 i.MX8 系列 ARM 處理器平臺進行 TSN 時鐘同步的簡單測試。

本文所演示的平臺來自于Toradex Verdin iMX8M Plus 和 Apalis iMX嵌入式平臺,這兩個平臺是基于近年發布的 NXP iMX系列 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版本。

NXP iMX8系列處理器TSN網絡時鐘同步測試1768.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 節點通常會產生一個高精度時鐘,來源一般是 GNSSGlobal Navigation Satellite System) 結合 PPSPulse?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 通過 BMCABest 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 時間采用 TAIInternational 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 選項指定來自于對應 NICeth0) 設備的 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 協議進行網絡時間同步的機制。

 

參考文檔

https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/AVB-TSN-demo-on-i-MX8MP/ta-p/1123791

https://tsn.readthedocs.io/timesync.html

審核編輯(
王靜
)
投訴建議

提交

查看更多評論
其他資訊

查看更多

使用 YoctoProject集成Qt6

Toradex 發布基于TI AM62處理器的新的 Verdin 計算機模塊產品

NXP iMX8系列處理器Pin Multiplexing定義說明

在設計載板時添加USB-C - 第1部分

NXP iMX8平臺上使用imx-gpu-sdk開發