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を入れるまでを下記記事にて紹介しています。
TSN通信の接続先はLANカード(NIC)で対応
KR260でTSNで通信テストさせるためには、接続先のデバイスが必要になります。
IEEE-1588/PTP対応の安いLANカード(NIC)を購入して、接続先(マスター)にしています。
※本当はKR260が2台あれば一番良いのですが、1台約$400するので2台目は諦めました。
LANカードならば数千円程度で購入できます。
PTP対応LANカードの通信方法・詳細に関しては下記記事で紹介しています。
IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた
Xilinxの公式ページ
今回の記事の手順に関しては、基本的に公式ページのTSNのデモ実装方法です。
同様にテストする方は公式ページも参考お願いします。
KR260でTSN通信テストする準備
KR260でTSN通信のテストする準備を進めていきます。
上記記事のKR260のセットアップした前提で、下記以降の手順を実施しています。
アップデートやダウンロードも多くあり、有線LANの接続が必要です。
4つあるLANコネクタの右上(PS側)に繋げます。
Timezoneとlocaleの設定
Timezoneとlocaleの設定をしておきます。
公式の手順通り、ここではアメリカの時刻設定をしています。
1 2 3 |
ubuntu@kria:~$ sudo timedatectl set-ntp true ubuntu@kria:~$ sudo timedatectl set-timezone America/Los_Angeles ubuntu@kria:~$ timedatectl |
1 2 3 4 |
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しときます。
1 2 3 |
sudo add-apt-repository ppa:xilinx-apps sudo apt update sudo apt upgrade |
KR260用のパッケージを確認します。
今回は「pmod-rs485-test」というTSNのデモアプリケーションを使います。
また「mv-defect-detect」というカメラと10G SFP+を使った別のデモもありました。
1 2 3 4 5 6 7 8 9 10 |
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デモのファームウェアをインストールをします。
1 |
buntu@kria:~$ sudo apt install xlnx-firmware-kr260-tsn-rs485pmod |
公式の手順で下記サービスを再スタート推奨していたので実施しておきます。
(今後修正予定ということです)
1 |
ubuntu@kria:~$ sudo systemctl restart dfx-mgr.service |
また他インストールに関しても、必要なとこはy(es)押して進めていきます。
1 2 |
sudo apt install xlnx-app-kr260-pmod-rs485-test sudo apt install xlnx-app-kr260-tsn-examples |
パスも繋げておきます。もしこれ以降に電源OFFした場合は再実施した方が良さそうです
(公式にも必要ならば~/.bashrcに記載推奨の旨が書かれていました)
1 2 |
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で繋ぐデモのためだと思われます。
1 2 3 4 5 |
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 |
1 2 3 |
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」で使用できない状況です。
1 2 3 4 5 |
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」となっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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というポートが追加されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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)を動かしてみた
linuxptpをインストール
PTP通信に必要なパッケージ(linuxptp)をインストールします。
またethtoolは使用するLANカードがPTP通信可能か確認するために使います。
1 2 |
sudo apt install ethtool sudo apt install linuxptp |
TSNと通信可能なLANカード(NIC)かを確認する
搭載したLANカード(NIC)がPTP通信可能かを確認していきます。
まずifconfigでインターフェース名を確認します。(筆者の場合はenp4s0でした)
1 2 3 4 5 6 7 8 |
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と通信が出来ません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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」
1 |
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」の設定ファイルを作ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[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)ファイルが作成が作成されます。
1 |
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通信のログを見てみます。開始からイベントがある毎に記録されています。
1 2 3 4 5 6 |
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」
1 2 3 |
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」を付けることでスレーブの設定ファイルを読み込みます。
下記結果となりました。スレーブではマスタークロックと同期オフセットの各値も出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
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にログファイルが保存されています。
また下記コマンドで、ログファイルを順次出力することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[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とPTP通信をテストしていく上で、多くの記事を参考にさせていただきました。
この場を借りてお礼申し上げます。
- PTPのステートなど詳細に記載されていた記事
- LinuxでのPTP利用方法に関して丁寧に記載されていた記事
https://network.oreda.net/knowledge/ptp-linux
- ptp4lの出力結果について詳細に記載されていた記事
- 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の違いは?通信テストの設定・ログから確認してみた
コメント