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

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

3天内不再提示

深度拆解RK806 PMIC电源处理流程:从SPI通信到DVS动态调压

jf_44130326 来源:Linux1024 2026-02-05 13:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式设备中,PMIC电源管理集成电路)是能源管家”——它不仅为CPU、内存、外设提供稳定电压,还需处理休眠唤醒、异常保护、动态调压等核心逻辑。瑞芯微RK806作为一款高集成度PMIC,支持10DCDC稳压器、6PLDO+5NLDO,广泛应用于工业控制智能硬件等场景。

本文将从驱动架构出发,逐层拆解RK806电源处理流程(初始化、电压调节、休眠唤醒、关机保护),结合核心代码与流程图,帮你吃透底层逻辑,为定制电源方案、调试问题提供参考。

一、RK806驱动架构:四大核心模块分工

RK806Linux驱动基于MFD(多功能设备)框架设计,通过4个核心文件实现功能解耦,各模块职责清晰:

文件名

核心功能

关键接口/作用

rk806-spi.c

SPI总线通信

实现regmap读写接口,对接硬件SPI

rk806-core.c

核心控制层

设备初始化、中断管理、子设备加载

pinctrl-rk806.c

引脚控制层

GPIO管理、引脚复用(DVS/PWRCTRL

rk806-regulator.c

稳压器驱动层

电压调节、DVS动态调压、异常保护

核心设计思路:以regmap为数据交互核心(屏蔽总线差异),core层统一调度,子模块(regulator/pinctrl)专注细分功能,形成总线核心子设备的分层架构。

二、第一步:RK806初始化流程(从SPI匹配到电源就绪)

初始化是PMIC工作的基础——SPI设备被系统识别,到完成寄存器配置、子设备加载,最终进入可工作状态。整个流程可分为SPI通信初始化核心参数配置两大阶段。

2.1初始化数据流程

1.SPI设备匹配:系统枚举SPI设备时,通过rk806_of_match(兼容rockchip,rk806)或spi_id_table匹配驱动;

2.SPI通信层初始化:调用rk806_spi_probe,分配rk806结构体,绑定SPI设备的devirq

3.regmap初始化:通过devm_regmap_init,将SPI总线的读写函数(rk806_spi_bus_read/write)封装为regmap接口,上层无需关心SPI协议细节;

4.核心初始化入口:调用rk806_device_initcore.c),启动核心配置;

5.设备树解析rk806_parse_dt读取电压阈值(如low_voltage_threshold)、关机序列(shutdown-sequence)、DVS控制参数,默认值兜底(如低电压阈值默认3400mV);

6.寄存器字段映射:初始化regmap_field,将寄存器某几位映射为独立字段(如BUCK1_EN对应0x00寄存器0位),方便单独读写;

7.芯片信息校验:读取CHIP_NAME_H/LCHIP_VER,打印芯片ID(如RK806IDRKxx)和版本,确认硬件匹配;

8.中断系统初始化:添加regmap_irq_chip,管理16路中断(如PWRON按键、VDC电压变化、过温),启用唤醒中断(如VDC中断);

9.加载MFD子设备:通过devm_mfd_add_devices加载3个子设备——rk806-pinctrl(引脚)、rk805-pwrkey(电源键)、rk806-regulator(稳压器);

10.电源参数配置rk806_init设置电压保护阈值(如VB_UV_SEL)、TSD过温阈值(140℃/160℃)、启用2MHz时钟,初始化强制关机序列;

11.调试节点创建:在sysfs创建debug节点,支持通过命令读写寄存器(如echo "w 0x00 0x01" > /sys/rk806/debug)。

2.2初始化流程图(Mermaid

wKgZO2kajEaAfMPUAAFRHw9mCHw763.jpg

三、核心能力:电压调节与DVS动态调压流程

电压调节是PMIC的核心功能——既要为不同外设提供固定电压(如CPU核心1.2V、内存1.8V),也要支持DVS(动态电压调节)(根据负载调整电压,降低功耗)。

3.1常规电压调节流程(固定电压设置)

当应用层需要设置某路稳压器电压(如DCDC_REG1输出1.2V)时,流程如下:

1.应用层请求:通过sysfsregulator API发起请求(如echo 1200000 > /sys/class/regulator/DCDC_REG1/microvolts);

2.regulator框架调度Linux regulator框架调用rk806_set_voltageregulator.c);

3.电压→VSEL映射:调用regulator_map_voltage_linear_range,将目标电压(1200000μV)映射为VSEL——

DCDC为例,电压范围分两段:500mV~1500mV(步长6.25mV)、1500mV~3400mV(步长25mV),1200mV对应VSEL=112(1200-500)/6.25=112);

4.确定目标寄存器:调用rk806_get_write_vsel_register,根据DVS模式选择写入寄存器(正常模式写ON_VSEL,休眠模式写SLP_VSEL);

5.写入寄存器:通过regmap_update_bitsVSEL值写入目标寄存器(如DCDC_REG1对应BUCK1_ON_VSEL=0x1A);

6.同步电压状态:调用rk806_regulator_sync_voltage,确认电压已更新并打印调试信息。

3.2 DVS动态调压流程(负载自适应)

DVS用于按需调压”——比如CPU负载低时降为0.9V,负载高时升为1.2V,实现功耗优化。RK806支持GPIO触发软件触发两种DVS模式:

模式1GPIO触发DVS(硬件信号控制)

1.DVS引脚配置:通过设备树配置dvs-pin1_ctrl,将PWRCTRL1引脚复用为DVS触发引脚;

2.电平变化检测DVS引脚电平变化(如从高变低),触发GPIO中断;

3.切换VSEL寄存器:调用rk806_do_gpio_dvs,读取GPIO电平——

电平= 0:切换为休眠电压(读SLP_VSEL);

电平= 1:切换为工作电压(读ON_VSEL);

1.更新输出电压regmap自动加载对应VSEL值,完成电压切换。

模式2:软件触发DVS(软件命令控制)

1.DVS模式初始化:通过rk806_dvs_mode_init配置为“start bit控制模式;

2.软件触发:应用层触发DVS(如CPU负载升高),调用rk806_do_soft_dvs

3.设置DVS_START:向DVS_START1~3寄存器(0x70)写入1,触发DVS切换;

4.切换电压regmap根据预设的DVS_CTRL_SEL,加载对应电压值。

3.3电压调节流程图

wKgZO2kajEaAXtKoAAB_F6uoXO0558.png

四、休眠唤醒与关机保护:电源状态管理

RK806需处理设备的休眠-唤醒状态切换,以及低电压/过温的异常保护,确保系统稳定。

4.1休眠-唤醒流程

休眠流程(系统进入低功耗)

1.休眠触发:系统执行suspend(如echo mem > /sys/power/state);

2.核心中断处理:调用rk806_core_suspend,禁用RK806IRQ,启用IRQ唤醒(如VDC中断、PWRON按键);

3.regulator休眠配置:调用regulator_suspend,设置休眠电压(写入SLP_VSEL),切换DVS控制方式为休眠模式

4.引脚状态切换pinctrl_select_state将引脚切换到sleep状态(如禁用非必要外设引脚)。

唤醒流程(系统恢复工作)

1.唤醒源触发:唤醒源(如PWRON按键、VDC电压恢复)触发IRQ

2.核心中断恢复:调用rk806_core_resume,启用主IRQ,禁用IRQ唤醒;

3.regulator恢复:调用regulator_resume,恢复工作电压(加载ON_VSEL),重置DVS控制为正常模式

4.引脚恢复pinctrl_select_state将引脚切换回default状态,外设恢复供电。

4.2关机与异常保护流程

RK806支持正常关机异常关机(低电压/过温),核心是按序列关闭电源,避免硬件损坏。

1.正常关机流程

1.关机触发:系统执行shutdown,调用rk806_regulator_shutdown

2.加载关机序列:调用rk806_shutdown_requence_config,从设备树读取shutdown-sequence(如先关DCDC10,再关DCDC9...);

3.引脚状态切换pinctrl_select_state切换到power_off状态,触发电源关闭信号;

4.按序列关电:按预设序列关闭所有DCDC/LDO,完成关机。

2.异常保护流程(低电压为例)

1.低电压检测SYS_STS寄存器(0x5D)的VB_LO_STS位变为1(检测到输入电压低于阈值);

2.保护策略判断:读取VB_LO_ACT配置(0x5E寄存器)——

VB_LO_ACT_SD0x00):直接触发关机;

VB_LO_ACT_INT0x01):先发送中断通知系统;

1.强制关机:调用rk806_vb_force_shutdown_init,加载vb-shutdown-sequence,按序列关闭电源;

2.硬件复位:若电压持续过低,触发DEV_RST0x72寄存器),硬件复位系统。

4.3休眠唤醒与关机流程图

wKgZO2kajEaAGNbnAAFftuXTHRA257.pngwKgZO2kajEaAaZ9DAAAmGgcs1jQ318.pngwKgZO2kajEaAFLocAAB7jfaIwsw197.png

五、RK806电源处理的核心设计亮点

1.分层解耦架构SPI总线层(屏蔽硬件差异)、核心控制层(统一调度)、子设备层(专注细分功能),便于维护和扩展;

2.灵活的调压机制:支持线性电压映射、多模式DVS,适配不同负载场景;

3.完善的异常保护:低电压(2800-3500mV)、过温(140℃/160℃)双重保护,避免硬件损坏;

4.便捷的调试接口sysfs节点支持寄存器读写,无需修改代码即可调试电源参数;

5.设备树驱动分离:电压阈值、关机序列等参数通过设备树配置,无需重新编译驱动,适配不同硬件。

总结

RK806的电源处理流程,本质是regmap为核心,分层实现通信、控制、调压、保护”——SPI通信初始化,到电压调节、休眠唤醒,再到异常关机,每一步都围绕稳定供电低功耗展开。

对于工程师而言,理解这一流程不仅能快速定位电源问题(如电压不稳定、DVS失效),还能根据实际需求定制电源方案(如调整DVS阈值、优化关机序列)。后续我们还将拆解RK806的中断处理、GPIO控制细节,敬请关注!

如果觉得本文有帮助,欢迎点赞、在看,转发给身边的嵌入式同行~


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

    关注

    24

    文章

    4975

    浏览量

    100508
  • 内存
    +关注

    关注

    9

    文章

    3238

    浏览量

    76524
  • PMIC
    +关注

    关注

    15

    文章

    495

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开关电源pcb设计实例 分析RK806电源方案的PCB设计

    模块峰值电流表进行知悉,供PCB Layout时评估线宽作用,如下表值得注意的是,不能简单的全部加起来算成SOC的峰值电流,要评估散热方案,根据实际场景的工作平均电流进行,表格参数值仅供参考。 本篇内容以RK806电源方案的PCB设计
    的头像 发表于 08-02 08:41 3625次阅读
    开关<b class='flag-5'>电源</b>pcb设计实例 分析<b class='flag-5'>RK806</b><b class='flag-5'>电源</b>方案的PCB设计

    如何通过动态电压调整(DVS)来实现精密电压调节?

    本文探讨如何通过动态电压调整(DVS)来实现精密电压调节。DVS是一种根据预期的负载瞬变将输出电压稍微调高或调低的过程。本文介绍如何使用特定IC实现可靠的电压监控。
    的头像 发表于 11-08 13:04 3263次阅读
    如何通过<b class='flag-5'>动态</b>电压调整(<b class='flag-5'>DVS</b>)来实现精密电压调节?

    RK3588 EVB开发板原理图讲解【一】

    看出电源分布,以方便评估项目的电流大小。 4、RK3588电源上电时序 时序基本是RK806这边管控好了,对于硬件工程师基本只需要考虑项目是否需要用到开关机按键 是否需要默认开机就
    发表于 02-11 16:29

    RK3588 EVB开发板原理图讲解【三】

    RK3588 电源管理 ——RK806 介绍 一、RK806 典型应用图 二、RK806 特征 输入范围:2.7V - 5.5V。 待机
    发表于 02-14 16:13

    RK3588 EVB开发板原理图讲解【七】

    处理)。RK806 开关机条件VDC 开机流程• VCCA 有电;• VDC 脚高于 0.8V,推荐值为 1.0V 左右;• EXT_EN 输出高电平;• VCCA\VCC1\VCC2 在 EXT_EN
    发表于 02-28 08:51

    RK3128 Android 7.1 进入深度休眠流程分析

    RK3128 Android 7.1 进入深度休眠流程分析RK3128是瑞芯微电子推出的一款低功耗四核Cortex-A7处理器,运行Andr
    发表于 07-22 10:45

    请问WiFi模块通过串口通信到ZigBee模块的程序吗?

    求助,求助!!!!WiFi模块通过串口通信到ZigBee模块的程序。下面是我们的课题,如果有哪位大神可以把整个的流程和程序都提供的话更好,如果不行的话,提供WiFi通过串口通信到ZigBee模块的程序也行。,价格好商量!!!!
    发表于 04-08 06:55

    一文解析RK3288 PMU配置RK808

    1、RK3288 PMU配置RK808  硬件原理  pmic 电路原理  电源分为两种:  DCDC:输入输出压差大时,效率高,但是有纹波问题,成本高,所以大压差,大电流时使用。  
    发表于 09-02 17:07

    求一种RK3588+FPGA高速图像处理通信处理机解决方案

    Corte A55 CPU,内置6Tops 独立NPU,运用RK806-2双PMIC供电方案,支持LPDDR4X/eMMC存储,拥有HDMI、MIPI、VGA、SATA等10余个外设接口,具有集成度高、性能强
    发表于 09-15 17:41

    瑞芯微:已有多款搭载RK3588M芯片乘用车面世

    瑞芯微进一步指出,公司在汽车电子领域已经积累了多年经验,在汽车全组装和后组装中都有分布。在前装模块市场上,有最具代表性的智能模块芯片rk3588米、仪表盘控制芯片rk3358米、音频芯片rk3308米、
    的头像 发表于 09-21 10:22 4045次阅读

    RK806电源方案的PCB设计注意事项

    RK3588系统采用PMIC芯片RK806来进行整体供电,如图1所示。整体布局时在满足结构和特殊器件的布局同时RK806尽量靠近RK3588
    的头像 发表于 09-23 07:40 2564次阅读
    <b class='flag-5'>RK806</b><b class='flag-5'>电源</b>方案的PCB设计注意事项

    RK3568 EVB开发板 深度休眠与快速醒的工作流程

    RK3568 EVB开发板关于深度休眠和唤醒流程的分析
    的头像 发表于 07-22 09:49 1088次阅读
    <b class='flag-5'>RK</b>3568 EVB开发板 <b class='flag-5'>深度</b>休眠与快速醒的工作<b class='flag-5'>流程</b>

    解决RK806+RK3588休眠异常!硬件特性到软件优化的完整方案

    在嵌入式开发中,电源管理的稳定性直接决定了设备的可靠性。近期,RK3588 平台搭配 RK806 电源管理芯片(PMIC)时,出现了二次休眠
    的头像 发表于 02-09 16:46 968次阅读
    解决<b class='flag-5'>RK806+RK</b>3588休眠异常!<b class='flag-5'>从</b>硬件特性到软件优化的完整方案

    RK806中断处理流程深度解析:架构到调试实战

    RK806 作为瑞芯微主流 PMIC电源管理芯片),其中断机制是实现“电源键响应、电压异常保护、休眠唤醒、 watchdog 超时处理
    的头像 发表于 02-05 13:46 2510次阅读
    <b class='flag-5'>RK806</b>中断<b class='flag-5'>处理</b><b class='flag-5'>流程</b><b class='flag-5'>深度</b>解析:<b class='flag-5'>从</b>架构到调试实战

    RK 平台 SPI 开发完全指南(驱动 + 配置 + 测试 + 优化)

    ,全方位拆解 RK 平台 SPI 开发流程。 一、 RK 平台 SPI 核心特性速览     1
    的头像 发表于 01-30 22:35 1224次阅读
    <b class='flag-5'>RK</b> 平台 <b class='flag-5'>SPI</b> 开发完全指南(驱动 + 配置 + 测试 + 优化)