MII, RMII, GMII, RGMII: PHY से समानांतर इंटरफ़ेस
पैरेलल मीडिया-इंडिपेंडेंट इंटरफ़ेस MAC को कॉपर PHY चिप से PCB के मुट्ठी भर सेंटीमीटर के ऊपर जोड़ते हैं — राउटर, छोटे स्विच, एक्सेस पॉइंट, इंडस्ट्रियल कंट्रोलर और RJ45 वाले हर एम्बेडेड बोर्ड के अंदर। ये कभी ट्रांसीवर केज तक नहीं पहुँचते, लेकिन जो भी वहाँ तक पहुँचता है उसके लिए ये रेफ़रेंस पॉइंट हैं: SGMII “सीरियलाइज़ किया गया GMII” है, XGMII “10G पर GMII” है, और कॉपर SFP के भीतर का PHY अंदर ही अंदर इनमें से एक बोलता है। यह पेज MII, RMII, GMII और RGMII के लिए पिन, क्लॉक और टाइमिंग, RGMII डिले प्रॉब्लम, इन-बैंड स्टेटस, MDIO मैनेजमेंट, और हर इंटरफ़ेस से पैदा होने वाली ख़राबियाँ बताता है।
MII (IEEE 802.3 Clause 22)
| आइटम | वैल्यू |
|---|---|
| रेट | 10 और 100 Mb/s |
| डेटा | 4-bit TXD[3:0], 4-bit 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 एक PHY |
अब भी माइक्रोकंट्रोलर और FPGA पर मिलता है; पिन गिनती के लिए इसकी जगह RMII ने ले ली।
RMII (RMII Consortium spec v1.2)
| आइटम | वैल्यू |
|---|---|
| रेट | 10 और 100 Mb/s |
| डेटा | 2-bit TXD[1:0], RXD[1:0] |
| क्लॉक | एक REF_CLK 50 MHz, MAC और PHY दोनों शेयर करते हैं; सोर्स ऑसिलेटर, MAC, या PHY हो सकता है (PHY-clock-out मोड) |
| कंट्रोल | 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-bit 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 and v2.0)
| आइटम | वैल्यू |
|---|---|
| रेट | 10/100/1000 |
| डेटा | 4-bit 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 बाद पहुँचे (सेटअप/होल्ड विंडो)। इसे हासिल करने के तीन तरीक़े हैं:
| मोड | डिले कौन जोड़ता है | डिवाइस-ट्री 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 bit, RTBI में DDR पर 5 bit)। बोर्ड पर अब पुराना पड़ चुका; इसका सीरियल उत्तराधिकारी 1000BASE-X/SGMII है (SGMII और सीरियल गीगाबिट)।
तुलना
| इंटरफ़ेस | पिन (डेटा + ctrl) | क्लॉक | अधिकतम रेट | वोल्टेज | सामान्य इस्तेमाल |
|---|---|---|---|---|---|
| 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 tx / PHY rx) | 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-bit PHY एड्रेस, 5-bit रजिस्टर (32 रजिस्टर) | 5-bit पोर्ट, 5-bit डिवाइस (PMA/PMD, PCS, PHY XS, DTE XS, AN, वेंडर), 16-bit रजिस्टर |
| मुख्य रजिस्टर | 0 control (रीसेट, स्पीड, AN enable, लूपबैक), 1 status (लिंक, AN complete), 2–3 PHY ID (OUI + मॉडल), 4 AN advertisement, 5 link-partner ability, 9/10 1000BASE-T control/status, 17+ vendor (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 पर मैनेज किया जाता है (टू-वायर इंटरफ़ेस)। कॉपर SFP का इंटरनल PHY इसका अपवाद है: कई डिज़ाइन में इसके MDIO रजिस्टर मॉड्यूल के I²C पर एक सेकंडरी एड्रेस के ज़रिए पहुँच में होते हैं, और विक्रेता इसी तरह 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 | एंटरप्राइज़ स्विच (quad/octal 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 advertisement रजिस्टर, केबल, या 1G सपोर्ट के बिना phy-mode |
CodingBox में
इस पेज पर कुछ भी मॉड्यूल के EEPROM से नहीं गुज़रता — सिवाय कॉपर SFP के, जिसका इंटरनल PHY (आमतौर पर 88E1111-क्लास पार्ट) उसी I²C के पीछे बैठा होता है जिसे CodingBox पढ़ता है। जब कोई कॉपर मॉड्यूल 1G पर काम करता है लेकिन 10/100 पर नहीं, तो जवाब उस PHY के कॉन्फ़िगरेशन और होस्ट के SGMII/1000BASE-X मोड में है, A0h पहचान बाइट में नहीं (कॉपर ईथरनेट और DAC, SGMII और सीरियल गीगाबिट)।