そもそもSFPは光インターフェース用
SFPの仕様は光インターフェースの為であって、それが1000BASE-Tにも対応する用に拡張され、次に10/100/1000BASE-Tにも対応するようになったという経緯があります。その為、同じメーカーの製品であっても実装時期の違いなどにより複数の仕様が存在します。
正常に動作する組み合わせ
- SFPポートは光トランシーバーが接続されることしか想定していない場合
- 対向も同様に光用SFPポートであった時は1000BASE-Xのnegoも有効のまま接続、SerDes, 1000BASE-X auto negotiation enableの1000BASE-T SFPを使用。1000BASE-Tの仕様としては特殊な形態。
- 対抗が通常の1000BASE-Tであった場合は1000BASE-X negoをdisableに設定変更が必要、SerDes, 1000BASE-X auto negotiation disableの1000BASE-T SFPを使用
- "10000BASE-X auto-negotiation bypass"機能によってnegoがタイムアウトし自動的にdisableになる。SerDes, 1000BASE-X auto negotiation enableの1000BASE-T SFPを使用
- SFPポートが10/100/1000に対応している場合
- 明示的にHOSTに1000BASE-X auto negotiation disable設定をすれば。通常の10/100/1000と同等。SGMII, 1000BASE-X auto negotiation disableの1000BASE-T SFPを使用
仕様と動作の組み合わせパターン
スイッチ側 | SFP側 | 動作 | 対向 | |
---|---|---|---|---|
interface | 1000BASE-X nego | |||
SFPは光だけ | SerDes | enable | 100BASE-Tだけ使える | 対向もONもしくはtimeout bypass mode |
disable | スイッチでnegoをdisableすれば使える | ふつー | ||
SGMII | enable | 使用不可 | ||
disable | 使用不可 | |||
光を期待SGMIIにも対応 | SerDes | enable | 1000BASE-Tだけ使える | 対向もON |
disable | スイッチでnegoをdisableすれば使える | ふつー | ||
SGMII | enable | 10/100/1000可 | 対向もON | |
disable | スイッチでnegoをdisableすれば使える10/100/1000 | ふつー | ||
UTPを期待(-X neg off) | SerDes | enable | 使用不可 | |
disable | 使用不可SGMIIへ遷移 | |||
SGMII | enable | 使用不可? | ||
disable | 10/100/1000可 | ふつー |
一つの仕様の1000BASE-T SFPで様々な機器に対応する手法
1000BASE-X nego enable, bypass mode, SerDes
- 光SFPしか想定していない機器
- 光SFP対向の時は何も設定不要
- 光SFP対1000BASE-Tの時は1000BASE-X nego diableをHOSTとSFPに対して操作が必要
- 10/100/1000は未対応
- 10/100/1000対応SFPポート機器
- 1000BAE-T SFPと認識したら、SFPに対してSGMII,1000BAS-X auto nego diableを発行、HOST側も1000BAS-X nego disable処理,10/100有効処理
1000BASE-X auto nego disable, SerDes
- 光SFPしか想定していない機器
- 必ず1000BASE-X auto nego disableコマンドが必要
- 10/100/1000対応SFPポート
- 1000BAE-T SFPと認識したら、SFPに対してSGMII、10/100有効処理
スイッチとトランシーバー間の仕様
mode | 概要 |
---|---|
SGMII |
ciscoが提唱した1.25Gbpsに固定するモード。データが10 or 100のときなデータが乗っていないビット列を送る。
光の100M対応トランシーバーでも使用する。
|
SerDes | SGMIIで使われている伝送仕様だけを指す、レート変換無し |
Serial Interface Auto-negotiation bypass mode
IEEE 802.3z clause 37では両端がauto negotiationに対応していることが要求されている。
片側だけの場合linkのnegoが成立しない。この問題を回避する為にbypass modeがある。200msでタイムアウトしnegoを成立させる。
1)If 200ms have passed after 1000BASE-T link is up, and no 1000BASE-X ANEG abilities advertisements are received from MAC, and idles are receied from MAC.
2)Brigs up 1000BASE-X link.
Link確立条件の違い
光を使う1000BASE-SX/LXは規定以上の強さの光を受信するとLOS出力は変化する。しかし、論理的にlinkupは1000BASE-Xのネゴが終わってからで。機器のlink ランプが付くのもその後。
1000BASE-Tは受信信号強度を検出すする機能が無い。そのため、一般的にはLOSは常にON。
LOS (Loss of Signal) operation on the 1000BaseT SFP is different than for optical SFP applications. For models with RX_LOS enabled, RX_LOS signal is a 1000BASE-T linkup/link-down indicator and not a peak (AC) or voltage (DC) detector. For models where RX_LOS is disabled, RX_LOS is not used and is always tied to ground via 100-ohm resistor.
non DDM
(Digital diagnostic monitoring)光の受信レベルなどをモニタリングする機能。UTP用のトランシーバーには不要。
DOM(DIgital optical monitoring)情報を所得するスイッチ側の機能を差すような文章もあるがDDMと同義としているものも多数。
DOMは光レベルだけで、DDMはそれ以外に電圧や温度なども?
実際のトランシーバーの仕様例(初期値)
MII | 1000BASE-X auto nego | 1000BASE-T auto nego | MII SPEED | RX_LOS | ||
---|---|---|---|---|---|---|
FCLF8520 | SerDes? | disable | multirate | support | ||
FCLF8521 | SerDes? | enable | 1000BASE | no | 光だけ想定の箱用 | |
FCLF8522 | SerDes? | enable | multirate | support | ||
WST-SEAMIV-D6 | SGMII | enable | enable | multirate | support | |
WST-SEACIV-D6 | SerDes | enable | disable | 1000BASE | support | |
GLC-T/SFP-GE-T/GLC-TE
|
SerDes | enable | disable | 1000BASE | no | |
EX-SFP-1GE-T
SP7041-M1-JN
|
enable | multirate | no |
ciscoは様々なベンダーから調達している
PN | CLEI | METHODE | AVAGO | |
---|---|---|---|---|
GLC-T | 30-1410-02 | CNS8TUTAAA | SP7041 | ABCU-5710RZ-CS2 |
30-1410-03 | CNS8TUTAAB | |||
30-1410-04 | CNS8TUTAAC | SP7041_Rev_F | ||
SFP-GE-T | 30-1421-01 | IPUIAPARAA | SP7041-E | |
30-1421-02 | IPUIAPARAB | SP7041-E-R | ||
30-1421-03 | IPUIAPARAC | |||
GLC-TE | 30-1475-01 | CMUIAGBCAA | SP7041-TE | SBCU-5740ARZ-CS1 |
CLEI(Common Language Equipment Identifier)
実際のスイッチの仕様例
cisco Catalyst系列
多くの製品で10/100/1000をサポートしていない。Catalyst 2970、3560、および 3750 シリーズ スイッチのだけ 10/100/1000 の速度をサポート。
"show interface capabilities"によってそのSFPインターフェースが10/100/1000対応であるかが確認できる。
10/100/1000対応機種ではSFP認識後I2Cでコマンドを送りSGMIIモードに変更。
"nonegotiate"で1000BASE-Xnegoをdiable。Tは自動認識?
"no negotiation auto"
EdgeCore(AOS)
SFP portでは1000BASE-Tのみ、SerDes
Cumulus
1000BASE-Tのみ
auto swp1
iface swp1
link-autoneg off
link-speed 1000
E1000NIC Driver
調査中
CONFIG_QCOM_EMAC: Qualcomm Technologies, Inc. EMAC Gigabit Ethernet support
LINUX kernel
https://github.com/torvalds/linux/blob/master/drivers/net/phy/sfp.c
/* Setting the serdes link mode is guesswork: there's no |
* field in the EEPROM which indicates what mode should |
* be used. |
* |
* If it's a gigabit-only fiber module, it probably does |
* not have a PHY, so switch to 802.3z negotiation mode. |
* Otherwise, switch to SGMII mode (which is required to |
* support non-gigabit speeds) and probe for a PHY. |
*/ |
sfp_sm_mod_init -> sfp_sm_probe_phy -> phy_start
LINUX phylink
1G/2.5G/5G/10Gにも対応できるドライバーの実装。
組合せ試験(EdgeCore AS5812-54X+EdgeOS)
config | link | 1000 | 100 | 10G | |
---|---|---|---|---|---|
GLC-T(30-1410-02) | default | 常にON | 〇 | × | - |
GLC-T(30-1410-03) | default | 常にON | × | × | - |
SFP-GB-GE-T | default | × | × | - | |
WST-SEAMIV-D6 | default | × | × | - | |
WST-SFP+Cu-C | default | 常にON | 〇 | × | × |
WST-SFP+Cu-C | media-type 10g | 常にON | × | × | 〇 |
EdgeCore AS7712+Cumulus
Marvell Alaska 88E1111
各社の1000BASE-T SFPトランシーバーの大半がこのチップを使っており。HWCFG_MODEに設定によって起動後の初期値が決まる。
HWCFG_MODE[3:0] = |
|
1000 | 1000BASE-X without clock with 1000BASE-X to copper |
0100 | SGMII without clock |
0000 | SGMII with clock |
1100 | legacy SERDES10000BASE-X with out 1000BASE-X auto negotiation |
Revision1の問題
revision | release date | description | PHY ID |
---|---|---|---|
A0 | 0xc00c? | ||
A1 | |||
B0 | finisar 1st gen | 0xc10c? | |
B1 | |||
B2 | finisar 2nd gen | 0xC20C | |
C2 | 88E1112-C2 | 0x970C |
PHY Identifier 2 Page Any, Register 3 0:0 bit
root@as7712:~# i2cget -y -f 23 0x56 3 w 0xc20c
88E1111 : 1100-xxxx-0000-1100
88E1112 : 1001-xxxx-0000-1100
互換性があるコントローラ
broadcom BCM54616S
様々な「Auto negotiation」
- 1000BASE-X auto negotiation
IEEE 802.3 clause 37
duplex and flow control
トランシーバーとHOSTシステム両方が関わり双方が一致している必要がある
SFP 1000BASE-X auto-negotiation bypass mode - 1000BASE-T auto negotiation
IEEE 802.3 clauses 28 and 40
UTPでの伝送速度のネゴ、MDI/MDIX
トランシーバー単体で処理が収まる - SGMII auto negotiation
cisco Specflication - GBIC mode auto negotiation
- Auto Media Detect Auto negotiation
操作可能なレジスター
change to 10/100/1000 SGMII
PHY 0xAC(0x56)
Register Address | Write Data | Description |
---|---|---|
0x1B | 0x9084 | enable SGMII mode(0100) |
0x09 | 0x0F00 | Advertise 1000BASE-T Full/Half-duplex |
0x00 | 0x8140 | Apply Software Rest |
0x04 | 0x0DE1 | Adverise100/10BASE-T Full/Half |
0x00 | 0x9140 | Apply Software Reset |
0x1B | 0x808C | Change HWCFG mode to non-GBIC |
change to 1000BASE SerDes only
PHY 0xAC(0x56)
register | write data | dectiption |
---|---|---|
0x1B | 0x9088 | enable SerDes mode(1000) |
0x00 | 0x8140 | Apply software reset |
0x16 | 0x0001 | select page 1 |
0x00 | 0x9140 | enable 1000BASE-T nego |
0x16 | 0x0000 | select page 0 |
action | register write data |
---|---|
1000BASE-X auto nego disable | 0x1B:0x808C, 0x00:0x8140 |
1000BASE-X auto nego enable | 0x1B:0x9088, 0x00:0x8140 |
1000BASE-T auto nego disable | 0x16:0x0001, 0x00:0x8140, 0x16:0x0000 |
1000BASE-T auto nego enable | 0x16:0x0001, 0x00:0x9140, 0x16:0x0000 |
SGMII auto nego disable | 0x16:0x0001, 0x00:0x8140, 0x16:0x0000 |
SGMII mode change
- write 0x9084 to 0x1B to Enable SGMII mode
- write 0x0F00 to 0x09 to Advertise 1000BASE-T Full/Half-Duplex
- write 0x8140 to 0x00 to Apply Software Reset
- write 0x0de1 to 0x04 to Advertise 100/10BASE-T Full/Half-Duplex
- write 0x9140 to 0x00 to Apply Software Reset
i2cset -y -f 0x56 0x1b 0x8490 w i2cset -y -f 0x56 0x09 0x000f w i2cset -y -f 0x56 0x00 0x0081 w i2cset -y -f 0x56 0x04 0xe10d w i2cset -y -f 0x56 0x00 0x0091 w
仕様の確認方法
基本情報の確認、I2Cアドレスは1bit shiftするので0x50(0xA0)と0x56(0xAC)。
まず刺さっているSFPポートのI2Cインターフェース番号を探す。
i2cdetect
ethtool -m swp31 hex on i2cdump -y -f 23 0x50
register 27は16進で0x1Bなので
root@as7712:~# i2cget -y -f 44 0x56 0x1b w 0x8890
x8xxもしくはxCxxだとSerial(SerDes)、x0xxもしくはx4xxだとSGMII
GLC-T(30-1410-02)のデータを取る
root@as7712:~# i2cget -y -f 44 0x56 0x1b w 0x8890 root@as7712:~# i2cset -y -f 44 0x56 0x16 0x0100 w root@as7712:~# i2cget -y -f 44 0x56 0x00 w 0x4019 1000BSE-X enable / 1000BASE-T enable /
register 27(0x1B) = 0x8890
bit | description | |
---|---|---|
15 | 1 | disable fiber/copper nego |
14 | 0 | reserved |
13 | 0 | copper link |
12 | 1 | serial auto nego bypass enable |
11 | 0 | serial auto nego bypass status auto nego completed |
10 | 0 | INIT active high |
9 | 0 | enable automatic medium register selection |
8 | 0 | DTE detect status hysteresis 0100 |
7 | 1 | |
6 | 0 | |
5 | 0 | |
4 | 0 | link partner does not need FTE power |
3 | 1 | HWCFG = 1000,serial 1000BASE-X nego on |
2 | 0 | |
1 | 0 | |
0 | 0 |
register 9
register 4
手元にあった1000BASE SFPのデータ
|
0x1B | 0x04 | 0x09 | HWCFG | interface |
1000BASE-X
auto nego
|
1000BASE-X
nego bypass
|
1000BASE-T
auto nego
|
---|---|---|---|---|---|---|---|---|
GLC-T 02 | 0x8890 | 0x010C | 0x000E | 1000 | SerDes | enable | enable | |
GLC-T 03 | 0x8890 | 0x010C | 0x000E | 1000 | SerDes | enable | enable | |
WST-SEAMCV | 0x8480 | 0xE10D | 0x000F | 0100 | SGMII | disable | disable | enable |
WST-SEAMIV | ||||||||
GB-GE-T | 0x8480 | 0xE10D | 0x000F | 0100 | SGMII | disable | disable | enable |
WST-SEACIV-R6 | 0x8C80 | 0x010C | 0x000E | 1100 | SerDes | disable | disable | |
WST-SEAC |
0x8890 | 0x000F | 1000 | |||||
Finisar 8521 | 0x8890 | 0x010c | 0x000e |
SFF INF-8074
トランシーバーの種別情報などは定義されているが。negoの enable/disable操作などは規定なし。
DOM/DDMの規定もなし。
SFF-8472
0xA2 : Diagnostics
Links
FINISAR 1000BASE-T SFP's FAQ
https://www.finisar.com/sites/default/files/resources/an-2036_1000base-t_sfp_faqreve1.pdf
http://www.methode.com/Documents/TechnicalLibrary/SFP_Ethernet_Auto_Negotiation.pdf
SGMII(Serial-GMII) revision 1.8 2011/07/02
cisco ENG-46158 / 46080