MII, RMII, GMII, RGMII: PHY-এর সঙ্গে প্যারালাল ইন্টারফেস
প্যারালেল মিডিয়া-ইন্ডিপেন্ডেন্ট ইন্টারফেসগুলো কয়েক সেন্টিমিটার PCB-এর ওপর দিয়ে একটি MAC-কে কপার PHY চিপের সঙ্গে যুক্ত করে: রাউটার, ছোট সুইচ, অ্যাক্সেস পয়েন্ট, ইন্ডাস্ট্রিয়াল কন্ট্রোলার এবং RJ45-যুক্ত প্রতিটি এমবেডেড বোর্ডের ভেতরে। এগুলো কখনো ট্রান্সিভার কেজ পর্যন্ত পৌঁছায় না, তবে যা পৌঁছায় তার সবকিছুর রেফারেন্স পয়েন্ট এগুলোই: SGMII হলো “সিরিয়ালাইজড GMII”, XGMII হলো “10G-তে GMII”, আর কপার SFP-এর ভেতরের PHY অভ্যন্তরীণভাবে এদের একটির ভাষায় কথা বলে। এই পেজে MII, RMII, GMII ও RGMII-এর পিন, ক্লক ও টাইমিং, RGMII ডিলে সমস্যা, ইন-ব্যান্ড স্ট্যাটাস, MDIO ম্যানেজমেন্ট এবং প্রতিটি ইন্টারফেসে যে ত্রুটিগুলো দেখা দেয়, তা দেওয়া হয়েছে।
MII (IEEE 802.3 ক্লজ 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-এ একটি PHY |
এখনো মাইক্রোকন্ট্রোলার ও FPGA-তে পাওয়া যায়; পিনের সংখ্যার কারণে RMII এর জায়গা নিয়েছে।
RMII (RMII কনসোর্টিয়ামের স্পেসিফিকেশন 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 (ক্লজ 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 (রিডিউসড GMII, HP/Marvell স্পেসিফিকেশন 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 পরে পৌঁছাতে হয় (সেটআপ/হোল্ড উইন্ডো)। এটি পাওয়ার তিনটি উপায়:
| মোড | কে ডিলে যোগ করে | ডিভাইস-ট্রি 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
টেন-বিট ইন্টারফেস: 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 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
| বিষয় | ক্লজ 22 | ক্লজ 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 |
এর বিপরীতে প্লাগেবল মডিউল I²C দিয়ে পরিচালিত হয়, MDIO দিয়ে নয় (টু-ওয়্যার ইন্টারফেস)। কপার 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 | এন্টারপ্রাইজ সুইচ (কোয়াড/অক্টাল 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 শ্রেণির একটি চিপ) বসে সেই একই I²C-এর পেছনে, যা CodingBox পড়ে। কপার মডিউল 1G-তে কাজ করে কিন্তু 10/100-এ করে না, তখন উত্তর খুঁজতে হয় ওই PHY-এর কনফিগারেশনে এবং হোস্টের SGMII/1000BASE-X মোডে, A0h-এর শনাক্তকরণ বাইটে নয় (কপার ইথারনেট ও DAC, SGMII ও সিরিয়াল গিগাবিট)।