RK3562 驱动适配

基于明远智睿开发板

Posted by LXG on December 24, 2025

驱动配置文件

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 一致
  • 网口指示灯:插网线是否亮 / 闪

rk3562_xt_gmac

供电 → 复位 → 时钟 → PHY 自举 → MDIO → Link → RGMII

RESET_N 复位引脚

测量电压为 1.57 V, 正常时电压应该为 3.3V

rk3562_xt_vdd

定位到 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