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

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

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

wKgZO2kajEWAPTIbAABni1U_rwc053.png

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

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

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

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

组件

作用

关键细节

晶振(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(多路选择器)

选择时钟来源(如外设可从GPLLCPLL取时钟)

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

GATING(时钟门控)

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

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

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

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

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

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

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

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_pval);

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

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

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

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

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

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

关键关注:

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

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

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

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

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

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

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

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

# 1. 设置测试时钟频率为24Mecho24000000 > /sys/kernel/debug/clk/clk_testout1_pll_src/clk_rateecho24000000 > /sys/kernel/debug/clk/clk_testout1/clk_rate# 2. 使能测试时钟echo1 > /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-40xff76050c0x00000800

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

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

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

# RK3399使能TEST_CLK(寄存器CRU_CLKGATE13_CON,地址0xff760334)io-40xff7603340x00000001

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

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

EMI超标,需配置PLL展频:

# 1. 设置展频速率30KHz、幅度0.5%、模式为center spreadio-40xfd7c01cc0x00ff000c # 速率30KHzio-40xfd7c01cc0x3f000500 # 幅度0.5%io-40xfd7c01cc0xc0008000 # center spread模式# 2. 使能展频功能io-40xfd7c01d00x00010001

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

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

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

原因:目标频率不在PLL频率表格中(如RK3399rk3399_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(594000000,2,99,2,1,1,0),

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 count0

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

解决方案

a.kernel <6.1:添加CLK_IGNORE_UNUSEDflag

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_CRITICALflag,或在bootargsclk_gate.always_on=1

四、总结与注意事项

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

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

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

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

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

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

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

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

推荐阅读:

券商晨会精华:从行业新高看中期热点变动

郑州百荣世贸商城2区C座资产项目

数据复盘:3.83亿净流入汽车整车 龙虎榜抢筹金溢科技

时间跨度长达13年 A股又一百亿级财务造假案曝光!5家上市公司造假细节浮出水面

【12315投诉公示】苏 泊 尔新增3件投诉公示,涉及其他质量问题等

价格周报|本周生猪价格震荡上行 市场乐观预期仍存

您可以还会对下面的文章感兴趣:

暂无相关文章

使用微信扫描二维码后

点击右上角发送给好友