CHAPTER 04
4. RGMII clock-data skew와 internal delay의 주인을 확정한다
RGMII는 DDR로 4-bit data를 전달하며 송신과 수신 각각 약 2ns 수준의 clock skew가 필요합니다. 지연을 MAC, PHY, PCB 중 정확히 한 곳이 담당하도록 회로, DT와 latch register를 맞춥니다.
두 방향
TXC/TXD와 RXC/RXD는 서로 다른 clock domain입니다. 송신만 정상이고 수신만 CRC가 늘 수 있으므로 방향별로 측정합니다.
phy-mode 의미
`rgmii-id`, `rgmii-rxid`, `rgmii-txid`, `rgmii`는 PHY 내부 delay 사용 책임을 나타냅니다. 이름만 보고 MAC delay까지 자동 설정된다고 가정하지 않습니다.
PCB delay
trace length로 skew를 만들었으면 PHY internal delay를 다시 켜지 않습니다. package와 via까지 포함한 실제 delay를 SI report로 확인합니다.
속도 의존
125MHz에서 timing margin이 가장 작아 1G에서만 CRC가 늘 수 있습니다. 10/100 성공은 1G timing 증거가 아닙니다.
레지스터와 관측값을 함께 읽는 표
| 항목 | 소유 블록 | 설정 또는 의미 | 정상 증거 | 실패 해석 |
|---|---|---|---|---|
| PHY RGMII delay | PHY vendor bank | Rx/Tx delay enable과 tap | DT 의도와 latch 값 일치 | reset 후 값 유실 또는 strap 우선순위 |
| MAC interface select | SoC/MAC | RGMII mode와 speed | resolved speed에 따라 clock mode 갱신 | GMII/RMII mode 잔존 |
| MAC speed/duplex | MAC | 10/100/1000와 duplex | PHY resolved tuple과 일치 | link_up callback 누락 |
| RX CRC/alignment | MAC | 수신 sampling 오류 지표 | 정상 cable 부하에서 증가 없음 | RX skew/clock edge 우선 |
| TX underflow/carrier | MAC | 송신 datapath와 duplex | 부하에서도 안정 | TX clock/mode 또는 FIFO |
| PHY symbol error | PHY PCS | MDI 쪽 symbol 품질 | MAC CRC 증가와 별개로 안정 | symbol도 늘면 RGMII보다 MDI/SI |
증상에서 첫 실패 경계를 찾는 표
| 관측 증상 | 직전 통과 증거 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| carrier ON, RX CRC 폭증 | PHY symbol error 0 | RXC-RXD skew | PHY RX delay만 바꿔 error curve 측정 | RGMII 수신 timing |
| TX만 상대 CRC | local RX 정상 | TXC-TXD skew | 상대 PHY CRC와 local TX delay 비교 | RGMII 송신 timing |
| 1G만 실패 | 100M traffic 정상 | 125MHz skew와 duty cycle | 1G short cable에서 interface probe | RGMII margin |
| warm reboot 후 실패 | cold boot delay 정상 | PHY delay register retention | resume/reset 뒤 register diff | 초기화 순서 |
| DT 변경이 효과 없음 | live DT 값 확인 | 실제 delay owner와 driver parsing | PHY raw register 직접 readback | 속성이 다른 driver에 적용됨 |
| MAC CRC와 PHY symbol 동시 증가 | link 유지 | RGMII와 MDI를 각각 강제 loopback | PHY internal loopback 위치별 비교 | 처음 오류가 생기는 경계 판별 |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | 회로도와 PCB length report에서 TX/RX skew 책임을 적습니다. | 방향별 ps/ns 계산 | board 의도 확정 |
| 2 | live DT와 PHY/MAC delay register를 함께 dump합니다. | software 의도와 hardware readback | 중복/누락 확인 |
| 3 | 1G full-duplex 양방향 traffic에서 CRC를 방향별로 기록합니다. | local/partner counter delta | TX/RX 분리 |
| 4 | 가능하면 delay tap sweep으로 error bathtub을 만듭니다. | tap별 BER/CRC | 중앙 margin 선택 |
주의오실로스코프 probe 자체가 RGMII edge를 바꿀 수 있습니다. probe loading과 측정 위치를 기록하고, register sweep 결과와 함께 해석합니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.
Linux PHY Abstraction Layer
PHY 장치, MDIO, link 상태와 PHY driver의 공개 Linux 계약
Linux phylink
PHY, fixed-link, in-band PCS와 MAC callback의 관계
Linux Ethernet controller binding
phy-mode, phy-handle, fixed-link와 managed 속성
Linux v6.18.37 phy_device.c
PHY 장치 생성, attach, start/stop과 상태 갱신
Linux v6.18.37 phylink.c
link resolve, MAC config, link up/down 실행 경로
TI DP83867IR/CR datasheet
strap, RGMII/SGMII, extended register, clock, interrupt와 진단 기능
TI DP83867 RGMII timing budget
0.25ns 단계 internal delay와 setup/hold margin 계산 및 측정 절차
Linux DP83867 driver
DT 속성, RGMIIDCTL, FIFO, impedance, interrupt와 downshift 초기화
Linux RTL8211F driver
paged register, RGMII TX/RX delay, ALDPS, CLKOUT, EEE, WOL과 interrupt 처리
Microchip LAN8841 product and datasheet
RGMII, IEEE 1588v2, cable diagnostics와 제조사 데이터시트
Linux LAN8841 driver in micrel.c
KSZ9131 공통 초기화, LAN8841 errata, PTP, interrupt와 cable test 경로