TSN Ethernetの実装をFPGA(KR260)で試してみた

本サイトはアフィリエイト広告を利用しています。
FPGA

TSN(Time Sensitive Networking)のイーサネット環境を作ってみました。

KR260というTSN対応のFPGAボードを使ってテストしています。

TSNの環境構築から実装・通信テストまで一連の流れを紹介します。

 

スポンサーリンク

TSN Ethernetの実装をFPGA(KR260)で試してみた

TSN(Time Sensitive Networking)のイーサネット環境を構築してみました。

KR260(XilinxのFPGAが搭載された評価ボード)をTSNスイッチとしてます。

 

TSNのテスト環境を構築をして、まずは最初のPTP通信を行いました。

KR260がTSNスイッチとして、マスタークロックと同期するところまで確認しています。

 

TSNが使えるKR260(FPGAの評価ボード)

TSN対応の開発・評価ボードは2022/8時点ではかなり限られています。

その中でTSNが使えるKR260は、個人レベルで購入できるFPGAの評価ボードです。

※4つのLAN(RJ-45)コネクタを持ち、その内2つがTSNとして対応できます。

 

KR260の購入から最初のOSを入れるまでを下記記事にて紹介しています。

KR260を購入してUbuntuを動かすまでのメモ

KR260を購入してUbuntuを動かすまでのメモ
XilinxのKria KR260のロボティクス スターター キットを買ってみました。 Digi-Keyから個人で購入しています。 Ubuntuを動かすまでの流れを紹介します。

 

TSN通信の接続先はLANカード(NIC)で対応

KR260でTSNで通信テストさせるためには、接続先のデバイスが必要になります。

IEEE-1588/PTP対応の安いLANカード(NIC)を購入して、接続先(マスター)にしています。

※本当はKR260が2台あれば一番良いのですが、1台約$400するので2台目は諦めました。

LANカードならば数千円程度で購入できます。

PTP対応LANカードの通信方法・詳細に関しては下記記事で紹介しています。

IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた

IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた
IEEE-1588/PTP対応のLANカード(NIC)を購入してみました。 実際にPCにカードを取り付けて、PTPの動作確認まで実施しています LANカード(NIC)の選定から、PTP通信までの内容を紹介します。

 

Xilinxの公式ページ

今回の記事の手順に関しては、基本的に公式ページのTSNのデモ実装方法です。

同様にテストする方は公式ページも参考お願いします。

 https://xilinx.github.io/kria-apps-docs/kr260/build/html/docs/ros2_multinode_communication_via_tsn/docs/app_deployment.html

 

KR260でTSN通信テストする準備

KR260でTSN通信のテストする準備を進めていきます。

KR260を購入してUbuntuを動かすまでのメモ

上記記事のKR260のセットアップした前提で、下記以降の手順を実施しています。

 

アップデートやダウンロードも多くあり、有線LANの接続が必要です。

4つあるLANコネクタの右上(PS側)に繋げます。

 

Timezoneとlocaleの設定

Timezoneとlocaleの設定をしておきます。

公式の手順通り、ここではアメリカの時刻設定をしています。

ubuntu@kria:~$ sudo timedatectl set-ntp true
ubuntu@kria:~$ sudo timedatectl set-timezone America/Los_Angeles
ubuntu@kria:~$ timedatectl
ubuntu@kria:~$ sudo locale-gen en_US en_US.UTF-8
ubuntu@kria:~$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ubuntu@kria:~$ export LANG=en_US.UTF-8
ubuntu@kria:~$ locale

 

ただ筆者の環境では、KR260接続先のLinuxのPCは日本の時刻設定で実施しています。

KR260側も日本の時刻設定で動作できるのかは未確認です。

 

ファームウェアのVerを2022.1以上に

ファームウェアのVerは2022.1以上が必要ということです。

ただ筆者が2022年8月時点でKR260を入手しましたが、その時点で2022.1でした。

ほとんどの人が影響ないと思います。

 

細かいファームウェアのアップデート情報などは下記の公式Wikiにあります。

必要ならばアップデートファイル入手して対応をお願いします。

 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/Kria+K26+SOM#Boot-Firmware-Updates

 

TSNのデモ用アプリケーションをインストール

Xilinxのプログラムなどをダウンロード・アップデートします。

アップグレード後はrebootを推奨されていたので、rebootしときます。

sudo add-apt-repository ppa:xilinx-apps
sudo apt update
sudo apt upgrade

 

KR260用のパッケージを確認します。

今回は「pmod-rs485-test」というTSNのデモアプリケーションを使います。

また「mv-defect-detect」というカメラと10G SFP+を使った別のデモもありました。

ubuntu@kria:~$ sudo xmutil getpkgs
[sudo] password for ubuntu:

Searching package feed for packages compatible with: kr260

xlnx-app-kr260-mv-defect-detect/jammy 0.0.20220704.5c4956a-0xlnx1 arm64
  demo application for Xilinx boards - kr260 mv-defect-detect application
xlnx-app-kr260-pmod-rs485-test/jammy 0.1-0xlnx1 arm64
  demo application for Xilinx boards - kr260 pmod-rs485-test application
xlnx-app-kr260-tsn-examples/jammy 0.1-0xlnx1 arm64

 

今回使うTSNデモのファームウェアをインストールをします。

buntu@kria:~$ sudo apt install xlnx-firmware-kr260-tsn-rs485pmod

 

公式の手順で下記サービスを再スタート推奨していたので実施しておきます。

(今後修正予定ということです)

ubuntu@kria:~$ sudo systemctl restart dfx-mgr.service

 

また他インストールに関しても、必要なとこはy(es)押して進めていきます。

sudo apt install xlnx-app-kr260-pmod-rs485-test
sudo apt install xlnx-app-kr260-tsn-examples

 

パスも繋げておきます。もしこれ以降に電源OFFした場合は再実施した方が良さそうです

(公式にも必要ならば~/.bashrcに記載推奨の旨が書かれていました)

ubuntu@kria:~$ export PATH=${PATH}:/opt/xilinx/pmod-rs485-test/bin/
ubuntu@kria:~$ export PATH=${PATH}:/opt/xilinx/tsn-examples/bin/

 

ROS2をインストール

KR260へROS2環境もインストールしておきます。

(今回の通信テストでは不要かもしれませんが、公式に従いインストールしました)

※本来はKR260を複数接続してROS2+TSNで繋ぐデモのためだと思われます。

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=arm64 signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2-testing/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt upgrade
sudo apt install ros-humble-ros-base
mkdir -p ~/Downloads
wget https://github.com/Xilinx/ros-tsn-pubsub/releases/download/v0.1/ros-humble-xlnx-pubsub_0.1.0-0jammy_arm64.deb -P ~/Downloads/
sudo apt install ~/Downloads/ros-humble-xlnx-pubsub_0.1.0-0jammy_arm64.deb

 

xmutilの操作

(KRIAシリーズの)KR260の操作ではxmutilというコマンドをよく使います。

公式のWikiに使用方法が記載されています。

 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/Kria+K26+SOM#On-Target-Utilities

 

まずは利用可能なプラットフォーム(Accelerator)を確認します。

初期状態では「kr260-tsn-rs485pmod」がまだActive slotが「-1」で使用できない状況です。

ubuntu@kria:~$ sudo xmutil listapps
                     Accelerator          Accel_type                            Base           Base_type      #slots(PL+AIE)         Active_slot

                k26-starter-kits            XRT_FLAT                k26-starter-kits            XRT_FLAT               (0+0)                  0,
             kr260-tsn-rs485pmod            XRT_FLAT             kr260-tsn-rs485pmod            XRT_FLAT               (0+0)                  -1

 

一度unloadして、使いたいプラットフォームを再loadします。

再load後は使いたい「kr260-tsn-rs485pmod」のActive slotが「0」となっています。

ubuntu@kria:~$ sudo xmutil unloadapp
Accelerator successfully removed.
ubuntu@kria:~$ sudo xmutil listapps
                     Accelerator          Accel_type                            Base           Base_type      #slots(PL+AIE)         Active_slot

                k26-starter-kits            XRT_FLAT                k26-starter-kits            XRT_FLAT               (0+0)                  -1
             kr260-tsn-rs485pmod            XRT_FLAT             kr260-tsn-rs485pmod            XRT_FLAT               (0+0)                  -1
ubuntu@kria:~$ sudo xmutil loadapp kr260-tsn-rs485pmod
[ 1791.911513] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/firmware-name
[ 1791.921675] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/resets
[ 1792.042386] xilinx_axienet_tsn 80040000.tsn_emac_0: IRQ tsn_switch_scheduler_irq_1 not found
[ 1792.109674] xilinx_axienet_tsn 80060000.tsn_emac_1: IRQ tsn_switch_scheduler_irq_2 not found
Accelerator loaded to slot 0
ubuntu@kria:~$ sudo xmutil listapps
                     Accelerator          Accel_type                            Base           Base_type      #slots(PL+AIE)         Active_slot

                k26-starter-kits            XRT_FLAT                k26-starter-kits            XRT_FLAT               (0+0)                  -1
             kr260-tsn-rs485pmod            XRT_FLAT             kr260-tsn-rs485pmod            XRT_FLAT               (0+0)                  0,

 

TSN環境のセットアップ

今までの操作でKR260でTSN環境のプラットフォームが使える状況になりました。

実際にTSNを使えるようにセットアップのスクリプトを走らせます。

TSN用のep.20というポートが追加されます。

ubuntu@kria:~$ source /usr/bin/net_setup.sh -b2
Please enter the password for sudo access
Cannot find device "ep.20"
No previous config
port-swp0 state-4
Successfully set the port state
port-swp1 state-4
Successfully set the port state
port-swp2 state-4
Successfully set the port state
port-swp0 vlanid-20
Successfully added
port-swp1 vlanid-20
Successfully added
11: ep.20@ep: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0a:35:00:01:20 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 0 maxmtu 65535
    vlan protocol 802.1Q id 20 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    inet 111.222.0.20/24 brd 111.222.0.255 scope global ep.20
       valid_lft forever preferred_lft forever
    inet6 fe80::20a:35ff:fe00:120/64 scope link tentative
       valid_lft forever preferred_lft forever

*** Board setup for SLAVE operations ***

 

この時点でifconfigをするとTSNのep.20が確認できます。

IPアドレス含めて割り振られています。後でマスター側の設定に使うためメモしときます。

「inet 111.222.0.20 netmask 255.255.255.0 broadcast 111.222.0.255」

ubuntu@kria:~$ ifconfig
ep: flags=67<UP,BROADCAST,RUNNING>  mtu 1500
        inet6 fe80::a9b5:5f36:dd0a:fe94  prefixlen 64  scopeid 0x20<link>
        ether 00:0a:35:00:01:20  txqueuelen 1000  (Ethernet)
        RX packets 20  bytes 3274 (3.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 66  bytes 9594 (9.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ep.20: flags=67<UP,BROADCAST,RUNNING>  mtu 1500
        inet 111.222.0.20  netmask 255.255.255.0  broadcast 111.222.0.255
        inet6 fe80::20a:35ff:fe00:120  prefixlen 64  scopeid 0x20<link>
        ether 00:0a:35:00:01:20  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9  bytes 746 (746.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

この時点でTSNの接続先と繋げば、KR260のTSN用のコネクタが点灯するはずです。

4つあるLANコネクタの左上(PL側)に接続しています。

 

マスター側でTSNの通信テストする準備

KR260とは別に、接続先のマスター側のLANカード(NIC)の準備をします。

今回のテストではLANカード側がマスタークロックとなって、KR260が同期する形です。

PTP対応のLANカード(NIC)をLinuxのPCに装着します。

LANカードを取り付けられる(PCIEコネクタを持つ)LinuxのPCならOKです。

 

LANカードの選定、LinuxのPCでの動作確認に関して下記記事で紹介しています。

IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた

IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた
IEEE-1588/PTP対応のLANカード(NIC)を購入してみました。 実際にPCにカードを取り付けて、PTPの動作確認まで実施しています LANカード(NIC)の選定から、PTP通信までの内容を紹介します。

 

linuxptpをインストール

PTP通信に必要なパッケージ(linuxptp)をインストールします。

またethtoolは使用するLANカードがPTP通信可能か確認するために使います。

sudo apt install ethtool
sudo apt install linuxptp

 

TSNと通信可能なLANカード(NIC)かを確認する

搭載したLANカード(NIC)がPTP通信可能かを確認していきます。

まずifconfigでインターフェース名を確認します。(筆者の場合はenp4s0でした)

iotengineer@iotengineer-Inspiron-3650:~$ ifconfig enp4s0
enp4s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 6c:b3:11:52:9d:82  txqueuelen 1000  (イーサネット)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xdf200000-df2fffff  

 

ethtoolでインターフェースの状況を調べることができます。

LANカードのPTPの情報を確認すると、ハードウェアクロックに対応していました。

「PTP Hardware Clock: 0」 ←が無いとTSNと通信が出来ません。

iotengineer@iotengineer-Inspiron-3650:~$ ethtool -T enp4s0
Time stamping parameters for enp4s0:
Capabilities:
	hardware-transmit     (SOF_TIMESTAMPING_TX_HARDWARE)
	software-transmit     (SOF_TIMESTAMPING_TX_SOFTWARE)
	hardware-receive      (SOF_TIMESTAMPING_RX_HARDWARE)
	software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)
	software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
	hardware-raw-clock    (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
	off                   (HWTSTAMP_TX_OFF)
	on                    (HWTSTAMP_TX_ON)
Hardware Receive Filter Modes:
	none                  (HWTSTAMP_FILTER_NONE)
	all                   (HWTSTAMP_FILTER_ALL)

 

スレーブ側とIPアドレスを合わせておく

念のためにKR260のスレーブ(TSNスイッチ)側とIPアドレスを合わせておきます。

スレーブが下記アドレスだったため、マスター側はずらして111.222.0.100としています。

「inet 111.222.0.20 netmask 255.255.255.0 broadcast 111.222.0.255」

ifconfig enp4s0 111.222.0.100 netmask 255.255.255.0 broadcast 111.222.0.255

 

(実際にIPアドレス合わせずにテストもしてみましたが、PTP通信が出来ませんでした)

 

ptp4lの設定ファイルを作成する

Xilinxの公式の手順に従い、ptp通信(ptp4l)に使うマスター側の設定ファイルを作成します。

テキストエディタなら何でもいいので、「ptp4l_master.conf」の設定ファイルを作ります。

    [global] 

    transportSpecific       1 
    priority1               248 
    priority2               249 
    ptp_dst_mac             01:80:C2:00:00:0E 
    p2p_dst_mac             01:80:C2:00:00:0E 
    logAnnounceInterval     1 
    logSyncInterval         -3 
    follow_up_info          1 
    announceReceiptTimeout  3 
    syncReceiptTimeout      3 
    neighborPropDelayThresh 800 
    min_neighbor_prop_delay -20000000 
    network_transport       L2 
    delay_mechanism         P2P 
    tx_timestamp_timeout    10

 

マスター側からPTP通信を開始する

LANカードが搭載されたPC(マスター側)から先にPTP通信を開始します。

(テストでは通信開始したら、特に気にすることなく放っておけばOKです)

下記のptp4lを実行すると、ログ(ptptlog)ファイルが作成が作成されます。

iotengineer@iotengineer-Inspiron-3650:~$ sudo ptp4l -P -2 -H -i enp4s0  -m -f ptp4l_master.conf >& ptplog &

 

使用しているオプションに関しては下記内容です。詳細はptp4lのマニュアルを参照ください。

 https://linux.die.net/man/8/ptp4l

  • -P…P2P(Peer-to-Peer)メカニズムの使用
  • -2…(IEEE 802.3) イーサネットを使用
  • -H…ハードウェアタイムスタンプを使用
  • -i …interfaceの指定先 ※enp4s0を指定
  • -m…ログ出力 ※ptplogファイルに出力
  • -f…configファイル読み込み ※ptp4l_master.confを読み込み

 

PTP通信のマスター側のログを確認する

ptp通信のログを見てみます。開始からイベントがある毎に記録されています。

ptp4l[1221.809]: selected /dev/ptp0 as PTP clock
ptp4l[1221.867]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1221.867]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[1227.911]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
ptp4l[1227.911]: selected local clock 6cb311.fffe.529d82 as best master
ptp4l[1227.911]: assuming the grand master role

 

ステートの遷移

正常にマスターとして通信出来た場合では、ステートが下記のように遷移出来ています。

「INITIALIZING→LISTENING → MASTER」

  • INITIALIZING…初期化された状態
  • LISTENING…ポートがPTPに参加できる状態になった最初の状態
  • MASTER…マスターの状態

 

マスタークロック

マスタークロックが(KR260側ではなく)LANカード(NIC)のものが選ばれています。

赤箇所と青箇所がifconfigのetherの情報と一致します。

  • ptpのログ…「selected local clock 6cb311.fffe.529d82 as best master」
  • ifconfig…「ether 6c:b3:11:52:9d:82
iotengineer@iotengineer-Inspiron-3650:~$ ifconfig enp4s0
enp4s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 6c:b3:11:52:9d:82  txqueuelen 1000  (イーサネット)

 

KR260のTSN環境でPTP通信テスト

マスター側からPTP通信開始しましたので、KR260側のスレーブ側でも通信を開始します。

結果は無事、KR260でTSN環境でPTP通信が繋がりました。同期も取れています。

 

スレーブとしてPTP通信を行う

既にセットアップは済んでいるので、「start_ptp.sh」のスクリプトを動かすだけです。

「-s」を付けることでスレーブの設定ファイルを読み込みます。

下記結果となりました。スレーブではマスタークロックと同期オフセットの各値も出力されます。

ubuntu@kria:~$ source /usr/bin/start_ptp.sh -s
Please enter the password for sudo access
ptp4l: no process found
invoking ptp4l wait till complete ..........

ptp4l[437.028]: selected /dev/ptp2 as PTP clock
ptp4l[437.068]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[437.069]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[440.545]: port 1: new foreign master 6cb311.fffe.529d82-1
ptp4l[444.545]: selected best master clock 6cb311.fffe.529d82
ptp4l[444.545]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l[445.423]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l[446.048]: rms 24684777842459 max 49369555668293 freq -638794792 +/- 373
ptp4l[447.048]: rms 187989489 max 361122468 freq -425161232 +/- 139924320 del
ptp4l[448.049]: rms 114354436 max 133352938 freq -66417252 +/- 65348609 delay
ptp4l[449.049]: rms 110281867 max 130738034 freq +56547766 +/- 11652762 delay
ptp4l[450.049]: rms 50606757 max 74175858 freq +54698346 +/- 8163268 delay
ptp4l[451.050]: rms 9927431 max 19450496 freq +23910191 +/- 8179532 delay   1
ptp4l[452.050]: rms 7051117 max 8001801 freq +3253195 +/- 3683799 delay   183
ptp4l[453.051]: rms 6435842 max 7737847 freq -3512959 +/- 591255 delay   183
ptp4l[454.051]: rms 2852058 max 4228370 freq -3190882 +/- 507894 delay   185
ptp4l[455.051]: rms 521885 max 1040241 freq -1345742 +/- 477188 delay   174 +
ptp4l[456.052]: rms 432689 max 478515 freq -158565 +/- 207125 delay   136 +/-
ptp4l[457.052]: rms 374861 max 456799 freq +212126 +/- 29485 delay   158 +/-
ptp4l[458.052]: rms 160379 max 240554 freq +181208 +/- 31381 delay   158 +/-
ptp4l[459.053]: rms 27360 max 55182 freq +70983 +/- 27770 delay   170 +/-   0
ptp4l[460.053]: rms 26439 max 28739 freq  +2874 +/- 11627 delay   183 +/-   0
ptp4l[461.053]: rms 21837 max 26938 freq -17421 +/- 1456 delay   182 +/-   0
ptp4l[462.054]: rms 9028 max 13694 freq -14954 +/- 1919 delay   182 +/-   0
ptp4l[463.054]: rms 1449 max 2920 freq  -8398 +/- 1617 delay   181 +/-   0
ptp4l[464.054]: rms 1598 max 1707 freq  -4500 +/- 649 delay   179 +/-   0
ptp4l[465.055]: rms 1267 max 1579 freq  -3390 +/-  74 delay   179 +/-   0
ptp4l[466.055]: rms  509 max  780 freq  -3565 +/- 117 delay   181 +/-   0

PTP sync success with master clock, PTP continues to run in background
[2]+  Killed                  tail -f ~/.local/log/ptplog

 

スクリプトは30秒程度で止まりますが、~/.local/log/ptplogにログファイルが保存されています。

また下記コマンドで、ログファイルを順次出力することができます。

ubuntu@kria:~$ tail -f ~/.local/log/ptplog
ptp4l[465.055]: rms 1267 max 1579 freq  -3390 +/-  74 delay   179 +/-   0
ptp4l[466.055]: rms  509 max  780 freq  -3565 +/- 117 delay   181 +/-   0
ptp4l[467.055]: rms   76 max  154 freq  -3964 +/-  95 delay   182 +/-   0
ptp4l[468.055]: rms   96 max  108 freq  -4181 +/-  39 delay   182 +/-   0
ptp4l[469.056]: rms   75 max   93 freq  -4246 +/-  13 delay   183 +/-   0
ptp4l[470.056]: rms   43 max   55 freq  -4262 +/-   6 delay   183 +/-   0
ptp4l[471.057]: rms   13 max   23 freq  -4242 +/-  12 delay   183 +/-   0
ptp4l[472.057]: rms   26 max   35 freq  -4184 +/-  14 delay   182 +/-   0
ptp4l[473.057]: rms   17 max   26 freq  -4175 +/-   8 delay   182 +/-   0
ptp4l[474.058]: rms   10 max   17 freq  -4179 +/-  12 delay   182 +/-   0
ptp4l[475.058]: rms    6 max    8 freq  -4179 +/-   7 delay   183 +/-   0
ptp4l[476.058]: rms    5 max    7 freq  -4175 +/-   6 delay   183 +/-   0
ptp4l[477.058]: rms    7 max   18 freq  -4172 +/-   9 delay   183 +/-   0
ptp4l[478.059]: rms    6 max   11 freq  -4173 +/-   8 delay   182 +/-   0

 

PTP通信のスレーブ側のログを確認する

スクリプトでPTP通信を実行していましたが、中身はマスター側と同じくptp4lです。

同様にログの中身を確認・考察していきます。

 

n(ナノ)秒単位で時刻同期の精度

ptp4lの履歴でオフセットのrms値に注目します。※単位はn(ナノ)秒です。

PTP通信開始始めはオフセット値が莫大な値となっていますが、徐々に収束しています。

最後は一桁のn(ナノ)秒単位で時刻同期の精度が取れていることが分かります。

  • ptp4l[478.059]: rms 6 max 11 freq -4173 +/- 8 delay 182 +/- 0

 

ステートの遷移

正常にスレーブとして通信出来た場合では、ステートが下記のように遷移出来ています。

「INITIALIZING→LISTENING → UNCALIBRATED→SLAVE」

  • INITIALIZING…初期化された状態
  • LISTENING…ポートがPTPに参加できる状態になった最初の状態
  • UNCALIBRATED…マスタークロックを受信している状態。同期はまだ未。
  • SLAVE…マスタークロックを受信している状態。同期まで済

 

マスタークロック

スレーブ側で使用するクロックは、マスター側のLANカード(NIC)のものを選択できています。

マスター側で確認したethernetの情報と一致しています

  • port 1: new foreign master 6cb311.fffe.529d82-1
  • selected best master clock 6cb311.fffe.529d82

 

スレーブの設定ファイル

KR260で動作しているスレーブの設定ファイル(ptp4l_slave.conf)も確認します。

マスターとスレーブで差分があるのは「priority1,priority2」のみでした。

priorityの値が小さい方がマスタークロックとなります。(マスター側の方が小さいです。)

  • マスター(ptp4l_master.conf)…priority1 248 priority2 249
  • スレーブ(ptp4l_slave.conf)…priority1 250 priority2 251
[global]
transportSpecific       1
priority1 250
priority2 251
ptp_dst_mac             01:80:C2:00:00:0E
p2p_dst_mac             01:80:C2:00:00:0E
logAnnounceInterval     1
logSyncInterval         -3
follow_up_info          1
announceReceiptTimeout  3
syncReceiptTimeout      3
neighborPropDelayThresh 800
min_neighbor_prop_delay -20000000
network_transport       L2
delay_mechanism         P2P
tx_timestamp_timeout	10

 

マスターとしてPTP通信を行う

今回の記事とは別になりますが、KR260をTSNをマスターとして通信することが可能です。

下記記事で紹介しています。是非一緒にご覧ください。(リンク先はこちら)

TSNスイッチとして使えるFPGAの評価ボード(KR260)

TSNスイッチとして使えるFPGAの評価ボード(KR260)
XilinxのKR260というFPGAボードはTSNに対応しています。 更にTSN対応のRJ-45(LAN)コネクタが2つあります。 TSN スイッチとして、またエンドポイントとしても使えることを紹介します。

 

参考記事

今回TSNとPTP通信をテストしていく上で、多くの記事を参考にさせていただきました。

この場を借りてお礼申し上げます。

 

  • PTPのステートなど詳細に記載されていた記事

 https://www.cisco.com/c/ja_jp/support/docs/ios-nx-os-software/ios-xr-software/217579-configure-ptp-and-synce-basics-with-cisc.html

  • LinuxでのPTP利用方法に関して丁寧に記載されていた記事

 https://network.oreda.net/knowledge/ptp-linux

  • ptp4lの出力結果について詳細に記載されていた記事

 https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/sec-verifying_time_synchronization

  • PTPマスターの選出方法に関して丁寧に記載されていた記事

 https://www.netone.co.jp/knowledge-center/blog-column/knowledge_takumi_223/

 

まとめ

TSN(Time Sensitive Networking)のイーサネット環境を作ることができました。

KR260というTSN対応のFPGAボードを使うことで個人でもテスト出来ています。

是非皆さまもLANカード(NIC)とKR260でTSNを試してみて下さい。

 

次の記事では今回のPTP通信がTSNの規格に適応したものかを解析しています。

よろしければ一緒にご覧ください。(リンク先はこちら)

TSNとPTPの違いは?通信テストの設定・ログから確認してみた

TSNとPTPの違いは?通信テストの設定・ログから確認してみた
TSNの環境構築して、PTPの通信テストを行いました。 そしてテストしたPTPの設定が、TSNの規格に適応しているのか確認してみました。 設定・ログを見直しながら、PTPとTSNの違いを確認した内容を紹介します。

コメント