0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK3576时钟系统深度解析:从原理到实践,玩转SoC核心时钟!

jf_44130326 来源:Linux1024 作者:Linux1024 2026-04-28 07:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

时钟系统是SoC的“心脏”,为所有外设和核心部件提供稳定、精准的时钟信号,直接决定了芯片的性能、功耗与稳定性。RK3576作为瑞芯微主流的中高端SoC,其时钟系统设计灵活且复杂,今天我们就从概念到代码、从逻辑到数据流,全方位拆解RK3576的时钟系统,帮开发者彻底搞懂这一核心模块!

一、概念分析

1.时钟系统基本概念

时钟系统的核心术语是理解RK3576时钟架构的基础,先理清这几个关键概念:

PLL(锁相环):时钟系统的核心,将24MHz/26MHz晶振输入的参考时钟倍频到更高频率,为不同模块提供高频时钟源。

时钟树:从PLL输出开始,通过分频器、选择器层层分配时钟到各外设的层级结构,是时钟分配的“脉络”。

时钟源:提供基础时钟的设备,最典型的就是晶振(OSC)。

时钟域:芯片中使用相同/相关时钟的功能模块集合,不同域可独立配置时钟,兼顾性能与功耗。

2. RK3576时钟架构

RK3576采用多级时钟架构,覆盖核心、总线、外设、显示等全场景,主要分为四类:

核心PLL:包含BPLL、LPLL、VPLL、AUPLL、CPLL、GPLL、PPLL等,为不同功能域提供专属高频时钟;

总线时钟ACLK_BUS_ROOT、HCLK_BUS_ROOT、PCLK_BUS_ROOT等,支撑总线数据传输的时钟;

外设时钟:为I2C、SPI、PWM、ADC、MMC等外设提供工作时钟;

显示时钟:专门为VOP(视频输出处理)模块设计的时钟,保障显示输出的稳定性。

二、代码分析

RK3576的时钟驱动代码核心位于u-bootdriversclkrockchipclk_rk3576.c(约2750行),我们从核心数据结构、操作函数、外设时钟处理三个维度拆解。

1.核心数据结构

PLL是时钟系统的核心,代码中通过专用结构体定义PLL速率表和时钟配置:

// PLL时钟表staticstructrockchip_pll_rate_table rk3576_24m_pll_rates[] = { /* _mhz, _p, _m, _s, _k */  RK3588_PLL_RATE(1500000000,2,250,1,0), // ... 更多速率配置};// PLL时钟结构staticstructrockchip_pll_clock rk3576_pll_clks[] = {  [BPLL] = PLL(pll_rk3588, PLL_BPLL, RK3576_PLL_CON(0),        RK3576_BPLL_MODE_CON0,0,15,0,        rk3576_24m_pll_rates), // ... 更多PLL配置};

2.主要操作函数

时钟驱动的核心是“获取速率”和“设置速率”,代码通过switch-case匹配不同时钟ID,调用专属处理函数:

时钟速率获取

staticulongrk3576_clk_get_rate(structclk *clk){ structrk3576_clk_priv *priv = dev_get_priv(clk->dev); ulongrate =0;
 // 根据时钟ID调用相应的获取函数 switch(clk->id) { casePLL_LPLL:    rate = rockchip_pll_get_rate(&rk3576_pll_clks[LPLL], priv->cru, LPLL);    priv->lpll_hz = rate;   break; caseACLK_BUS_ROOT: caseHCLK_BUS_ROOT: casePCLK_BUS_ROOT:    rate = rk3576_bus_get_clk(priv, clk->id);   break; // ... 更多时钟类型  } returnrate;}

时钟速率设置

staticulongrk3576_clk_set_rate(structclk *clk,ulongrate){ structrk3576_clk_priv *priv = dev_get_priv(clk->dev); ulongret =0;
 // 根据时钟ID调用相应的设置函数 switch(clk->id) { casePLL_CPLL:    ret = rockchip_pll_set_rate(&rk3576_pll_clks[CPLL], priv->cru, CPLL, rate);    priv->cpll_hz = rockchip_pll_get_rate(&rk3576_pll_clks[CPLL], priv->cru, CPLL);   break; // ... 更多时钟类型  } returnret;}

3.外设时钟处理

以常用的I2C时钟为例,代码通过读取寄存器确定时钟源,再返回对应速率:

staticulong rk3576_i2c_get_clk(structrk3576_clk_priv *priv, ulong clk_id) { structrk3576_cru *cru = priv->cru;  u32 sel, con;  ulong rate;
 // 根据I2C实例读取相应的寄存器 switch(clk_id) { caseCLK_I2C0:    con = readl(&cru->pmuclksel_con[6]);    sel = (con &CLK_I2C0_SEL_MASK) >>CLK_I2C0_SEL_SHIFT;   break; // ... 更多I2C实例  }
 // 根据选择的时钟源返回相应的速率 if(sel ==CLK_I2C_SEL_200M)    rate =200* MHz; elseif(sel ==CLK_I2C_SEL_100M)    rate =100* MHz; elseif(sel ==CLK_I2C_SEL_50M)    rate =50* MHz; else    rate = OSC_HZ;
 returnrate;}

三、逻辑分析

1.时钟初始化流程

RK3576时钟驱动的初始化遵循“加载-绑定-初始化-探测-时钟配置”的流程,一步都不能少:

1.驱动加载:通过U_BOOT_DRIVER注册时钟驱动;

2.设备绑定:rk3576_clk_bind函数绑定相关设备;

3.平台数据初始化:rk3576_clk_ofdata_to_platdata获取硬件寄存器地址;

4.驱动探测:rk3576_clk_probe函数完成驱动初始化;

5.时钟初始化:rk3576_clk_init设置默认PLL频率。

2.时钟配置逻辑

时钟配置的核心是“选源-分频-使能”,逻辑如下:

1.PLL配置:根据目标频率,选择P、M、S、K参数(倍频系数);

2.时钟源选择:为外设匹配最合适的时钟源(如PLL输出/晶振);

3.分频配置:计算并设置分频系数,将时钟降到外设所需频率;

4.时钟使能:确认时钟信号正确输出到外设。

3.时钟速率计算

时钟分频分为“整数分频”和“分数分频”,对应两种计算方式:

整数分频:DIV_TO_RATE(input_rate, div) = input_rate / (div + 1);

分数分频:通过rational_best_approximation函数计算最佳分数近似值,适配更精细的频率需求。

四、数据流走向

RK3576的时钟信号从“源头”到“外设”,遵循固定的流向,可概括为5步:

1.晶振输入:24MHz/26MHz参考时钟(时钟系统的“起点”);

2.PLL倍频:PLL将参考时钟倍频到高频(如BPLL可达1.8GHz);

3.时钟选择:时钟选择器从多个PLL输出中选取出目标时钟源;

4.时钟分频:分频器将高频时钟降到外设可承受的频率;

5.外设使用:处理后的时钟信号输入到I2C/SPI/显示等外设。

简化流程图:

晶振(24MHz) → PLL倍频 → 时钟选择器 → 分频器 → 外设

五、开发者需要注意的事项

调试/配置RK3576时钟时,6个关键点直接影响系统稳定性,务必牢记:

1.时钟依赖关系:部分外设时钟依赖特定PLL /总线时钟,修改前需梳理依赖链;

2.频率限制:每个外设都有工作频率范围(如I2C通常≤400KHz),超出范围会导致功能异常;

3.功耗考虑:高频时钟=高功耗,按需配置频率,平衡性能与功耗;

4.稳定性:时钟频率突变易导致系统崩溃,需逐步调整;

5.寄存器操作:直接写时钟寄存器风险高,错误配置可能让芯片“变砖”;

6.SCMI接口:若通过SCMI管理时钟,需严格遵循SCMI协议规范。

六、调试案例

以“我2C时钟配置异常导致通信失败”为例,手把手教你定位问题:

问题描述

I2C总线无响应,通信完全失败。

调试步骤

1.检查时钟是否使能:用clk dump命令查看I2C时钟状态:

=> clk dumpCLK: (uboot.arm:enter1800000KHz, init1800000KHz, kernel 0N/A) bpll1800000KHz lpll1200000KHz vpll5940000KHz ... clk_i2c0100000KHz

2.读取时钟配置寄存器:确认I2C时钟源选择的寄存器值:

// 读取I2C0时钟配置con = readl(&cru->pmuclksel_con[6]);sel = (con &CLK_I2C0_SEL_MASK) >>CLK_I2C0_SEL_SHIFT;

3.验证时钟源:确认选择的时钟源是否匹配预期:

if(sel ==CLK_I2C_SEL_200M)  rate =200* MHz;elseif(sel ==CLK_I2C_SEL_100M)  rate =100* MHz;

4.调整时钟频率:若频率不匹配,重新配置:

rk3576_i2c_set_clk(priv, CLK_I2C0,100000); // 设置为100KHz

解决方案

定位到“I2C时钟源选择错误”,重新配置为100MHz时钟源并正确分频,I2C通信恢复正常。

七、时钟系统完整流程图

wKgZPGnv7MmAIEy0AABVSgfYU-A606.png

八、总结

RK3576时钟系统的核心优势是“灵活”——多级PLL +丰富的选择器/分频器,能为不同外设定制时钟方案。开发者只要理清时钟树结构、遵循配置流程,就能兼顾“性能、功耗、稳定性”。

最后给个调试小技巧:遇到时钟问题时,先用clk dump查看时钟状态,再结合寄存器读写定位问题,效率会大幅提升!

希望这篇深度解析能帮你玩转RK3576时钟系统,少踩坑、多提效~

审核编辑 黄宇

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

    关注

    40

    文章

    4635

    浏览量

    230232
  • 时钟系统
    +关注

    关注

    1

    文章

    135

    浏览量

    13025
  • rk3576
    +关注

    关注

    1

    文章

    304

    浏览量

    1678
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    米尔RK3576RK3588怎么选?-看这篇就够了

    在中国半导体产业的版图中,瑞芯微作为国内SoC芯片领跑者,凭借其在处理器芯片设计领域的深厚积累和持续创新,推出很多智能应用处理器芯片,在嵌入式系统领域得到大规模的应用。RK3588和RK357
    发表于 12-27 11:44

    性能到成本,深度剖析 RK3588 与 RK3576 怎么选

    在中国半导体产业的版图中,瑞芯微作为国内SoC芯片领跑者,凭借其在处理器芯片设计领域的深厚积累和持续创新,推出很多智能应用处理器芯片,在嵌入式系统领域得到大规模的应用。RK3588和RK357
    发表于 02-09 09:10

    国产开发板的端侧AI测评-基于米尔瑞芯微RK3576

    分为核心板以及扩展板,核心板是基于瑞芯微在今年第二季推出的全新通用型SOC芯片RK3576,扩展板则扩展了众多的外设接口,方便工程师调试或者直接基于开发板做原型开发。 值得一提的是,
    发表于 02-14 16:29

    适配多种系统,米尔瑞芯微RK3576核心板解锁多样化应用

    RK3576 核心板提供了 Linux、Debian、Android 多种系统镜像,为工程师提供了多样化的选择,助力各行业产品开发落地。 一、系统介绍
    发表于 05-23 16:07

    RK3576 vs RK3588:为何越来越多的开发者转向RK3576

    的成本结构以及针对特定场景的深度优化,正在成为中高端市场的热门选择。那么,RK3576 究竟有哪些优势?它是否真的能替代 RK3588?我们来做一个全面对比。 1. 核心性能对比:
    发表于 05-30 08:46

    Mpp支持RK3576

    想问下,https://github.com/rockchip-linux/mpp这里面支持RK3576么,看介绍没有提到说支持RK3576 目前是买了个rk3576的机顶盒,搭载了安卓14,想做安卓视频硬解。
    发表于 06-13 15:35

    RK这2款旗舰芯片RK3588 PK RK3576,谁是最优选

    ,了解两者的区别十分重要,以下将从多个方面进行详细对比。一、处理器性能解析(一)CPU 性能1. 核心架构◦ RK3576:采用四核 Cortex - A72 和四核 Cortex - A53 架构
    发表于 07-10 18:24

    【作品合集】米尔RK3576开发板测评

    测试 作者:鲁治驿【米尔RK3576开发板免费体验】测评综合解析 【米尔RK3576开发板免费体验】集成MQ-2烟雾传感器和ADS1263模块实现气体监测 【米尔RK3576开发板免费
    发表于 09-11 10:19

    基于米尔RK3576核心板的国产割草机器人解决方案

    :国产芯片如何赋能四大关键系统 基于米尔RK3576核心板,我们构建了一套完整的“感知-决策-控制”闭环系统,全面适配国产操作系统与算法生态
    发表于 04-24 17:31

    宇珑RK3576核心板与嵌入式主板通用平台介绍

    宇珑RK3576核心板与嵌入式主板通用平台介绍
    的头像 发表于 08-26 17:23 1932次阅读
    宇珑<b class='flag-5'>RK3576</b><b class='flag-5'>核心</b>板与嵌入式主板通用平台介绍

    新品体验 | RK3576开发板

    RK3399、RK3566、RK3568、RK3588、RK3576等型号的核心板与评估板。鉴
    的头像 发表于 11-01 08:08 3411次阅读
    新品体验 | <b class='flag-5'>RK3576</b>开发板

    RK3576单板发布倒计时:RK3399与RK3576对比

    好多人说RK3576RK3399的升级版,某种程度上也可以这么说,RK3576在强大的多媒体功能的基础上,性能和接口都进行了升级 一、工艺 性能 rk3576采用 Rockchip
    的头像 发表于 12-03 16:59 2787次阅读
    <b class='flag-5'>RK3576</b>单板发布倒计时:<b class='flag-5'>RK</b>3399与<b class='flag-5'>RK3576</b>对比

    RK3588与RK3576区别解析

    以下是RK3576RK3588对比: 电鱼电子SBC-RK3576单板 核心性能:RK3576为四核A72@2.2GHz + 四核A53@
    的头像 发表于 12-17 14:03 4438次阅读
    <b class='flag-5'>RK</b>3588与<b class='flag-5'>RK3576</b>区别<b class='flag-5'>解析</b>

    瑞芯微RK3576RK3576S有什么区别,性能参数配置与型号差异解析

    、物联网等商用AIoT领域。(瑞芯微RK3576RK3576S芯片框图)触觉智能作为专业的瑞芯微方案商,基于RK3576芯片平台推出了核心板、开发板、行业主板等
    的头像 发表于 08-14 23:57 2739次阅读
    瑞芯微<b class='flag-5'>RK3576</b>与<b class='flag-5'>RK3576</b>S有什么区别,性能参数配置与型号差异<b class='flag-5'>解析</b>

    迅为如何在RK3576上部署YOLOv5;基于RK3576构建智能门禁系统

    迅为如何在RK3576开发板上部署YOLOv5;基于RK3576构建智能门禁系统
    的头像 发表于 11-25 14:06 1980次阅读
    迅为如何在<b class='flag-5'>RK3576</b>上部署YOLOv5;基于<b class='flag-5'>RK3576</b>构建智能门禁<b class='flag-5'>系统</b>