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

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

IEEE-1588/PTP対応のLANカード(NIC)を購入してみました。

実際にPCにカードを取り付けて、PTPの動作確認まで実施しています

LANカード(NIC)の選定から、PTP通信までの内容を紹介します。

 

スポンサーリンク

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

IEEE-1588/PTP対応のLAN(NIC)カードを購入してみました。

※PTP…Precision Time Protocol(時刻同期のプロトコル)

買ったのは10GtekのIntel I210-T1搭載のLANカードです。

 

実際にPCにLANカードを接続して、PTPの動作確認まで試しています。

接続先のPTPのマスタークロックと同期させて、n(ナノ)単位の精度が取れています。

マスター・スレーブの動作含めて確認した内容を紹介します。

 

またLANカードの接続先には、TSN対応のFPGAボードとなっています。

そちらの設定に関しては下記記事で紹介しています。(リンク先はこちら)

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

TSN Ethernetの実装をFPGA(KR260)で試してみた
TSN(Time Sensitive Networking)のイーサネット環境を作ってみました。 KR260というTSN対応のFPGAボードを使ってテストしています。 TSNの環境構築から実装・通信テストまで一連の流れを紹介します。

 

PC標準LANはIEEE-1588/PTP非対応がほとんど

今回特別にLANカードを増設しているのは、大抵のPC標準のLANはPTP非対応のためです。

 

筆者所持のデスクトップPCの備え付きのLANでも確認しましたが、非対応でした。

調べると、「PTP Hardware Clock: none」というメッセージでした。

iotengineer@iotengineer-Inspiron-3650:~$ sudo apt install ethtool
iotengineer@iotengineer-Inspiron-3650:~$ ethtool -T enp2s0
Time stamping parameters for enp2s0:
Capabilities:
	software-transmit     (SOF_TIMESTAMPING_TX_SOFTWARE)
	software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)
	software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
PTP Hardware Clock: none
Hardware Transmit Timestamp Modes: none
Hardware Receive Filter Modes: none

 

確認したPCは下記記事でも紹介したDellのInspirion 3650で標準的なデスクトップです。

ifconfigで見ると、有線LANの名前は「enp2s0」でした。

中古のPCにグラボを増設してみた!NVIDIA GeForce GT 710編

中古のPCにグラボを増設してみた!NVIDIA GeForce GT 710編
中古のデスクトップにグラボを増設(後付け)してみました。 格安のNVIDIA GeForce GT 710ですが、問題なく動作確認できています。 中古PCの購入から、グラフィックボードの増設までの流れを紹介します。

 

ラズパイもIEEE-1588/PTP非対応

ラズパイのような開発・評価ボードでもどうかと確認してみました。

やはりラズパイでも「PTP Hardware Clock: none」でPTP非対応でした。

pi@raspberrypi:~ $ ethtool -T eth0
Time stamping parameters for eth0:
Capabilities:
	software-transmit     (SOF_TIMESTAMPING_TX_SOFTWARE)
	software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)
	software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
PTP Hardware Clock: none
Hardware Transmit Timestamp Modes: none
Hardware Receive Filter Modes: none

 

ちなみにPTP非対応のLANでPTP通信をしても、もちろんエラーが出ます。

linuxptpのptp4lを使ったログの結果や、hwstampの結果を貼り付けておきます。

やはりPTPのハードウェアクロックがなく、タイムスタンプが作れていない様子です。

ptp4l[3561.074]: interface 'eth0' does not support requested timestamping mode
failed to create a clock
pi@raspberrypi:~ $ hwstamp_ctl -i eth0 -r 7 -t 1
Device driver does not have support for non-destructive SIOCGHWTSTAMP.
SIOCSHWTSTAMP failed: Operation not permitted

 

IEEE-1588/PTP対応のLAN(NIC)カードを購入する

PTPテストするために、対応したLAN(NIC)カードか開発ボードを入手する必要があります。

※LANカードもNIC(Network Interface Card)も同じ意味で記載しています。

今回の目的としては下記のため、PTP対応の安いLANカードを購入する流れにしました。

  • PTPを使ったTSN通信をテストしたいだけ
  • あくまで個人的なテストのため、なるべく安く済ませたい
  • LANカードが挿せる、LinuxのデスクトップPCは所持している

 

linuxptpで動作できるLANカードを選ぶ

linuxptpというパッケージを使う予定のため、公式で実績があるカードを選びました。

下記公式HPを見るとIntelの82574, 82580, 82599, i210のLANカードを使っていました。

 http://linuxptp.sourceforge.net/

 

また接続先のFPGAボードでもi210が実績あるLANカードでした。

そのため、今回はAmazonでも安く簡単に購入できるi210のLANカードを購入してみました。

 

PCにLANカードを装着します

今回購入した10GtekのIntel I210-T1搭載のLANカードです。

IntelのI210が搭載されています。

 

I210の中にも細かい型番で分かれますが、末尾が「AT」品でした。

メーカのICのHPを調べても、IEEE-1588対応の旨が記載されていました。

 

PCIE接続でPCに取り付け可能です。

PCの空いているPCIE(x1)スロットにLANカードを取り付けます。

筆者のデスクトップPCにはPCIE(x1)スロットが余っていました。

 

挿すだけで簡単に接続できます。LANカードをPCに装着できました。

 

外から見ると、普通のLANコネクタと変わりありません。

 

PTP通信を確認する

(筆者のPCでは)特にドライバのインストールも不要で、問題なく動作できました。

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

PTP Hardware Clock: 0

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)

 

PTP接続先がいない状態の通信テスト

まずは接続先がいない状態で確認していきます。

IEEE-1588/PTP対応のLANカードを接続したPCのみでのテストです。

 

接続先がいない状態で、PTPの通信(ptp4l)を試すと下記結果でした。

初期化(INIT_COMPLETE)はされますが、相手先がいなく「port 1: link down」となっています。

また「FAULT_DETECTED (FT_UNSPECIFIED)」とメッセージも出ていました。

iotengineer@iotengineer-Inspiron-3650:~$ sudo ptp4l -m -i enp4s0
ptp4l[43144.496]: selected /dev/ptp0 as PTP clock
ptp4l[43144.497]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[43144.497]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[43144.497]: port 1: link down
ptp4l[43144.497]: port 1: LISTENING to FAULTY on FAULT_DETECTED (FT_UNSPECIFIED)
ptp4l[43144.498]: selected local clock 6cb311.fffe.529d82 as best master
ptp4l[43144.498]: assuming the grand master role

 

PTP接続先がいる状態での通信テスト

次にPTP接続先がいる状態での通信テストを行います。

今回はTSN(Time Sensitive Networking)対応のFPGAボードに接続しました。

TSNにはgPTP(PTPを更に産業用に適応したもの)が使われています。

TSN対応のFPGAボードの詳細は下記記事にて紹介しています。(リンクはこちら)

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

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

 

また今回の通信テストの設定などに関しては、下記記事で紹介しています。

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

TSN Ethernetの実装をFPGA(KR260)で試してみた
TSN(Time Sensitive Networking)のイーサネット環境を作ってみました。 KR260というTSN対応のFPGAボードを使ってテストしています。 TSNの環境構築から実装・通信テストまで一連の流れを紹介します。

 

※このテストに関しては、趣味で通信テストしているレベルです。参考程度にお願いします

 

LANカード(NIC)側をマスタークロックとした場合

PTPのマスタークロック(基準クロック)をLANカード(NIC)にした場合のテストです。

(FPGAボード側がスレーブ、またTSNスイッチとなる場合です)

 

下記のようにptp4lを実行した場合の出力ログ(ptplog)です。

マスタークロックはLANカードのものが選ばれています。

「selected local clock 6cb311.fffe.529d82 as best master」

iotengineer@iotengineer-Inspiron-3650:~$ sudo ptp4l -P -2 -H -i enp4s0  -m -f ptp4l_master.conf >& ptplog &
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

 

またifconfigでLAN(NIC)カードの情報を見ると、Ethernetの番号が一部一致していました。

「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  (イーサネット)
        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  

 

LANカード(NIC)側をスレーブとした場合

次にPTPのマスタークロックをFPGAボードに持たせた場合です。

(LANカード(NIC)をスレーブとしています)

※前のテストからFPGAボード側のptp4lの設定ファイルを再読み込みしています。

 

マスタークロックはFPGAボードのものに切り替わっています。

「selected best master clock 000a35.fffe.00012e」 ※先ほどは「6cb311.fffe.529d82」

またステートもMASTER→RS_SLAVEと遷移しています。

ptp4l[1557.751]: port 1: new foreign master 000a35.fffe.00012e-1
ptp4l[1561.751]: selected best master clock 000a35.fffe.00012e
ptp4l[1561.751]: port 1: MASTER to UNCALIBRATED on RS_SLAVE
ptp4l[1562.126]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l[1562.877]: rms  410 max  551 freq   -520 +/- 298 delay   183 +/-   0
ptp4l[1563.877]: rms   85 max  133 freq   -257 +/- 109 delay   183 +/-   0
ptp4l[1564.877]: rms  137 max  146 freq    -19 +/-  34 delay   182 +/-   0
ptp4l[1565.878]: rms   84 max  110 freq    +23 +/-   5 delay   182 +/-   0
ptp4l[1566.878]: rms   26 max   42 freq     -3 +/-   9 delay   182 +/-   0
ptp4l[1567.878]: rms    5 max    9 freq    -28 +/-   7 delay   182 +/-   0
ptp4l[1568.879]: rms    6 max    9 freq    -38 +/-   4 delay   182 +/-   0
ptp4l[1569.879]: rms    9 max   12 freq    -51 +/-   5 delay   182 +/-   0
ptp4l[1570.879]: rms    5 max    8 freq    -49 +/-   4 delay   182 +/-   0
ptp4l[1571.880]: rms    2 max    3 freq    -46 +/-   3 delay   182 +/-   0
ptp4l[1572.880]: rms    3 max    5 freq    -45 +/-   4 delay   182 +/-   0
ptp4l[1573.881]: rms    6 max   10 freq    -34 +/-   4 delay   182 +/-   0
ptp4l[1574.881]: rms    6 max   10 freq    -28 +/-   3 delay   182 +/-   0
ptp4l[1575.881]: rms    4 max    8 freq    -36 +/-   5 delay   182 +/-   0
ptp4l[1576.882]: rms    8 max   12 freq    -49 +/-   5 delay   182 +/-   0
ptp4l[1577.882]: rms    4 max    7 freq    -49 +/-   4 delay   182 +/-   0
ptp4l[1578.882]: rms    4 max    7 freq    -52 +/-   3 delay   182 +/-   0
ptp4l[1579.883]: rms    4 max    7 freq    -56 +/-   4 delay   182 +/-   0

 

ログ出力のように、LANカードがマスタークロックに対して同期をとっています。

最初はオフセットrmsが410(ns)ですが、徐々に同期が合って最後は数(ns)です。

 

まとめ

IEEE-1588/PTP対応のLAN(NIC)カードを購入してみました。

実際にPCにカードを取り付けて、マスター・スレーブ含めてPTPの動作確認できました。

Intel I210-T1搭載のLANカードで数千円のものですが、問題なくPTP通信が出来ました。

 

よろしければ、是非皆さまもテストしてみて下さい。

 

次の記事では、PTP通信が使われているTSN Ethernetの実装をテストしています。

是非一緒にご覧ください。(リンク先はこちら)

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

TSN Ethernetの実装をFPGA(KR260)で試してみた
TSN(Time Sensitive Networking)のイーサネット環境を作ってみました。 KR260というTSN対応のFPGAボードを使ってテストしています。 TSNの環境構築から実装・通信テストまで一連の流れを紹介します。

コメント