ブログ

Armadillo-600シリーズ・Armadillo-IoTシリーズ:他の端末機器とのEthernet接続に問題が生じている場合の対策について

at_takuma.fukuda
2021年7月4日 18時50分

Ethernetによって機器同士を接続して相互に通信させる場合、 本来はコネクタの規格や通信速度・通信モードなどを厳密に合わせる必要があります。

しかし、近年は多くの機器に自動認識や自動切換の機能が搭載されており、 上記を意識せずにスムーズに通信を行う事が出来ます。

Armadilloシリーズの製品もこれらの機能を備えております。

しかしながら、それぞれの機器に搭載されたチップやファームウェア・ドライバ・動作状態などの組み合わせによっては、 自動認識が十分に機能せず、通信に失敗してしまうケースもございます。

このようなケースの場合には、自動認識・自動切換の機能を無効化し、 設定を固定して通信を行う必要があります。

Armadilloシリーズにおいて、自動認識・自動切換機能を無効化して設定を固定化する方法をご案内いたします。

オートネゴシエーション

2つの機器がEthernetによって通信を行う場合、それぞれの機器の通信速度および通信モード(半二重/全二重)が一致している必要があります。

こちらについても、特に意識せずケーブルを接続するだけで通信が出来ていることが殆どです。

これは、複数の機器同士がEthernetで接続された際に、
それぞれの機器がどの通信速度・通信モードをサポートしているかを発信しあい、
お互いの優先度の高い通信設定を選択して設定する、オートネゴシエーションという機能によるものです。

Armadilloシリーズの製品にもこの機能が実装されています。

通信トラブル

以上のような機能によって、Armadilloと他の機器とをEthernetケーブルを使用して比較的容易に通信させることが出来ていますが、
AutoMDI/MDI-Xによる自動認識が上手くいかないケースや、
オートネゴシエーションで対向機器の設定を読みだせないケース(特に対向機器がオートネゴシエーションに対応してない場合)等は、
通信が出来ない、頻繁にLink Up Link Downを繰り返す、通信が不安定となるなどの状況に陥ることがあります。

そこで、これらの機能を無効化して設定を固定化することで通信を正常化する方法をご案内します。

対処方法

ethtoolのインストール

ethtoolというパッケージを使用する事で、自動認識・自動調整機能の無効化と設定の固定化をコマンドで容易に実施することが出来ます。
設定を行いたいArmadilloをインターネットへ接続し、下記のコマンドを実行してください。

[armadillo]:~# apt-get update
[armadillo]:~# apt-get install ethtool

現在の状態確認

以下のコマンドを実行すると現在Ethernet通信がどのような設定になっているかが表示されます。
ここではArmadillo-640,Armadillo-IoT G3,Armadillo-IoT G3LなどのデフォルトのEthernetポート(eth0)を指定していますが、
必要に応じて変更してください。

[armadillo]:~# ethtool eth0

上記コマンドを実行すると下記のように結果が表示されます。
どのような通信設定をサポートしていて、現在の設定がどうなっているかが表示されています。

Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: Symmetric
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Speed: 10Mb/s ←通信速度
        Duplex: Half ←通信モード Half:半二重、Full:全二重
        Port: MII
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on ←オートネゴシエーションが有効か無効か
        Supports Wake-on: g
        Wake-on: d
        Link detected: no

設定の変更

ethtoolを使って設定を変更する場合は、以下のようにコマンドを実行します。

[armadillo]:~# ethtool -s [デバイス名] [変更したい設定] [設定値]
<code>
例えば、通信速度100Mbps、全二重通信に設定したい場合は、以下のようにコマンドを実行します。
<code>
[armadillo]:~# ethtool -s eth0 speed 100 duplex full autoneg off

末尾の「autoneg」がオートネゴシエーションの設定で、これを「off」にすることで無効化しています。

Auto-MDI/MDI-Xについて

2つの機器間のEthernet通信においてもう一点注意点がございます。
それはそれぞれの機器のEthernetポートのピンの規格と接続するケーブルの結線です。
Ethernetポートは、コネクタ内部のピンの送受信の役割の違いによって、MDI型とMDI-X型の2種類の規格に分けられます。
Ethernetポート同士を接続する場合は、
異なる規格のポート間ををストレート結線のケーブルで繋ぐか、
同じ規格同士のポート間をクロス結線のケーブルで繋ぐ必要がありました。

MDIはコンピュータを始めとする端末に使用され、MDI-Xはハブ等に使用されることがほとんどです。

そのため、本来複数の端末機器を接続する場合はクロスケーブルで接続する必要があります。
しかし、実際にはストレートケーブルでの接続でも問題無く通信出来ています。
これはAutoMDI/MDI-Xという機能によるものです。

AutoMDI/MDI-Xとは、対向機器のポートがMDIなのかMDI-Xなのかを自動で認識し、
相手の機器に合わせて自機のポートを調整する機能です。

現在多くの機器にこの機能が備わっており、ほとんどの機器を接続する際に、
その間Ethernetケーブルがストレートケーブルなのかクロスケーブルなのかを意識せず接続できるようになっています。
Armadilloシリーズの製品にもこの機能が搭載されています。

ArmadilloシリーズではethtoolでAutoMDI/MDI-Xを無効化する事は出来ません。
通信設定の変更などを行ってもEthernet通信の状態に改善が見られない場合は、
使用しているEthernetケーブルの結線の種類を確認し、異なる種類のものと交換する等してみてください。