SGMII、1000BASE-X、QSGMII、USXGMII:PHY と SFP へのシリアルインターフェース
1G の SFP ケージはいずれも 1.25 GBd のシリアルレーンを1本備えており、そのレーンはオシロスコープ上では見分けが付かない2つの方言を話せます。光ファイバーモジュールが前提とする IEEE のインターフェース 1000BASE-X と、10/100 Mb/s と異なるオートネゴシエーションを追加した Cisco の変種 SGMII です。銅線 SFP はこの両者の境界線上で動作し、「銅線 SFP は 1G ではリンクするのに 100 Mb/s のカメラだけリンクしない」という問い合わせの大半は、この方言の不一致が原因です。このページでは、2つのギガビット方言とそのオートネゴシエーション、2500BASE-X、マルチポートの QSGMII、マルチギガ向けの USXGMII と 10GBASE-T SFP+、そして Linux やスイッチがモードを選ぶ仕組みを扱います。
1000BASE-X:SFP 本来のインターフェース(Clause 36/37)
| 項目 | 値 |
|---|---|
| レート | 1.25 GBd、8b/10b → 1000 Mb/s ペイロード |
| レーン | 各方向1差動対(CML、AC 結合) |
| 符号化 | /K28.5/ コンマを伴う 8b/10b、順序集合 /C1/ /C2/(コンフィグレーション)、/I1/ /I2/(アイドル) |
| オートネゴシエーション | Clause 37:/C/ 順序集合でやり取りされる 16 ビットのコンフィグワード。全二重/半二重、ポーズ(対称/非対称)、リモートフォルト、確認応答を運ぶ。速度フィールドはなし:1000BASE-X は 1G 専用 |
| 用途 | スイッチ/NIC の SerDes → SFP ケージ;光ファイバー SFP(SX/LX/ZX/BiDi/CWDM)はそのままレーザーへ送る;PCS はホスト側にある |
光ファイバー SFP は透過的です。ホストが符号化した内容が、そのまま光として出力されます。だからこそ、1G の光ファイバーモジュールには「モード」がありません。ただし ポート にはモードがあり、それは 1000BASE-X でなければなりません(「SerDes」や「fiber」モードと表示されることが多く、相手側に AN がない場合は Cisco で speed nonegotiate を使います)。
SGMII:ギガビットに 10/100 を加えたもの(Cisco SGMII 仕様 v1.8)
| 項目 | 値 |
|---|---|
| レート | 同じく 1.25 GBd、8b/10b |
| 10/100 対応 | 各データバイトを 100 倍(10 Mb/s)または 10 倍(100 Mb/s)に複製し、ラインレートを 1.25 GBd に保つ |
| レーン | 2対;任意で 625 MHz の DDR クロック対(TX_CLK/RX_CLK)。ほとんどの SerDes 実装はクロックなしで動作する |
| オートネゴシエーション | SGMII コントロールワード(同じく /C/ 順序集合で運ばれる 16 ビット):bit 15 がリンク、bit 11–10 が速度(10/100/1000)、bit 12 がデュプレックス、bit 14 が ack。銅線側がネゴシエートした結果を MAC に伝えるため PHY → MAC 方向に送信される。Clause 37 の内容とは互換性がない |
| 用途 | MAC ↔ 銅線 PHY(Marvell 88E15xx、TI DP83867、Broadcom)、銅線 SFP 対応を望むボードでの SoC ↔ SFP ケージ、銅線 1000BASE-T SFP の内部 |
SGMII は MAC–PHY 間のインターフェースです。「オートネゴシエーション」は2段階で行われます。まず PHY とリンクパートナーの間のツイストペアで Clause 28 が行われ、その結果を SGMII コントロールワードが MAC に報告します。ホストが Clause 37 を想定しているのに SGMII ワードを受け取った場合(またはその逆の場合)、AN は完了しません。ポートで AN を無効化すること(speed nonegotiate、no negotiation auto、autoneg off)が通常の回避策ですが、これは 1G でのみ有効です。
二方式の間にある銅線 SFP
| ホストポートのモード | 銅線 SFP の挙動 | 10/100 クライアント |
|---|---|---|
| 1000BASE-X、AN オン | モジュールの PHY は Clause 37 に応答しなければならない。多くはそれをエミュレートするが、しないものもあり → AN オフまでリンクしない | 不可(速度フィールドがない) |
| 1000BASE-X、AN オフ | 銅線側が 1G をネゴシエートすれば 1G でリンク | 不可 |
| SGMII、AN オン | PHY がコントロールワードで 10/100/1000 を報告 | 可 |
| SGMII、AN オフ | 1G 固定 | 不可 |
Marvell 88E1111 系の銅線 SFP モジュールは、製造時に設定される EEPROM/ストラップに応じて、 SGMII または 1000BASE-X のいずれかがデフォルトになります。ベンダーは同じモジュールの「SGMII」版と「SerDes」版を別々に販売しており、モジュールの I²C 経由でアクセスできる PHY レジスタで切り替えられるものもあります。「1000BASE-T SFP 対応」と明記されたスイッチポートは、そのケージで SGMII を実装しています(銅線イーサネットと DAC)。
100BASE-FX SFP
100 Mb/s の光ファイバー SFP(100BASE-FX、1310 nm、2 km)は、ホストがレーンを 125 MBd、 4b/5b で動かすことを必要とします。これは全く別の PCS です。「100M SFP」に明示的に対応したポート(一部のキャンパススイッチの特定ポート、大半のルーター、データセンタースイッチはごく一部)でのみ動作し、それ以外ではモジュールは検出されてもリンクしません。ホストによっては、モジュール内部の外部 PHY による SGMII 複製で 100BASE-FX を実装しているものもあります(「100M over SGMII」SFP)。
2500BASE-X
| 項目 | 値 |
|---|---|
| レート | 3.125 GBd、8b/10b → 2.5 Gb/s |
| 規格 | IEEE によるものはなし(事実上の標準、1000BASE-X の 2.5 倍);Linux の phy-interface-type = "2500base-x" |
| AN | Clause 37 方式、無効化されていることが多い |
| 用途 | 2.5G SFP モジュール(2.5GBASE-T 銅線、2.5G 光ファイバー)、ホスト側に向かう GPON/EPON ONU スティック(2.5G 下り)、Wi-Fi 6 AP のアップリンク、一部の 2.5G スイッチ SFP ケージ |
マルチギガに相当する IEEE 規格は 2.5GBASE-X/5GBASE-R(802.3bz)ですが、大半のシリコンは 2500BASE-X または USXGMII を話します。
QSGMII:1レーンで4ポート分
| 項目 | 値 |
|---|---|
| レート | 5 GBd、8b/10b;4本の SGMII チャネルを時分割多重 |
| レーン | 4ポート分で2対 |
| 用途 | スイッチ ASIC ↔ 4連銅線 PHY(48 ポートのアクセススイッチ:48本の SGMII の代わりに12本の QSGMII レーン)、外部 SerDes を介した一部の4連ポート SFP ケージ設計 |
| バリエーション | QSGMII(Cisco)、一部の Qualcomm/Realtek SoC では「PSGMII」(5ポート)も |
通常の設計ではケージ上に現れませんが、4連 PHY ボードが SFP コンボポートを公開し、そのモードが PHY チャネルから引き継がれる場合には関係してきます。
USXGMII:1本の 10G レーンで 10 Mb/s から 10 Gb/s まで
| 項目 | 値 |
|---|---|
| レート | 10.3125 GBd、64b/66b(10GBASE-R の電気仕様) |
| 速度 | 10M、100M、1G、2.5G、5G、10G をシンボル複製で実現(SGMII を拡張したもの) |
| 仕様 | Cisco USXGMII(v1.2)、広く採用;Linux の usxgmii |
| マルチポート | USXGMII-M:1本の 10G レーン上で 4 × 2.5G、2 × 5G、4 × 1G+…(QSGMII と同様) |
| AN | 64b/66b のアイドル中の USXGMII AN ワードで、速度/デュプレックス/リンクを報告 |
| 用途 | ASIC ↔ マルチギガ PHY(2.5/5/10GBASE-T ポート)、10GBASE-T SFP+ モジュール(内蔵 PHY、例:Marvell AQR/Broadcom) |
10GBASE-T SFP+ モジュールは、通常の SFP+ ポートに対して 10GBASE-R(SFI)を提示し、10G でリンクします。1G/2.5G/5G のクライアントにも対応できるかどうかは、そのケージでホストが USXGMII のレート適応に対応しているかどうかによります。大半のスイッチは対応していないため、モジュールは 10G 専用として動作するか、内部で適応を行い、銅線側はより低速で動作しながらホストには 10G と報告します(速度とレート)。
ホストがモードを選ぶ仕組み
| ホスト | 仕組み |
|---|---|
| Linux の phylink/SFP | A0h のバイト 3–10(コンプライアンスコード)、12(公称レート)、36(拡張)、6 の bit 3(1000BASE-T)を読み取る:1000BASE-T → SGMII(SoC が SGMII を持たない場合は 1000BASE-X);1000BASE-SX/LX → 1000BASE-X;BR 3.1 GBd → 2500BASE-X;10G コード → 10GBASE-R;モジュール内部の銅線 PHY は I²C(アドレス 0x56/0xAC)経由でプローブされ、phylib が駆動する |
| スイッチ NOS | ポートのデフォルトはプラットフォームに依存(大半の 1G SFP ケージは SGMII 対応;SFP+/SFP28 は 1G では 1000BASE-X 専用のことが多い)、コマンドは speed 1000、speed nonegotiate、media-type sfp、negotiation auto、port-mode |
| NIC ドライバー | Intel:SFP+ ポートは 1G を 1000BASE-X のみでサポート(10/100 の銅線 SFP は非対応);Mellanox:一部モデルで 1000BASE-X 経由の 1G;Broadcom:ファームウェア次第(NIC ポート) |
| 銅線 SFP | PHY モードのストラップ/EEPROM(SGMII 版か SerDes 版か)、AN の挙動はベンダーのファームウェアが設定 |
不一致一覧表
| 症状 | 原因 | 対処法 |
|---|---|---|
| 銅線 SFP:1G のクライアントは問題ないが 10/100 が全くリンクしない | ポートが 1000BASE-X | SGMII 対応ポートに移すか、10/100 を 1G-to-host 変換の裏に隠すモジュールを使う |
| 光ファイバー SFP が AN オフのときしかリンクしない | 相手側が Clause 37 非対応(メディアコンバーター、一部の ONU)、または銅線モジュールからの SGMII ワード | speed nonegotiate / autoneg off |
| 100BASE-FX SFP は検出されるがリンクしない | ホストに 100M SerDes モードがない | 100M SFP 対応ポートを使うか、100BASE-FX-over-SGMII モジュールを使う |
| 2.5G SFP が 1G でリンクするか全くリンクしない | ホストに 2500BASE-X がない | 2.5G 対応ケージを選ぶか、レートフォールバック機能を持つモジュールを使う |
| ONU スティックはリンクするがすぐ切れる | 2500BASE-X か 1000BASE-X かの想定違い、AN | ホストを 2500BASE-X、AN オフに設定する(PON 光学部品) |
| 10GBASE-T SFP+ が 10G でしかリンクしない | ホストに USXGMII がない | 10G 専用として受け入れるか、内部レート適応を持つモジュールを使う |
| Linux:あるボードでは動くが別のボードでは動かない | phylink が EEPROM から別のインターフェースを選んだ;SoC にそのモードがない | dmesg で sfp: module … interface を確認し、準拠バイトまたはデバイスツリーを修正する |
CodingBox では
ホストの選択を左右するバイトは、すべて A0h にあります。コンプライアンスコード 3–10(1000BASE-T、SX、 LX、10G コード)、公称ビットレート 12、符号化 11(8b/10b か 64b/66b か)、拡張コンプライアンスコード 36 です。1000BASE-SX としてコーディングされた銅線モジュールは光ファイバーとして扱われ、 10/100 経路を失います。1000BASE-T のビットが誤って立った光ファイバーモジュールは、SGMII として駆動されてしまいます。CodingBox はこれらのフィールドを表示・編集できます(Check transceiver、コンプライアンスコード)。