RK平台时钟(CLK)开发:核心知识+调试步骤+问题汇总

电子说

1.4w人已加入

描述

 

 

 RK(瑞芯微)平台开发中,时钟(CLK)子系统是 SOC 的 心脏”——CPU 变频、DDR 数据传输、以太网通信、LCD 显示等所有组件的稳定运行,都依赖精准的时钟信号。但时钟树复杂、配置参数多、调试踩坑频繁,一直是开发者的痛点。

 

 

今天这篇文章,从核心知识实操调试步骤常见问题解决方案,帮你系统掌握 RK 平台 CLK 开发,少走弯路!

GPIO

一、RK 平台 CLK 核心知识:搞懂这些不迷路

 

时钟子系统的核心是精准分配与控制,需先掌握 大核心模块:基础框架、GPIO 输出时钟、PLL 展频(降 EMI 关键)。

 

 

1. 基础框架:时钟树与关键组件

 

RK 平台时钟以 树状结构(时钟树)分配,从源头(晶振 / PLL)到终端(外设),依赖 类关键组件:

 

 

组件

 

 

作用

 

 

关键细节

 

 

晶振(Oscillator

 

 

时钟源头,提供基础频率(如 24M 无源晶振)

 

 

所有 PLL 的输入基准,信号质量直接影响后续时钟稳定性

 

 

PLL(锁相环)

 

 

对晶振频率倍频,生成高频时钟(如 CPUDDR 所需)

 

 

RK 主流 PLL 分工明确:- APLL:独占给 CPU(随 CPU 变频调整)- DPLL:独占给 DDR- GPLL:总线 外设备份(常设 594M/1200M- CPLL/NPLLLCDC/GMAC 独占

 

 

Divider(分频器)

 

 

 PLL 输出频率分频,适配不同外设需求(如 200M→50M

 

 

支持整数分频(如 / 2)和小数分频(如 I2S/UART 需精准频率)

 

 

MUX(多路选择器)

 

 

选择时钟来源(如外设可从 GPLL 或 CPLL 取时钟)

 

 

寄存器配置选择路径,需注意父时钟与子时钟的兼容性

 

 

GATING(时钟门控)

 

 

控制时钟开关,降低功耗(设备不工作时关闭时钟)

 

 

引用计数机制:子时钟打开时自动打开父时钟;所有子时钟关闭才关父时钟

 

 

此外,总线时钟分高速” 和 低速” 两类,需根据外设需求选择:

 

 

高速总线PERI):ACLK_PERI100-300M,如 EMMC/USB/GMAC)、HCLK_PERI37-150M

 

 

低速总线BUS):ACLK_BUS100-300M,如 I2C/I2S/SPI)、PCLK_BUS50-150M

 

 

2. GPIO 输出时钟:降成本的关键设计

 

很多场景下,可通过 SOC 的 GPIO 输出时钟替代外部晶振(如 WiFi、摄像头),减少外围电路成本。但需满足 个前提:

 

 

1)核心配置条件

 

1.IOMUX 配置GPIO 必须支持 “CLK 输出” 功能(需查芯片 TRM 确认);

 

 

2.频率匹配:优先选择晶振 bypass 输出(如 24M),信号质量最优;若从 PLL 分频,需确认外设是否接受信号抖动;

 

 

3.驱动能力:部分 GPIO 输出波形差,需调整 IO 驱动能力寄存器。

 

 

2)主流芯片对应关系(示例)

 

芯片型号

 

 

时钟名称

 

 

对应 GPIO

 

 

支持频率

 

 

RK3399

 

 

SCLK_TESTOUT

 

 

GPIO2_D1/GPIO0_B0

 

 

24M32K

 

 

RK3566/8

 

 

CLK_MAC0_OUT

 

 

GPIO2_C1

 

 

24M25M50M125M

 

 

RK3588

 

 

REFCLKOUT

 

 

GPIO0_A0

 

 

24M

 

 

RK3576

 

 

REF_CLK0_OUT

 

 

GPIO0_A0

 

 

12M24M27M 

 

 

3. PLL 展频:解决 EMI 超标的 神器

 

时钟信号是 EMI(电磁干扰)的主要来源 —— 高频时钟能量集中在窄频段,易超标。PLL 展频(SSCG 通过将能量分散到宽频段,降低 EMI 峰值,是合规关键。

 

 

1)核心参数

 

调制速度30-120KHz(需高于人耳听觉范围 20KHz,避免噪音);

 

 

调制深度0.1%-4%(深度越大,EMI 降得越多,但需兼容外设频率容忍度)。

 

 

2)配置逻辑

 

 RK3588 芯片:需先开启 PLL 小数模式(dsmpd=0),再配置展频幅度(ssmod_spread)和速率(ssmod_divval);

 

 

RK3588 芯片:单独配置 sscg_en 使能,再设幅度(mrr)、速率(mfr)和模式(center spread 最优,降抖动)。

 

 

二、RK 平台 CLK 实操调试步骤:从查看状态到问题定位

 

调试时钟需按先看状态再控参数最后测输出” 的流程,以下是关键步骤和命令:

 

 

1. 第一步:查看时钟树状态

 

先确认当前时钟树结构、频率、使能状态,定位异常时钟:

 

 

  •  
  •  
# 查看所有时钟的父时钟、当前频率、使能计数cat /sys/kernel/debug/clk/clk_summary

关键关注:

 

 

parent:是否为预期的父时钟(如 LCDC 时钟应指向独占 PLL);

 

 

rate:当前频率是否符合需求(如百兆以太网需 50M);

 

 

enable count:使能计数是否为 1表示时钟未开启)。

 

 

2. 第二步:控制时钟频率与使能

 

通过/sys/kernel/debug/clk/[时钟名]/节点,直接调整频率和使能:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 1. 查看指定时钟当前频率(以saradc为例)cat /sys/kernel/debug/clk/clk_saradc/clk_rate# 2. 设置时钟频率(如设为24M)echo 24000000 > /sys/kernel/debug/clk/clk_saradc/clk_rate# 3. 使能时钟(kernel <6.1)echo 1 > /sys/kernel/debug/clk/clk_saradc/clk_enable_count# 3. 使能时钟(kernel ≥6.1,需用prepare_enable)echo 1 > /sys/kernel/debug/clk/clk_saradc/clk_prepare_enable# 4. 关闭时钟echo 0 > /sys/kernel/debug/clk/clk_saradc/clk_enable_count

3. 第三步:GPIO 输出时钟调试(以 RK3399 为例)

 

若需用 GPIO 输出 24M 时钟(替代外部晶振),步骤如下:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
# 1. 设置测试时钟频率为24Mecho 24000000 > /sys/kernel/debug/clk/clk_testout1_pll_src/clk_rateecho 24000000 > /sys/kernel/debug/clk/clk_testout1/clk_rate# 2. 使能测试时钟echo 1 > /sys/kernel/debug/clk/clk_testout1/clk_enable_count# 3. 配置GPIO2_D1为CLK输出功能(IOMUX)io -4 0xff77e004 0x000c0008

其他芯片参考:

 

 

RK3566/8 输出 CAM_CLKio -4 0xfdc60064 0x70001000 + echo 27000000 > /sys/kernel/debug/clk/clk_cam0_out/clk_rate

 

 

RK3588 输出 REFCLKOUTio -4 0xfd5f0000 0x000f0001

 

 

4. 第四步:TEST_CLK_OUT 硬件测试

 

若需直接测量时钟波形(如确认 LCDC DCLK),需配置 TEST_CLK_OUT 引脚:

 

 

1.配置 MUX:选择要输出的时钟源(如 ACLK_PERI);

 

 

  •  
  •  
# RK3399配置TEST_CLK源为24M(寄存器CRU_MISC_CON,地址0xff76050c)io -4 0xff76050c 0x00000800

1.配置 DIV:设置分频比(如 1 分频,输出原频率);

 

 

  •  
  •  
# RK3399配置分频比为1(寄存器CRU_CLKSEL58_CON,地址0xff7601e8)io -4 0xff7601e8 0x0f000000

1.使能 GATING:打开时钟门控;

 

 

  •  
  •  
# RK3399使能TEST_CLK(寄存器CRU_CLKGATE13_CON,地址0xff760334)io -4 0xff760334 0x00000001

1.用示波器测量 TEST_CLK_OUT 引脚波形。

 

 

5. 第五步:PLL 展频调试(以 RK3588 GPLL 为例)

 

 EMI 超标,需配置 PLL 展频:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
# 1. 设置展频速率30KHz、幅度0.5%、模式为center spreadio -4 0xfd7c01cc 0x00ff000c  # 速率30KHzio -4 0xfd7c01cc 0x3f000500  # 幅度0.5%io -4 0xfd7c01cc 0xc0008000  # center spread模式# 2. 使能展频功能io -4 0xfd7c01d0 0x00010001

三、常见问题与解决方案:避坑指南

 

1. PLL 频率设置失败,返回 - 1

 

现象:调用clk_set_rate设置 PLL 频率,返回负数;

 

 

原因:目标频率不在 PLL 频率表格中(如 RK3399 rk3399_pll_rates);

 

 

解决方案:按 PLL 公式补全频率表格:

 

 

  •  
  •  
  •  
// 公式:VCO=24M*FBDIV/REFDIV(450M~2200M);FOUT=VCO/POSTDIV1/POSTDIV2// 示例:添加594M频率(VCO=1188M=24*99/2,FOUT=1188/2/1)RK3036_PLL_RATE(5940000002992110),

2. 小数分频时钟抖动大、频偏超标

 

现象I2S/UART 用小数分频后,信号抖动超外设容忍范围;

 

 

原因:未满足小数分频父时钟频率 ≥ 分频后频率 ×20”

 

 

解决方案:调整父时钟频率(如分频后需 12M,父时钟需≥240M)。

 

 

3. 以太网时钟不精准,通信丢包

 

现象:百兆以太网(需 50M千兆以太网(需 125M)丢包、ping 不通;

 

 

原因PLL 输出时钟精度不足,或未使用独立时钟源;

 

 

解决方案

 

 

a.确认 PLL 频率精准(如 GMAC 独占 CPLL,设为 50M/125M);

 

 

b.若仍不精准,改用外部晶振(需硬件支持)。

 

 

4. LCD 显示异常(花屏、闪屏)

 

现象LCD 无显示或显示异常,排查后是 DCLK 问题;

 

 

原因LCDC 未独占指定 PLL(如 RK3399 双显需 VOP0 绑定 VPLLVOP1 绑定 CPLL);

 

 

解决方案:在 DTS 中配置独占 PLL

 

 

  •  
  •  
  •  
  •  
  •  
// RK3399 VOP0(HDMI)绑定VPLL&vopb_rk_fb {  assigned-clocks = <&cru DCLK_VOP0_DIV>;  assigned-clock-parents = <&cru PLL_VPLL>;};

5. 展频后 DDR 死机、USB 测试失败

 

现象:打开 PLL 展频后,DDR 崩溃、USB 2.0 频率测试不通过;

 

 

原因:展频幅度过大,超出 DDR/USB PHY 的容忍范围;

 

 

解决方案

 

 

a.降低展频幅度(如从 2% 降至 0.5%);

 

 

b.DDR 展频需在 LOADER 阶段配置(避免运行中调整时钟);

 

 

c.USB 需确认 PHY 弹性 buffer 大小(buffer 小则幅度需更小)。

 

 

6. 时钟被误关闭,外设无法启动

 

现象:外设(如 I2C)启动失败,clk_summary 显示时钟 enable count 为 0

 

 

原因:时钟未配置常开” 属性,初始化后被系统关闭;

 

 

解决方案

 

 

a.kernel <6.1:添加CLK_IGNORE_UNUSED flag

 

 

  •  
GATE(PCLK_PMUGRF_PMU, "pclk_pmugrf_pmu""pclk_pmu_src", CLK_IGNORE_UNUSED, RK3399_PMU_CLKGATE_CON(1), 1, GFLAGS),

a.kernel ≥6.1:添加CLK_IS_CRITICAL flag,或在 bootargs clk_gate.always_on=1

 

 

四、总结与注意事项

GPIO

 

 

1.芯片差异是关键:不同 RK 芯片(如 RK3588 vs RK3328)的时钟方案、寄存器地址差异大,调试前务必参考对应芯片的 TRM 和官方指南;

 

 

2.优先软件调试,再动硬件:先通过 sys/debug 节点调整时钟,确认逻辑正确后,再固化到 DTS 或驱动;

 

 

3.展频需谨慎:展频虽降 EMI,但可能影响敏感外设(如以太网、CAN),需充分做稳定性测试;

 

 

4.文档参考:遇到问题可查阅瑞芯微官方文档:

 

 

Rockchip Clock 开发指南》(时钟子系统框架);

 

 

Rockchip Gpio Output Clocks》(GPIO 输出时钟配置);

 

 

Rockchip PLL 展频功能详细说明》(EMI 优化)。

 

 

时钟子系统虽复杂,但掌握基础框架调试工具问题定位” 的逻辑后,就能轻松应对。如果本文对你有帮助,欢迎点赞、转发,评论区交流你的调试踩坑经历!

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分