Skip to content

Link Layer & Hardware

MAC và PHY

SoC [ CPU | MAC ] --MII/RMII/RGMII--> [ PHY ] --MDI (magnetics)--> RJ45
         ^
         '---- MDIO (quản lý PHY: thanh ghi, link status)
  • MAC nằm trong SoC: DMA, FIFO, bộ lọc địa chỉ, timestamp.
  • PHY là chip ngoài (hoặc tích hợp): mã hóa tín hiệu, auto-negotiation, phát hiện link.
  • MDIO là bus 2 dây (MDC/MDIO) để MAC đọc/ghi thanh ghi PHY.

Giao diện MAC - PHY

Giao diện Tốc độ Số tín hiệu data Ghi chú
MII 10/100M 4 bit mỗi chiều Cũ
RMII 10/100M 2 bit mỗi chiều Ít chân hơn, cần clock 50 MHz
RGMII 10/100/1000M 4 bit mỗi chiều, DDR Phổ biến nhất; cần xử lý clock delay
SGMII 10/100/1000M 1 cặp SerDes Ít chân, cần SerDes

RGMII delay

Lỗi bring-up thường gặp: link lên nhưng mất gói hoặc lỗi CRC vì sai delay 2 ns của clock. Delay có thể do PHY, MAC hoặc trace PCB cung cấp; chọn đúng phy-mode trong Device Tree (rgmii, rgmii-id, rgmii-rxid, rgmii-txid) và không bật delay hai lần.

Device Tree

&eth0 {
    phy-mode = "rgmii-id";
    phy-handle = <&phy0>;
    status = "okay";

    mdio {
        #address-cells = <1>;
        #size-cells = <0>;
        phy0: ethernet-phy@1 {
            reg = <1>;               /* địa chỉ PHY trên MDIO */
            reset-gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
            reset-assert-us = <10000>;
        };
    };
};

Kernel dùng framework phylib (hoặc phylink cho SFP và SerDes) để quản lý PHY, báo link up/down cho MAC.

ethtool

ethtool eth0                  # tốc độ, duplex, link detected
ethtool -s eth0 speed 100 duplex full autoneg off
ethtool -S eth0               # thống kê của driver (lỗi CRC, drop)
ethtool -i eth0               # driver, firmware
ethtool -k eth0               # offload (checksum, TSO, GRO)
ethtool -T eth0               # khả năng hardware timestamp (PTP)
ethtool --cable-test eth0     # TDR, nếu PHY hỗ trợ

Kiểm tra nhanh khi không lên link: ethtool eth0 | grep -i link, xem dmesg | grep -i phy, sau đó đọc thanh ghi PHY qua mii-tool hoặc phytool.

Switch (DSA)

Khi board có chip switch nối vào một cổng MAC của SoC, Linux mô hình hóa bằng DSA (Distributed Switch Architecture): mỗi cổng switch xuất hiện như một net_device riêng (lan1, lan2, ...), còn cổng nối SoC là conduit. Có thể gom các cổng vào bridge và được offload xuống phần cứng switch.

Xem thêm

  • Hardware timestamp và PTP: Linux PTP.
  • Layout PCB cho đường tín hiệu tốc độ cao: PCB Design.