MII, RMII, GMII, RGMII: อินเทอร์เฟซแบบขนานไปยัง PHY
อินเทอร์เฟซแบบขนานที่ไม่ขึ้นกับสื่อกลางเชื่อมต่อ MAC เข้ากับชิป PHY ทองแดงผ่าน PCB ระยะเพียงไม่กี่เซนติเมตร — ภายในเราเตอร์, สวิตช์ขนาดเล็ก, แอ็กเซสพอยต์, ตัวควบคุมอุตสาหกรรม และบอร์ดฝังตัวทุกตัวที่มี RJ45 อินเทอร์เฟซเหล่านี้ไม่เคยไปถึงเคจทรานซีฟเวอร์เลย แต่เป็นจุดอ้างอิงของทุกอย่างที่ไปถึง ได้แก่ SGMII คือ “GMII ที่ทำให้เป็นสัญญาณอนุกรม” XGMII คือ “GMII ที่ 10G” และ PHY ภายใน SFP ทองแดงก็พูดภาษาใดภาษาหนึ่งในกลุ่มนี้อยู่ภายใน เพจนี้ให้ข้อมูลขา, สัญญาณนาฬิกา และจังหวะเวลาของ MII, RMII, GMII และ RGMII ปัญหาความหน่วงของ RGMII, สถานะแบบอินแบนด์, การจัดการ MDIO และข้อผิดพลาดที่แต่ละอินเทอร์เฟซก่อขึ้น
MII (IEEE 802.3 Clause 22)
| รายการ | ค่า |
|---|---|
| อัตรา | 10 และ 100 Mb/s |
| ข้อมูล | TXD[3:0] 4 บิต, RXD[3:0] 4 บิต |
| สัญญาณนาฬิกา | 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; หนึ่ง PHY ต่อหนึ่ง MAC |
ยังพบได้บนไมโครคอนโทรลเลอร์และ FPGA; ถูกแทนที่ด้วย RMII ในแง่จำนวนขา
RMII (RMII Consortium spec v1.2)
| รายการ | ค่า |
|---|---|
| อัตรา | 10 และ 100 Mb/s |
| ข้อมูล | TXD[1:0], RXD[1:0] 2 บิต |
| สัญญาณนาฬิกา | REF_CLK 50 MHz เส้นเดียว ใช้ร่วมกันโดย MAC และ PHY; มาจากออสซิลเลเตอร์, MAC, หรือ PHY (โหมด PHY-clock-out) |
| การควบคุม | TX_EN, CRS_DV (รวมสัญญาณตรวจจับพาหะกับข้อมูลถูกต้องไว้ด้วยกัน), RX_ER (ทางเลือก) |
| จำนวนสัญญาณ | 7–9 |
| โหมด 10 Mb/s | แต่ละนิบเบิลถูกส่งซ้ำ 10 ครั้งที่ 50 MHz |
| ระยะ | cm |
โทโพโลยีสัญญาณนาฬิกาอ้างอิง 50 MHz คือบั๊กคลาสสิกของ RMII กรณี PHY คาดหวังสัญญาณนาฬิกาจากภายนอก ขณะที่ SoC คาดหวังให้ PHY เป็นฝ่ายขับสัญญาณนาฬิกาเอง จะทำให้อินเทอร์เฟซใช้งานไม่ได้ทั้งที่ไฟ LED ของลิงก์ยังติดปกติ
GMII (Clause 35)
| รายการ | ค่า |
|---|---|
| อัตรา | 1000 Mb/s; ลดระดับกลับไปใช้สัญญาณแบบ MII สำหรับ 10/100 |
| ข้อมูล | TXD[7:0], RXD[7:0] 8 บิต |
| สัญญาณนาฬิกา | GTX_CLK 125 MHz จาก MAC สำหรับการส่ง; RX_CLK 125 MHz จาก PHY สำหรับการรับ; TX_CLK จาก PHY ใช้เฉพาะตอนลดระดับกลับไปที่ 10/100 |
| การควบคุม | TX_EN, TX_ER, RX_DV, RX_ER, CRS, COL |
| จำนวนสัญญาณ | 24 + การจัดการ |
| ระดับสัญญาณ | 2.5 V (หลายรุ่นทนแรงดัน 3.3 V ได้) |
| ระยะ | cm; งบประมาณจังหวะเวลาตึงตัวที่ 125 MHz แบบ single-data-rate |
ปัจจุบันส่วนใหญ่เป็นอินเทอร์เฟซภายในชิปหรือบน FPGA; RGMII เข้ามาแทนที่บนบอร์ดจริง
RGMII (Reduced GMII, HP/Marvell specification v1.3 and v2.0)
| รายการ | ค่า |
|---|---|
| อัตรา | 10/100/1000 |
| ข้อมูล | TXD[3:0] และ RXD[3:0] 4 บิต แบบ double data rate: นิบเบิลต่ำที่ขาขึ้น นิบเบิลสูงที่ขาลง |
| สัญญาณนาฬิกา | TXC 125 MHz (จาก MAC), RXC 125 MHz (จาก PHY); 25 / 2.5 MHz สำหรับ 100M / 10M |
| การควบคุม | 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); 3.3 V บน PHY บางรุ่น |
| ระยะ | เส้นลายวงจรความยาวเท่ากัน ≤ 10–15 cm |
ปัญหาความหน่วง
RGMII ต้องการให้สัญญาณนาฬิกามาถึงหลังขอบข้อมูล 1.5–2.0 nsที่ฝั่งรับ (ช่วง setup/hold) มีสามวิธีที่จะทำให้ได้ตามนี้
| โหมด | ใครเป็นผู้เพิ่มความหน่วง | phy-mode ใน device tree | หมายเหตุ |
|---|---|---|---|
| ความหน่วงจาก PCB (v1.3) | เส้นลายวงจรสัญญาณนาฬิกาเพิ่มอีกประมาณ 5 cm | rgmii | แบบดั้งเดิม เปราะบาง |
| ความหน่วงภายใน PHY (RGMII-ID, v2.0) | PHY เพิ่ม 2 ns ให้สัญญาณนาฬิกา TX และ RX | rgmii-id | พบมากที่สุดในปัจจุบัน |
| ความหน่วงภายใน MAC/SoC | SoC เป็นผู้เพิ่ม | rgmii พร้อมรีจิสเตอร์ความหน่วงฝั่ง MAC | — |
| แบบผสม | 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 คือสัญลักษณ์ 1000BASE-X ที่เข้ารหัสแบบ 8b/10b (10 บิตที่ 125 MHz, ส่วน RTBI ใช้ DDR ที่ 5 บิต) ระหว่าง MAC/PCS กับ SerDes ภายนอกหรือ PHY ด้านออปติก ปัจจุบันเลิกใช้บนบอร์ดแล้ว ทายาทแบบอนุกรมของมันคือ 1000BASE-X/SGMII (SGMII และ serial gigabit)
การเปรียบเทียบ
| อินเทอร์เฟซ | ขา (ข้อมูล + ควบคุม) | สัญญาณนาฬิกา | อัตราสูงสุด | แรงดัน | การใช้งานทั่วไป |
|---|---|---|---|---|---|
| MII | 16 | 25 MHz จาก PHY | 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 |
|---|---|---|
| การกำหนดแอดเดรส | แอดเดรส PHY 5 บิต, รีจิสเตอร์ 5 บิต (32 รีจิสเตอร์) | พอร์ต 5 บิต, อุปกรณ์ 5 บิต (PMA/PMD, PCS, PHY XS, DTE XS, AN, vendor), รีจิสเตอร์ 16 บิต |
| รีจิสเตอร์หลัก | 0 control (รีเซ็ต, ความเร็ว, เปิดใช้ AN, loopback), 1 status (ลิงก์, AN เสร็จสิ้น), 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 vendor |
| ความเร็ว | 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 (อินเทอร์เฟซสองสาย) PHY ภายใน SFP ทองแดงเป็นข้อยกเว้น รีจิสเตอร์ 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 แบบ quad/octal) |
| Marvell 88E1543 / 88E1548 | QSGMII quad | สวิตช์แอ็กเซส 48 พอร์ต |
ข้อผิดพลาดแยกตามอินเทอร์เฟซ
| อาการ | อินเทอร์เฟซ | สาเหตุ |
|---|---|---|
| ไม่มีลิงก์เลย แต่อ่าน PHY ID ได้ปกติ | RMII | ทิศทาง/แหล่งสัญญาณของ REF_CLK ไม่ตรงกัน |
| 100M ใช้งานได้ แต่ 1G ไม่มีทราฟฟิก/มี CRC | RGMII | โหมดความหน่วง (ID) ผิดหรือถูกเพิ่มซ้ำ |
| ไฟ LED ของ PHY บอกว่าลิงก์ขึ้น แต่ MAC บอกว่าดับ | RGMII/SGMII | สถานะแบบอินแบนด์ถูกปิดไว้ฝั่งใดฝั่งหนึ่ง หรือไม่มีการโพลล์ MDIO |
| แพ็กเก็ตหายไปครึ่งหนึ่งที่ 1G | GMII/RGMII | การเยื้องเวลาจากความยาวเส้นลายวงจร, ระดับแรงดันผิด |
| หา PHY บน MDIO ไม่พบ | ทุกแบบ | แอดเดรส PHY ผิด (ขา strapping), ไม่มี MDIO pull-up |
| ความเร็วค้างที่ 10/100 | ทุกแบบ | รีจิสเตอร์ AN advertisement ถูกจำกัด, สาย, หรือ phy-mode ที่ไม่รองรับ 1G |
ใน CodingBox
ไม่มีสิ่งใดในเพจนี้ที่ทำงานผ่าน EEPROM ของโมดูล — ยกเว้น SFP ทองแดง ซึ่ง PHY ภายใน (โดยทั่วไปเป็นชิ้นส่วนระดับ 88E1111) อยู่หลัง I²C เส้นเดียวกับที่ CodingBox อ่าน เมื่อโมดูลทองแดงทำงานได้ที่ 1G แต่ไม่ได้ที่ 10/100 คำตอบอยู่ที่การตั้งค่าของ PHY ตัวนั้นและโหมด SGMII/1000BASE-X ของโฮสต์ ไม่ใช่ที่ไบต์ข้อมูลระบุตัวตนใน A0h (อีเทอร์เน็ตทองแดงและ DAC, SGMII และ serial gigabit)