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)で試してみた
PC標準LANはIEEE-1588/PTP非対応がほとんど
今回特別にLANカードを増設しているのは、大抵のPC標準のLANはPTP非対応のためです。
筆者所持のデスクトップPCの備え付きのLANでも確認しましたが、非対応でした。
調べると、「PTP Hardware Clock: none」というメッセージでした。
1 2 3 4 5 6 7 8 9 10 |
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編
ラズパイもIEEE-1588/PTP非対応
ラズパイのような開発・評価ボードでもどうかと確認してみました。
やはりラズパイでも「PTP Hardware Clock: none」でPTP非対応でした。
1 2 3 4 5 6 7 8 9 |
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のハードウェアクロックがなく、タイムスタンプが作れていない様子です。
1 2 |
ptp4l[3561.074]: interface 'eth0' does not support requested timestamping mode failed to create a clock |
1 2 3 |
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
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) |
PTP接続先がいない状態の通信テスト
まずは接続先がいない状態で確認していきます。
IEEE-1588/PTP対応のLANカードを接続したPCのみでのテストです。
接続先がいない状態で、PTPの通信(ptp4l)を試すと下記結果でした。
初期化(INIT_COMPLETE)はされますが、相手先がいなく「port 1: link down」となっています。
また「FAULT_DETECTED (FT_UNSPECIFIED)」とメッセージも出ていました。
1 2 3 4 5 6 7 8 |
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ボードの詳細は下記記事にて紹介しています。(リンクはこちら)
また今回の通信テストの設定などに関しては、下記記事で紹介しています。
TSN Ethernetの実装をFPGA(KR260)で試してみた
※このテストに関しては、趣味で通信テストしているレベルです。参考程度にお願いします
LANカード(NIC)側をマスタークロックとした場合
PTPのマスタークロック(基準クロック)をLANカード(NIC)にした場合のテストです。
(FPGAボード側がスレーブ、またTSNスイッチとなる場合です)
下記のようにptp4lを実行した場合の出力ログ(ptplog)です。
マスタークロックはLANカードのものが選ばれています。
「selected local clock 6cb311.fffe.529d82 as best master」
1 |
iotengineer@iotengineer-Inspiron-3650:~$ sudo ptp4l -P -2 -H -i enp4s0 -m -f ptp4l_master.conf >& ptplog & |
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 |
またifconfigでLAN(NIC)カードの情報を見ると、Ethernetの番号が一部一致していました。
「ether 6c:b3:11:52:9d:82」
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 |
LANカード(NIC)側をスレーブとした場合
次にPTPのマスタークロックをFPGAボードに持たせた場合です。
(LANカード(NIC)をスレーブとしています)
※前のテストからFPGAボード側のptp4lの設定ファイルを再読み込みしています。
マスタークロックはFPGAボードのものに切り替わっています。
「selected best master clock 000a35.fffe.00012e」 ※先ほどは「6cb311.fffe.529d82」
またステートもMASTER→RS_SLAVEと遷移しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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)で試してみた
コメント