驱动配置文件
device/rockchip/.chips/rk3562/myzr_rk3562_evb_defconfig
# SPL 是 U-Boot 的二级引导程序,主要负责初始化 DDR、加载完整的 U-Boot 镜像
RK_UBOOT_SPL=y
# 内核设备树文件名
RK_KERNEL_DTS_NAME="myzr-rk3562-evb"
# 指定 分区表或参数文件
RK_PARAMETER="parameter-buildroot-fit.txt"
# 使用 FIT 格式镜像(Flattened Image Tree)
# FIT 镜像可以把 kernel、device tree、ramdisk 等整合成一个镜像文件
RK_USE_FIT_IMG=y
驱动配置
/dts-v1/;
#include "rk3562-evb2-ddr4-v10.dtsi"
#include "rk3562-linux.dtsi"
#include "rk3562-rk809.dtsi"
#include "rk3562-amp.dtsi"
/ {
model = "MYZR-RK3562-EVB";
};
rk3562-amp.dtsi
AMP(Asymmetric Multi Processing)
- RK3562 是 异构多核 SoC,除了主应用 CPU 核(A53/A55),还可能有 MCU 或辅助小核(CM0)
- AMP 机制允许 独立 CPU/核运行不同操作系统或任务,通过共享内存和消息通信协作
- 这里的 rockchip_amp 节点就是配置 辅助 MCU 核心(CM0)或 AMP CPU 核)
RPMsg(Remote Processor Messaging)
- ARM SoC 常用的 CPU 与 MCU 之间通信机制
- 通过 共享内存 + mailbox 实现轻量消息传递
- 在 Linux 上通过 rpmsg 驱动提供用户空间接口
使用场景:智能无人小车
┌────────────┐
│ Linux / ROS│
│ (RK3562) │
│ SLAM / AI │
└─────▲──────┘
│
Ethernet / UART / CAN
│
┌─────────────┴─────────────┐
│ MCU / RTOS │
│ 电机 / 编码器 / IMU │
│ PID / 急停 / 避障底层 │
└───────────────────────────┘
Linux / RK:
- SLAM
- 路径规划
- 视觉
- 调度
- OTA / UI
RTOS / MCU:
- 电机控制(1kHz+)
- 编码器
- 急停
- 低层避障
- 安全
外挂 MCU vs RK AMP(M 核 RTOS)
| 对比维度 | 外挂 MCU(推荐) | RK AMP(M 核 RTOS) |
|---|---|---|
| 典型形态 | RK3562 + STM32 / GD32 / NXP | RK3562 内部 A 核 + M 核 |
| 系统结构 | 双芯片,硬隔离 | 单芯片,软隔离 |
| 实时性 | ⭐⭐⭐⭐⭐(极稳) | ⭐⭐⭐⭐ |
| 确定性 / 抖动 | 极低 | 可控但存在 |
| Linux 崩溃影响 | 不影响 MCU | 可能影响 RTOS |
| 急停 / 安全 | 最优(独立) | 风险更高 |
| 看门狗设计 | 简单、可靠 | 复杂 |
| 调试难度 | 低(SWD/JTAG) | 高(双系统 + AMP) |
| 开发效率 | 高 | 低 |
| 维护成本 | 低 | 高 |
| 量产稳定性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 客户 / 甲方接受度 | 高(工业常态) | 低 |
| 功能安全 / 认证 | 易做 | 难 |
| BOM 成本 | +几元~十几元 | 极限最低 |
| PCB 复杂度 | 略高 | 最低 |
| EMC / EMI | 好控制 | 更难 |
| 适合产品 | 分拣线、AGV、AMR、工控 | Demo、极限成本消费级 |
| 工程推荐度 | ★★★★★ | ★★ |
以太网驱动
调试步骤
硬件 → DTS → 内核驱动 → PHY → MAC ↔ PHY → 网络栈 → 用户态
硬件排查
- PHY 供电是否正常(1.0V / 1.8V / 2.5V / 3.3V)
- PHY 时钟: 25MHz / 50MHz / 125MHz 是否有
- PHY 复位脚:上电是否拉低 → 延时 → 拉高
- MAC ↔ PHY 接口:RGMII / RMII / MII 是否与 DTS 一致
- 网口指示灯:插网线是否亮 / 闪

供电 → 复位 → 时钟 → PHY 自举 → MDIO → Link → RGMII
RESET_N 复位引脚
测量电压为 1.57 V, 正常时电压应该为 3.3V

定位到 VDD_3V3_ACODEC 电压不正常, VDD_3V3_ACODEC是 PMIC 提供的LDO电压
电压对比
异常电压
root@RK3562-MYZR:/# cat /sys/kernel/debug/regulator/regulator_summary
regulator use open bypass opmode voltage current min max
---------------------------------------------------------------------------------------
regulator-dummy 2 2 0 unknown 0mV 0mA 0mV 0mV
ffa80000.ethernet-phy 1 0mA 0mV 0mV
regulator-dummy 0 0mA 0mV 0mV
vcc3v3_lcd_n 0 1 0 unknown 0mV 0mA 0mV 0mV
vcc3v3_lcd_n 0 0mA 0mV 0mV
dc_12v 4 5 0 unknown 12000mV 0mA 12000mV 12000mV
dc_12v 0 0mA 0mV 0mV
vcc3v3_pcie20 0 1 0 unknown 3300mV 0mA 3300mV 3300mV
vcc3v3_pcie20 0 0mA 0mV 0mV
vcc5v0_sys 2 3 0 unknown 5000mV 0mA 5000mV 5000mV
vcc5v0_sys 0 0mA 0mV 0mV
vcc3v3_clk 0 1 0 unknown 3300mV 0mA 3300mV 3300mV
vcc3v3_clk 0 0mA 0mV 0mV
vdd_npu 1 3 0 unknown 851mV 0mA 800mV 1100mV
ff300000.npu-rknpu 0 0mA 850mV 1100mV
ff300000.npu-rknpu 0 0mA 0mV 0mV
vdd_npu 0 0mA 0mV 0mV
vcc5v0_usb 2 3 0 unknown 5000mV 0mA 5000mV 5000mV
vcc5v0_usb 0 0mA 0mV 0mV
vcc5v0_usb_host 3 2 0 unknown 5000mV 0mA 5000mV 5000mV
phy-ff740000.usb2-phy.2-phy 2 0mA 0mV 0mV
vcc5v0_usb_host 0 0mA 0mV 0mV
vcc5v0_usb_otg 0 2 0 unknown 5000mV 0mA 5000mV 5000mV
phy-ff740000.usb2-phy.1-vbus 0 0mA 0mV 0mV
vcc5v0_usb_otg 0 0mA 0mV 0mV
vcc3v3_sys 2 2 0 unknown 3300mV 0mA 3300mV 3300mV
vcc3v3_sys 0 0mA 0mV 0mV
vcc25_ddr 1 1 0 unknown 2500mV 0mA 2500mV 2500mV
vcc25_ddr 0 0mA 0mV 0mV
正常电压
root@RK3562-MYZR:/# cat /sys/kernel/debug/regulator/regulator_summary
regulator use open bypass opmode voltage current min max
---------------------------------------------------------------------------------------
regulator-dummy 2 2 0 unknown 0mV 0mA 0mV 0mV
ffa80000.ethernet-phy 1 0mA 0mV 0mV
regulator-dummy 0 0mA 0mV 0mV
vcc3v3_lcd_n 0 1 0 unknown 0mV 0mA 0mV 0mV
vcc3v3_lcd_n 0 0mA 0mV 0mV
dc_12v 4 5 0 unknown 12000mV 0mA 12000mV 12000mV
dc_12v 0 0mA 0mV 0mV
vcc3v3_pcie20 0 1 0 unknown 3300mV 0mA 3300mV 3300mV
vcc3v3_pcie20 0 0mA 0mV 0mV
vcc5v0_sys 2 3 0 unknown 5000mV 0mA 5000mV 5000mV
vcc5v0_sys 0 0mA 0mV 0mV
vcc3v3_clk 0 1 0 unknown 3300mV 0mA 3300mV 3300mV
vcc3v3_clk 0 0mA 0mV 0mV
vdd_npu 1 3 0 unknown 851mV 0mA 800mV 1100mV
ff300000.npu-rknpu 0 0mA 850mV 1100mV
ff300000.npu-rknpu 0 0mA 0mV 0mV
vdd_npu 0 0mA 0mV 0mV
vcc5v0_usb 2 3 0 unknown 5000mV 0mA 5000mV 5000mV
vcc5v0_usb 0 0mA 0mV 0mV
vcc5v0_usb_host 3 2 0 unknown 5000mV 0mA 5000mV 5000mV
phy-ff740000.usb2-phy.2-phy 2 0mA 0mV 0mV
vcc5v0_usb_host 0 0mA 0mV 0mV
vcc5v0_usb_otg 0 2 0 unknown 5000mV 0mA 5000mV 5000mV
phy-ff740000.usb2-phy.1-vbus 0 0mA 0mV 0mV
vcc5v0_usb_otg 0 0mA 0mV 0mV
vcc3v3_sys 16 18 0 unknown 3300mV 0mA 3300mV 3300mV
vcc3v3_sys 0 0mA 0mV 0mV
vcc25_ddr 1 1 0 unknown 2500mV 0mA 2500mV 2500mV
vcc25_ddr 0 0mA 0mV 0mV
vdd_logic 1 3 0 normal 850mV 0mA 500mV 1350mV
dmc-center 0 0mA 0mV 0mV
dmc-center 0 0mA 850mV 1350mV
vdd_logic 0 0mA 0mV 0mV
vdd_cpu 2 2 0 normal 850mV 0mA 500mV 1350mV
cpu0-cpu 1 0mA 850mV 1150mV
vdd_cpu 0 0mA 0mV 0mV
vcc_ddr 1 1 0 normal 500mV 0mA 0mV 0mV
vcc_ddr 0 0mA 0mV 0mV
vdd_gpu 1 3 0 normal 850mV 0mA 500mV 1350mV
ff320000.gpu-mali 0 0mA 850mV 1350mV
ff320000.gpu-mali 0 0mA 0mV 0mV
vdd_gpu 0 0mA 0mV 0mV
vcc_1v8 3 3 0 unknown 1800mV 0mA 1800mV 1800mV
ffaa0000.saradc-vref 1 0mA 0mV 0mV
ff730000.saradc-vref 1 0mA 0mV 0mV
vcc_1v8 0 0mA 0mV 0mV
vcc2v8_dvp 0 1 0 unknown 2800mV 0mA 2800mV 2800mV
vcc2v8_dvp 0 0mA 0mV 0mV
vdda_0v9 1 1 0 unknown 900mV 0mA 900mV 900mV
vdda_0v9 0 0mA 0mV 0mV
vdda0v9_pmu 1 1 0 unknown 900mV 0mA 900mV 900mV
vdda0v9_pmu 0 0mA 0mV 0mV
vccio_acodec 1 1 0 unknown 3300mV 0mA 3300mV 3300mV
vccio_acodec 0 0mA 0mV 0mV
vccio_sd 1 2 0 unknown 3300mV 0mA 1800mV 3300mV
ff880000.mmc-vqmmc 0 0mA 0mV 0mV
vccio_sd 0 0mA 0mV 0mV
vcc3v3_pmu 1 1 0 unknown 3300mV 0mA 3300mV 3300mV
vcc3v3_pmu 0 0mA 0mV 0mV
vcca_1v8 1 1 0 unknown 3300mV 0mA 3300mV 3300mV
vcca_1v8 0 0mA 0mV 0mV
vcca1v8_pmu 1 1 0 unknown 1800mV 0mA 1800mV 1800mV
vcca1v8_pmu 0 0mA 0mV 0mV
vcc1v8_dvp 0 1 0 unknown 1800mV 0mA 1800mV 1800mV
vcc1v8_dvp 0 0mA 0mV 0mV
vcc_3v3 1 1 0 unknown 3300mV 0mA 0mV 0mV
vcc_3v3 0 0mA 0mV 0mV
vcc3v3_sd 1 2 0 unknown 3300mV 0mA 0mV 0mV
ff880000.mmc-vmmc 0 0mA 3300mV 3400mV
vcc3v3_sd 0 0mA 0mV 0mV
发现少了很多电压,怀疑PMIC I2C 通信异常,果然 PMIC 通信的 I2C0 被关闭了,打开此问题即解决
日志对比
正常日志
[ 4.189921] rk_gmac-dwmac ffa80000.ethernet eth0: PHY [stmmac-0:00] driver [YT8521SH Ethernet] (irq=POLL)
[ 4.192321] rk_gmac-dwmac ffa80000.ethernet eth0: No Safety Features support found
[ 4.192334] rk_gmac-dwmac ffa80000.ethernet eth0: PTP not supported by HW
[ 4.192698] rk_gmac-dwmac ffa80000.ethernet eth0: configuring for phy/rgmii-rxid link mode
[ 6.234997] rk_gmac-dwmac ffa80000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
异常日志
[ 2.873110] rk_gmac-dwmac ffa80000.ethernet eth0: no phy found
[ 2.873125] rk_gmac-dwmac ffa80000.ethernet eth0: stmmac_open: Cannot attach to PHY (error: -19)
Rockchip Developer Guide Linux GMAC
如果 GMAC 的驱动开机 log 上出现打印:No PHY found 或者 Cannot attach to PHY,表示找不到 PHY。 驱动会通过 MDIO 先读取 PHY 的 ID,可以测量 MDC 和 MDIO 波形,波形是否正常,该总线类似于I2C,MDC 频率要求是小于 2.5M。一般来说,找不到 PHY 有以下几个原因:
- 检查 MDC/MDIO IOMUX 寄存器值是否正确
- PHY 供电是否正常
- Reset IO 配置不正确
- Reset IO 时序不满足 PHY datasheet 要求,不同 PHY 的时序要求不一致,具体配置参考本文 DTS 章节
- 测试 MDIO/MDC 波形是否异常,其中 MDC 时钟频率要求小于 2.5M