MII、RMII、GMII、RGMII:PHY へのパラレルインターフェース
パラレルのメディア非依存インターフェースは、数センチメートルの PCB 上で MAC と銅 PHY チップを接続します——ルーター、小型スイッチ、アクセスポイント、産業用コントローラー、そして RJ45 を持つあらゆる組み込みボードの内部で使われています。これらがトランシーバーケージに達することはありませんが、そこに達するすべてのものにとっての基準点です。SGMII は「シリアル化された GMII」、XGMII は「10G の GMII」であり、銅 SFP 内部の PHY はそのうちの1つを内部的に話します。このページでは、MII、RMII、 GMII、RGMII のピン、クロック、タイミング、RGMII の遅延問題、インバンドステータス、 MDIO 管理、そして各インターフェースが発生させる障害について説明します。
MII(IEEE 802.3 Clause 22)
| 項目 | 値 |
|---|---|
| レート | 10 と100 Mb/s |
| データ | 4ビット TXD[3:0]、4ビット RXD[3:0] |
| クロック | TX_CLK と RX_CLK はPHY 側から:25 MHz(100M)、2.5 MHz(10M) |
| 制御 | TX_EN、TX_ER、RX_DV、RX_ER、CRS(キャリアセンス)、COL(コリジョン) |
| 管理 | MDC、MDIO(共有) |
| 信号数 | データ/制御16 + 管理2 |
| 電圧レベル | 5 V/3.3 V TTL |
| 到達距離 | 数 cm。MAC 1つにつき PHY 1つ |
マイクロコントローラーや FPGA では今も使われていますが、ピン数の点で RMII に取って代わられています。
RMII(RMII Consortium spec v1.2)
| 項目 | 値 |
|---|---|
| レート | 10 と100 Mb/s |
| データ | 2ビット TXD[1:0]、RXD[1:0] |
| クロック | 単一のREF_CLK 50 MHz。MAC と PHY で共有。発振器、MAC、または PHY(PHY クロック出力モード)のいずれかが供給元 |
| 制御 | TX_EN、CRS_DV(キャリアセンスとデータ有効の多重化)、RX_ER(任意) |
| 信号数 | 7–9 |
| 10 Mb/s モード | 各ニブルを50 MHz で10回繰り返す |
| 到達距離 | cm 単位 |
50 MHz の基準クロックのトポロジーは、RMII の典型的な不具合の原因です。PHY が外部クロックを期待しているのに、SoC は PHY がクロックを駆動すると想定していると、リンク LED は正常なのにインターフェースが機能しないという状態になります。
GMII(Clause 35)
| 項目 | 値 |
|---|---|
| レート | 1000 Mb/s。10/100 では MII シグナリングにフォールバック |
| データ | 8ビット TXD[7:0]、RXD[7:0] |
| クロック | 送信はMAC からの GTX_CLK 125 MHz。受信は PHY からの RX_CLK 125 MHz。PHY からの TX_CLK は10/100 フォールバック時のみ使用 |
| 制御 | TX_EN、TX_ER、RX_DV、RX_ER、CRS、COL |
| 信号数 | 24 + 管理用 |
| 電圧レベル | 2.5 V(多くは3.3 V 許容) |
| 到達距離 | cm 単位。125 MHz シングルデータレートではタイミングバジェットが厳しい |
現在では主にオンチップまたは FPGA のインターフェースです。ボード上では RGMII がその座を奪いました。
RGMII(Reduced GMII、HP/Marvell specification v1.3 および v2.0)
| 項目 | 値 |
|---|---|
| レート | 10/100/1000 |
| データ | 4ビット TXD[3:0] と RXD[3:0]、ダブルデータレート:立ち上がりエッジで下位ニブル、立ち下がりエッジで上位ニブル |
| クロック | TXC 125 MHz(MAC から)、RXC 125 MHz(PHY から)。100M/10M では25/2.5 MHz |
| 制御 | TX_CTL(立ち上がりで TX_EN、立ち下がりで TX_EN xor TX_ER)、RX_CTL(RX_DV/RX_DV xor RX_ER) |
| 信号数 | 12 |
| 電圧レベル | 2.5 V(v1.3)、1.5 V HSTL または1.8 V(v2.0 オプション)。一部の PHY では3.3 V |
| 到達距離 | 長さを揃えた配線で10–15 cm 以下 |
遅延の問題
RGMII では、受信側でクロックがデータエッジより1.5–2.0 ns 後に到達する必要があります(セットアップ/ホールドウィンドウ)。これを実現する方法は3つあります。
| モード | 遅延を加える主体 | デバイスツリーの phy-mode | 備考 |
|---|---|---|---|
| PCB 遅延(v1.3) | 約5 cm の追加クロック配線 | rgmii | 古典的だが壊れやすい |
| PHY 内部遅延(RGMII-ID、v2.0) | PHY が TX と RX のクロックに2 ns を加える | rgmii-id | 現在最も一般的 |
| MAC/SoC 内部遅延 | SoC が加える | MAC 側の遅延レジスタを伴う rgmii | — |
| 混合 | 片方向のみ PHY が対応 | rgmii-txid、rgmii-rxid | 片側のみが対応している場合 |
遅延を二重に加えたり(PCB と PHY の両方)、まったく加えなかったりすると、RGMII 特有の障害が発生します——1G ではリンクアップするものの CRC エラーが出るかトラフィックが流れず、100M では動作する(100M は周期が40 ns あり、スキューを許容できるため)。PHY の遅延レジスタまたは phy-mode を変更して修正します。
インバンドステータス
アイドル時、PHY は RXD[3:0] 上にリンク、速度、デュプレックスを出力し、MAC が MDIO の読み取りなしにクロック分周器を再設定できるようにします:RXD[0] がリンク、 RXD[2:1] が速度(00 = 10、01 = 100、10 = 1000)、RXD[3] がデュプレックスです。一部の MAC はこれを無視して MDIO ポーリングに頼ります。想定の食い違いがあると、PHY 側ではアップ、MAC 側ではダウンというリンク状態になります。
TBI と RTBI
Ten-Bit Interface:MAC/PCS と外部 SerDes または光 PHY との間で、8b/10b 符号化された1000BASE-X シンボルを伝送します(125 MHz で10ビット、RTBI は DDR で5ビット)。ボード上ではすでに廃れており、そのシリアル版の後継が1000BASE-X/SGMII です(SGMII とシリアルギガビット)。
比較
| インターフェース | ピン数(データ + 制御) | クロック | 最大レート | 電圧 | 一般的な用途 |
|---|---|---|---|---|---|
| MII | 16 | PHY からの25 MHz | 100M | 3.3/5 V | MCU、レガシー |
| RMII | 7–9 | 共有の50 MHz | 100M | 3.3 V | 組み込み SoC + PHY |
| SMII | ポートあたり2–3 | 125 MHz | 100M | 3.3 V | マルチポート PHY(Cisco) |
| GMII | 24 | 125 MHz(MAC 送信/PHY 受信) | 1G | 2.5 V | FPGA、オンチップ |
| RGMII | 12 | 125 MHz DDR | 1G | 2.5/1.8/1.5 V | ボード上の SoC ↔ PHY |
| SGMII | 4(2ペア) | 埋め込み1.25 GBd | 1G(10/100 は複製で対応) | CML | SoC ↔ PHY、SFP ケージ |
PHY 管理:MDIO/MDC
| 項目 | Clause 22 | Clause 45 |
|---|---|---|
| アドレッシング | 5ビットの PHY アドレス、5ビットのレジスタ(32レジスタ) | 5ビットのポート、5ビットのデバイス(PMA/PMD、PCS、PHY XS、DTE XS、AN、ベンダー)、16ビットのレジスタ |
| 主要レジスタ | 0:制御(リセット、速度、AN 有効化、ループバック)、1:ステータス(リンク、AN 完了)、2–3:PHY ID(OUI + モデル)、4:AN アドバタイズメント、5:リンクパートナー能力、9/10:1000BASE-T 制御/ステータス、17以降:ベンダー(RGMII 遅延、LED) | 1.x:PMA、3.x:PCS、7.x:AN、30.x/31.x:ベンダー |
| 速度 | MDC ≤ 2.5 MHz(実際にはもっと速いことが多い) | 同じ |
| Linux ツール | mii-tool -v eth0、phytool read eth0/1/0、ethtool eth0。ドライバーは phylib、phylink 経由 | phytool read eth0/1:1/0 |
これは、MDIO ではなく I²C で管理されるプラガブルモジュールとは対照的です(2線式インターフェース)。銅 SFP 内部の PHY は例外です——多くの設計では、そのモジュールの I²C 上のセカンダリアドレスを通じて MDIO レジスタにアクセスでき、ベンダーはこれを使って10/100 フォールバックとオートネゴシエーションの挙動を設定します。
一般的な PHY とそのインターフェース
| PHY ファミリー | インターフェース | 一般的なボード |
|---|---|---|
| Marvell 88E1111/88E1512/88E1510 | GMII、RGMII、SGMII、TBI | ルーター、銅 SFP モジュール(88E1111) |
| Realtek RTL8211F/RTL8201 | RGMII/RMII | SBC、コンシューマー向けルーター |
| Microchip KSZ9031/KSZ8081/LAN8720 | RGMII/RMII/RMII | 産業用、MCU ボード |
| TI DP83867/DP83848 | RGMII、SGMII/MII、RMII | 産業用 |
| Broadcom BCM54xxx | RGMII、SGMII、QSGMII | エンタープライズスイッチ(クアッド/オクタル PHY) |
| Marvell 88E1543/88E1548 | QSGMII クアッド | 48ポートアクセススイッチ |
インターフェースごとの障害
| 症状 | インターフェース | 原因 |
|---|---|---|
| 一度もリンクしない。PHY ID は正常に読める | RMII | REF_CLK の方向/供給元の不一致 |
| 100M は動作するが1G はトラフィックなし/CRC エラー | RGMII | 遅延モード(ID)が誤り、または二重になっている |
| PHY の LED はリンクアップだが MAC はダウンと報告 | RGMII/SGMII | 片側でインバンドステータスが無効、または MDIO ポーリングがない |
| 1G でパケットの半分が失われる | GMII/RGMII | 配線長のスキュー、誤った電圧レベル |
| MDIO 上に PHY が見つからない | すべて | 誤った PHY アドレス(ストラップピン)、MDIO プルアップの欠落 |
| 速度が10/100 に固定される | すべて | AN アドバタイズメントレジスタの制限、ケーブル、または1G 非対応の phy-mode |
CodingBox では
このページの内容は、モジュールの EEPROM を経由するものではありません——銅 SFP は例外で、その内部 PHY(一般的には88E1111クラスの部品)は、CodingBox が読み取るのと同じ I²C の先にあります。銅モジュールが1G では動作するのに10/100 では動作しない場合、答えは A0h の識別情報バイトではなく、その PHY の設定とホスト側の SGMII/ 1000BASE-X モードにあります(銅イーサネットと DAC、 SGMII とシリアルギガビット)。