工控網(wǎng)首頁
>

應(yīng)用設(shè)計

>

NXP iMX8系列處理器TSN網(wǎng)絡(luò)時鐘同步測試

NXP iMX8系列處理器TSN網(wǎng)絡(luò)時鐘同步測試

By Toradex秦海

1). 簡介

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

 

NXP iMX8系列處理器TSN網(wǎng)絡(luò)時鐘同步測試330.png 

 

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

 

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

本文所演示的平臺來自于Toradex Verdin iMX8M Plus 和 Apalis iMX嵌入式平臺,這兩個平臺是基于近年發(fā)布的 NXP iMX系列 ARM 處理器,核心為 Cortex-A53/A72 

 

 

2)硬件準(zhǔn)備

a). Verdin iMX8MP ARM 核心版配合 Dahlia Carrier Board 載板,并連接調(diào)試串口,后續(xù)測試中作為TSN網(wǎng)絡(luò)中的 Master Clock 節(jié)點(diǎn)平臺。Verdin iMX8MP核心板板載 PHY 芯片的一路千兆網(wǎng)絡(luò)是完整支持包括TSN/AVB/IEEE1588等相關(guān)協(xié)議標(biāo)準(zhǔn)的網(wǎng)口,另外一路RGMII接口的MAC則支持AVB/IEEE1588。

 

b). Apalis iMX8 ARM 核心版配合 Apalis Eva Board 載板,并連接調(diào)試串口,后續(xù)測試中作為TSN網(wǎng)絡(luò)中的 Slave Clock 節(jié)點(diǎn)平臺Apalis iMX8核心板提供的兩路千兆網(wǎng)絡(luò)都是只支持 AVB/IEEE1588 ,而不支持完整的 TSN ,不過由于本文僅測試時鐘同步因此也可以正常和Verdin iMX8MP搭配使用。

 

c). 兩個平臺的千兆網(wǎng)口通過一根網(wǎng)線直通連接。

 

3). 軟件準(zhǔn)備

a). 如下圖,Toradex Verdin iMXMP 模塊標(biāo)準(zhǔn) Ycoto Linux BSP 中已經(jīng)包含了測試 IEEE 802.1AS 時鐘同步的 Linuxptp 工具,可以參考這里說明分別在 Verdin iMX8MP 模塊以及 Apalis iMX8 模塊上面安裝目前最新的LTS 5.7.2版本。

NXP iMX8系列處理器TSN網(wǎng)絡(luò)時鐘同步測試1768.png 

 

b). 如果需要在本文基礎(chǔ)上進(jìn)一步測試 IEEE 802.1Qav/Qbu/Qbv 等隊列轉(zhuǎn)發(fā)協(xié)議,則需要如下方式在 Ycoto 編譯環(huán)境或者 Linux BSP Runtime 環(huán)境手動安裝 ipoute2-tc 工具軟件,并且可能需要對Linux Kernel/Device Tree做適當(dāng)?shù)男薷模梢詤⒖歼@里一個 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 默認(rèn)使能了 NTP 時間同步協(xié)議,這是目前應(yīng)用最為廣泛的網(wǎng)絡(luò)時間同步協(xié)議,精度可以達(dá)到毫秒級別,在大多數(shù)對于時間同步精度要求沒有那么高的場景都可以應(yīng)用,本文為了測試 gPTP 高精度時間同步,具體測試過程中需要關(guān)閉 NTP 服務(wù),詳細(xì)步驟后續(xù)說明會提供。

 

b). 實際的 TSN 網(wǎng)絡(luò)中,Master Clock 節(jié)點(diǎn)通常會產(chǎn)生一個高精度時鐘,來源一般是 GNSSGlobal Navigation Satellite System) 結(jié)合 PPSPulse?Per?Second信號來進(jìn)行衛(wèi)星授時,本文重點(diǎn)不在于此,因此對于作為 Master Clock 節(jié)點(diǎn)的 Verdin iMX8MP 設(shè)備在安裝好 Linux 系統(tǒng)后,先僅只通過默認(rèn)開啟的 NTP 服務(wù)來進(jìn)行 System Clock 的同步校準(zhǔn),來簡單替代衛(wèi)星授時的功能。

./ NTP服務(wù)詳細(xì)配置方法可以參考這里,首先在Verdin iMX8MP Linux 下完成 NTP 時間同步。

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

### NTP 同步完成前的狀態(tài)信息 ###

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同步完成后的狀態(tài)信息 ###

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

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

 

./ 同步完成后關(guān)閉 NTP 服務(wù)

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

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 節(jié)點(diǎn)上面通過 linuxptp 工具來配置 gPTP 服務(wù)

./ 主要使用的工具如下

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 進(jìn)程,用于同步 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

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

// 參數(shù)說明如下,更多參數(shù)選項以及詳細(xì)說明可以查看 ptp4l manpage

-f 選項指定 gPTP.cfg 配置文件,這個文件用于配置 ptp4l 工作于 gPTP 模式的設(shè)置參數(shù)

-i 選項指定 ptp4l 所要控制的 NIC 網(wǎng)口界面

--step_threshold 選項用于配置步進(jìn)時鐘的閾值,超過閾值,直接調(diào)整時鐘時間,單位秒

-m 參數(shù)使能 log 信息打印輸出,這個可以視測試需要打開或者關(guān)閉

 

// Master 所需的 gPTP.cfg 文件如下,更詳細(xì)的配置文件參考說明和模板可以參考這里。需要主要目前 Linux 系統(tǒng)里面的 linuxptp 軟件版本是 2.0.1 ,請查看對應(yīng)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

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

 

// 默認(rèn)情況下, ptp4l 通過 BMCABest Master Clock Algorithm) 來判定當(dāng)前 PHC 是否可以被作為 Grand Master 職責(zé),也可以通過 masterOnly 或者 slaveOnly 參數(shù)來強(qiáng)制指定,本文使用后者。

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

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

ptp4l[1144.641]: assuming the grand master role

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

 

./ PHC 同步完成后,接下來進(jìn)行 System Clock同步,這個步驟主要針對那些依賴于 System clock 工作的應(yīng)用,比如 ALSA/GStreamer frameworks AVTP 插件。

// 由于 PHC 時間采用 TAIInternational Atomic Time) 標(biāo)準(zhǔn),而 System Clock 采用(Coordinated Universal Time) 標(biāo)準(zhǔn),需要通過 pmc runtime 工具配置相應(yīng)的轉(zhuǎn)換參數(shù)

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

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

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

// 參數(shù)說明如下,更多參數(shù)選項以及詳細(xì)說明可以查看 ptp4l manpage

-s 選項指定來自于對應(yīng) NICeth0) 設(shè)備的 PHC 作為 master clock

-c 選項指定 System Clock 作為 slave clock

--step_threshold 選項用于配置步進(jìn)時鐘的閾值,超過閾值,直接調(diào)整時鐘時間,單位秒

--transportSpecific 選項在基于 gPTP domain 運(yùn)行是必要選項

-w 參數(shù)使得 phc2sys 處于等待狀態(tài)直到 ptp4l 完成同步

-m 參數(shù)使能 log 信息打印輸出,這個可以視測試需要打開或者關(guān)閉

 

// 打印的 log 信息中,當(dāng) phc offset 小于 100ns 即表示時鐘同步成功

 

c). Apalis iMX8 Slave Clock 節(jié)點(diǎn)上面通過 linuxptp 工具來配置 gPTP 服務(wù),具體的流程和命令和 Master 一致,只是在 gPTP.cfg 配置文件中將 masterOnly 修改未 slaveOnly 。

./ 首先由于是 Slave 節(jié)點(diǎn)設(shè)備,保持 Linux System Clock 為系統(tǒng)安裝后的默認(rèn)時間設(shè)置,直接關(guān)閉 NTP 服務(wù)不進(jìn)行任何時間同步操作

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

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 設(shè)備的直連網(wǎng)絡(luò)和 Master Clock同步 PHC 時間,由于 gPTP協(xié)議都是基于 MAC 層的,因此網(wǎng)口無需設(shè)置 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 的平方值,當(dāng) rms 輸出持續(xù)小于 100ns 時候,表示同步成功。

 

// 同時在 Verdin iMX8MP 的 Master 端,ptp4l 也會打印如下信息,證明 Slave 以及連接 Master  進(jìn)行精準(zhǔn)時間同步。

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

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 則已經(jīng)和 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 工具,下載源碼后參考這里說明用如下命令進(jìn)行交叉編譯,生成可執(zhí)行文件在設(shè)備 Linux 下運(yùn)行驗證時鐘同步情況

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

### 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). 總結(jié)

本文基于NXP iMX8系列處理器簡單演示了 TSN 通過 gPTP 協(xié)議進(jìn)行網(wǎng)絡(luò)時間同步的機(jī)制。

 

參考文檔

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

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

提交

查看更多評論
其他資訊

查看更多

Verdin AM62 LVGL 移植

基于 NXP iMX8MM 測試 Secure Boot 功能

隆重推出 Aquila - 新一代 Toradex 計算機(jī)模塊

Verdin iMX8MP 調(diào)試串口更改

NXP iMX8MM Cortex-M4 核心 GPT Capture 測試