Rockchip · AI & Linux Hub

Linux 与启动

Rockchip RK806 PMIC 开发指南:供电、DTS 配置与调试

Rockchip RK806 PMIC 开发指南:供电、DTS 配置与调试 — V1.0.0

· ArmSoM Editorial · Rockchip source documentation · 13 分钟阅读

原稿 RK-KF-YF-199 V1.0.0,适用 RK806、Linux 5.10。介绍 PMIC 子模块、概念、功能、DTS 与常见问题定位。本文为平台参考;ArmSoM 板卡的 PMIC 型号、SoC、SDK/BSP、内核、供电和引脚连线须逐项核对,未进行 ArmSoM 硬件验证。只有中文原稿,因此四语均使用中文 PDF 原图(图内有英文标签),没有对应英文 PDF。所有硬件命令仅记录,未执行。

ArmSoM Docs · Rockchip Linux

1. 基础

1.1 概述

RK806 是一款高性能 PMIC,RK806 集成 10个大电流 DCDC、5个NLDO、6 个 PLDO、可调上电时序等功能。系统中各路电源总体分为两种:DCDC 和 LDO。两种电源的总体特性如下(详细资料请自行搜索):

  1. DCDC:输入输出压差大时,效率高,但是存在纹波比较大的问题,成本高,所以大压差,大电流负载时使用。一般有两种工作模式。PWM 模式:纹波瞬态响应好,效率低;PFM 模式:效率高,但是负载能力差。
  1. PLDO:和以前PMIC的LDO一样(最低输入电压2.0V,最高5.5V)
  1. NLDO:支持低压输入输出,损耗更小(比如1.1V输入0.9V输出)

1.2 功能

从使用者的⻆度看,RK806 的功能概况起来可以分为 3 个部分:

  1. regulator 功能:控制各路 DCDC、LDO 电源状态;
  1. gpio 功能:有3个IO可用,可以控制整个PMIC进待机,也可以单独分给指定电源进待机,也可当普通 gpio 使用;
  1. pwrkey 功能:检测 power 按键的按下/释放,可以为 AP 节省一个 gpio。

1.3 芯片引脚功能

中文 PDF 原图 — p.5

中文 PDF 原图 — p.5

下面描述中,SLEEP 和 INT 引脚需要重点关注:

中文 PDF 原图 — p.6

中文 PDF 原图 — p.6

中文 PDF 原图 — p.7

中文 PDF 原图 — p.7

引脚定义(由上述原图逐行转录;保留原稿名称和 I/O 标记)

引脚号 引脚名 描述 I/O
1 VCC9 buck9 电源 I
2 SYNC 主从同步信号 I/O
3 SYNC_CLK 32k 同步时钟 I/O
4 PWRON 开机键,内部上拉电阻约 45K I
5 VOUT8 buck8 输出反馈电压 O
6 SW8 buck8 开关节点 O
7 VCC8 buck8 电源 I
8 NLDO5 NMOS LDO5 输出 O
9 VCC14 NLDO3/4/5 电源 I
10 NLDO4 NMOS LDO4 输出 O
11 NLDO3 NMOS LDO3 输出 O
12 NLDO2 NMOS LDO2 输出 O
13 VCC13 NLDO1/2 电源 I
14 NLDO1 NMOS LDO1 输出 O
15 MOSI/SCL SPI MOSI, I2C SCL I/O
16 MISO/SDA/PWRCRTL3 SPI MISO、I2C SDA、PWRCRTL3 控制 I/O
17 CLK SPI CLK O
18 CS 选择 I2C/SPI;接 VCCA 为 I2C 模式 I
19 INT 中断 O
20 VCCIO/PLDO6 PMOS LDO6 输出;SPI/I2C 接口 VCCIO O
21 VCCA 模拟电源;PLDO6 和系统逻辑电源 I
22 VCC4 buck4 电源 I
23 SW4 buck4 开关节点 O
24 VOUT4 buck4 输出反馈电压 O
25 VOUT10 buck10 输出反馈电压 O
26 SW10 buck10 开关节点 O
27 VCC10 buck10 电源 I
28 VCC6 buck6 电源 I
29 SW6 buck6 开关节点 O
30 VOUT6 buck6 输出反馈电压 O
31 FB6 buck6 外部分压电阻模式反馈电压 O
32 VDC VDC 开机信号 I
33 VCC2 buck2 电源 I
34 VCC2 buck2 电源 I
35 SW2 buck2 开关节点 O
36 SW2 buck2 开关节点 O
37 VOUT2 buck2 输出反馈电压 O
38 FB2 buck2 外部分压电阻模式反馈电压 O
39 EXT_EN 控制外部 DCDC 使能;主从选择 I
40 RESETB 复位 AP I/O
41 VOUT7 buck7 输出反馈电压 O
42 SW7 buck7 开关节点 O
43 VCC7 buck7 电源 I
44 VCC5 buck5 电源 I
45 SW5 buck5 开关节点 O
46 VOUT5 buck5 输出反馈电压 O
47 FB5 buck5 外部分压电阻模式反馈电压 O
48 FB1 buck1 外部分压电阻模式反馈电压 O
49 VOUT1 buck1 输出反馈电压 O
50 SW1 buck1 开关节点 O
51 SW1 buck1 开关节点 O
52 VCC1 buck1 电源 I
53 VCC1 buck1 电源 I
54 VCC3 buck3 电源 I
55 SW3 buck3 开关节点 O
56 VOUT3 buck3 输出反馈电压 O
57 PLDO3 PMOS LDO3 输出 O
58 PLDO2 PMOS LDO2 输出 O
59 VCC11 PLDO1/2/3 电源 I
60 PLDO1 PMOS LDO1 输出 O
61 PWRCRTL2 PWRCRTL2 控制 I/O
62 PWRCRTL1 PWRCRTL1 控制 I/O
63 PLDO4 PMOS LDO4 输出 O
64 VCC12 PLDO4/5 电源 I
65 PLDO5 PMOS LDO5 输出 O
66 FB9 buck9 外部分压电阻模式反馈电压 O
67 VOUT9 buck9 输出反馈电压 O
68 SW9 buck9 开关节点 O
Exposed ePAD 地  

1.4 重要概念

支持SPI和I2C通信当前软件上只支持SPI通信模式,默认SPI频率是1M。PMIC 有 3 种工作模式

  1. PMIC normal 模式系统正常运行时 PMIC 处于 normal 模式,此时 pmic_sleep 的有效电平可配置。
  1. PMIC sleep 模式系统休眠时需要待机功耗尽量低,PMIC 会切到 sleep 模式减低自身功耗,这时候一般会降低某些路的输出电压,或者直接关闭输出,这可以根据实际产品需求进行配置。系统待机时 AP 通过 SPI指令把 pmic_sleep 配置成 sleep 模式,然后拉高 pmic_sleep 即可让 PMIC 进入 sleep 状态;当 SoC唤醒时 pmic_sleep 恢复为低电平,PMIC 退出休眠模式。
  1. PMIC shutdown 模式当系统进入关机流程的时候,PMIC 需要完成整个系统的电源下电操作。AP 通过 SPI指令把pmic_sleep 配置成 shutdown 模式,然后拉高 pmic_sleep 即可让 PMIC 进入 shutdown 状态。int 引脚常态为高电平,当有中断产生的时候变为低电平。如果中断没有被处理,则会一直维持低电平。pwrcrtl1/pwrcrtl2/pwrcrtl3 引脚这两个引脚可以当普通的 gpio 使用。pwron 引脚pwrkey 的功能需要硬件上将 power 按键接到这个引脚,驱动通过这个引脚来判断按下/释放。各路 DCDC 的工作模式DCDC 有 PWM(也叫 force PWM)、PFM 模式,但是 PMIC 有一种模式会动态切换 PWM、PFM,这就是我们通常所说的 AUTO 模式。PMIC 支持 PWM、AUTO PWM/PFM 两种模式,AUTO模式效率高但是纹波瞬态响应会差。出于系统稳定性考虑,运行时都是设置为 PWM 模式,系统进入休眠时会选择切换到 AUTO PWM/PFM。PLDO6 电压调节PMIC与AP的VCCIO供电口,只要有用到这些io口就必须供电,且供电电压要大于等于1.8V,即PLDO6通常应用中不能底于1.8V,且待机时不能关闭。DCDC 和 LDO 的运行时电压调节范围
  1. DCDC 电压范围不连续:
电压范围(V) 步进值(mV) 具体档位值(V)
0.7125 ~ 1.45 6.25 0.5、0.50625、 …… 1.5
1.5~ 3.4 25 1.5、1.525、…… 3.4
  1. NLDO/PLDO 电压连续:
电压范围(V) 步进值(mV) 具体档位值(V)
0.5 ~ 3.4 12.5 0.5125、0.525、…… 3.4

1.5 双PMIC协同工作

主从:协同工作时两颗PMIC分主从模式,主从芯片配置通过第一次上电时EXT_EN引脚电平状态来区分。EXT_EN和VCCA短接在一起的为Slave,EXT_EN悬空或有电阻下拉的为主机。同步:双RK806协同工作,两颗芯片的SYNC_CLK和SYNC互连,主芯片提供时钟(SYNC_CLK,频率接近32K)从芯片接收,SYNC提供同步信号,产生同步脉冲用于实现:开机、关机、复位及上下电时序。

PWRON、RESETB信号:主从的这两个信号分别短接在一起,用于PMIC的开机始能,和外接复位按键时的外部复位信号输入。VDC信号:主从的VDC脚可以短接在一起,也可以把SALVE的VDC接到MASTER的EXT_EN上。

2. 配置

2.1 驱动和 menuconfig

RK806 驱动文件:

drivers/mfd/rk806-core.c
drivers/mfd/rk806-spi.c
drivers/pinctrl/pinctrl-rk806.c
drivers/regulator/rk806-regulator.c

menuconfig 里对应的宏配置:

CONFIG_PINCTRL_RK806=y
CONFIG_MFD_RK806_SPI=y
CONFIG_REGULATOR_RK806=y

2.2 DTS 配置

5.10 内核配置DTS 的配置包括:spi挂载、gpio、regulator 等部分。单RK806 dts配置

&pinctrl {
         pmic {
                soc_slppin_gpio: soc_slppin_gpio {
                        rockchip,pins = <0 RK_PA2
                                RK_FUNC_GPIO &pcfg_output_low>;
                };
                soc_slppin_shutdown: soc_slppin_shutdown {
                        rockchip,pins = <0 RK_PA2
                                RK_FUNC_GPIO &pcfg_output_high>;
                };
        };
};

&spi2 {
        status = "okay";
        assigned-clocks = <&cru CLK_SPI2>;
        assigned-clock-rates = <200000000>;
        num-cs = <&spi2 {
        status = "okay";
        assigned-clocks = <&cru CLK_SPI2>;
        assigned-clock-rates = <200000000>;
        num-cs = <2>;

        rk806single@0 {
                compatible = "rockchip,rk806";
                spi-max-frequency = <1000000>;
                reg = <0x0>;

                interrupt-parent = <&gpio0>;
                interrupts = <7 IRQ_TYPE_LEVEL_LOW>;

                pinctrl-names = "default", "pmic-sleep", "pmic-power-off", "pmic-reset";
                pinctrl-0 = <&soc_slppin_gpio>, <&rk806_dvs1_null>, <&rk806_dvs2_null>, <&rk806_dvs3_null>;
                pinctrl-1 = <&soc_slppin_gpio>, <&rk806_dvs1_slp>, <&rk806_dvs2_null>, <&rk806_dvs3_null>;
                pinctrl-2 = <&rk806_dvs1_pwrdn>, <&rk806_dvs2_null>, <&rk806_dvs3_null>;
                pinctrl-3 = <&rk806_dvs1_rst>, <&rk806_dvs2_null>, <&rk806_dvs3_null>;

                /* 2800mv-3500mv */
                low_voltage_threshold = <3000>;
                /* 2700mv-3400mv */
                shutdown_voltage_threshold = <2700>;
                /* 140 160 */
                shutdown_temperture_threshold = <160>;
                hotdie_temperture_threshold = <115>;

                /* 0: restart PMU;
                 * 1: reset all the power off reset registers,
                 *    forcing the state to switch to ACTIVE mode;
                 * 2: Reset all the power off reset registers,
                 *    forcing the state to switch to ACTIVE mode,
                 *    and simultaneously pull down the RESETB PIN for 5mS before releasing
                 */
                pmic-reset-func = <1>;

                vcc1-supply = <&vcc5v0_sys>;
                vcc2-supply = <&vcc5v0_sys>;
                vcc3-supply = <&vcc5v0_sys>;
                vcc4-supply = <&vcc5v0_sys>;
                vcc5-supply = <&vcc5v0_sys>;
                vcc6-supply = <&vcc5v0_sys>;
                vcc7-supply = <&vcc5v0_sys>;
                vcc8-supply = <&vcc5v0_sys>;
                vcc9-supply = <&vcc5v0_sys>;
                vcc10-supply = <&vcc5v0_sys>;
                vcc11-supply = <&vcc_2v0_pldo_s3>;
                vcc12-supply = <&vcc5v0_sys>;
                vcc13-supply = <&vcc_1v1_nldo_s3>;
                vcc14-supply = <&vcc_1v1_nldo_s3>;
                vcca-supply = <&vcc5v0_sys>;2>;

                regulators {
                        vdd_gpu_s0: vdd_gpu_mem_s0: DCDC_REG1 {
                                regulator-always-on;
                                regulator-boot-on;
                                regulator-min-microvolt = <550000>;
                                regulator-max-microvolt = <950000>;
                                regulator-ramp-delay = <12500>;
                                regulator-name = "vdd_gpu_s0";
                                regulator-state-mem {
                                        regulator-off-in-suspend;
                                };
                        };

                        vdd_cpu_lit_s0: vdd_cpu_lit_mem_s0: DCDC_REG2 {
                                regulator-always-on;
                                regulator-boot-on;
                                regulator-min-microvolt = <550000>;
                                regulator-max-microvolt = <950000>;
                                regulator-ramp-delay = <12500>;
                                regulator-name = "vdd_cpu_lit_s0";
                                regulator-state-mem {
                                        regulator-off-in-suspend;
                                };
                        };

                        vdd_log_s0: DCDC_REG3 {
                            .................
                        };

                        vdd_vdenc_s0: vdd_vdenc_mem_s0: DCDC_REG4 {
                            .................
                       };
                       .............................
               };
        };
};

双RK806 dts配置:

&pinctrl {
    pmic {
            soc_slppin_gpio: soc_slppin_gpio {
                    rockchip,pins = <0 RK_PA2
                            RK_FUNC_GPIO &pcfg_output_low>;
            };
            soc_slppin_shutdown: soc_slppin_shutdown {
                    rockchip,pins = <0 RK_PA2
                            RK_FUNC_GPIO &pcfg_output_high>;
            };
    };
};

&spi2 {
        status = "okay";
        assigned-clocks = <&cru CLK_SPI2>;
        assigned-clock-rates = <200000000>;
        num-cs = <2>;
        rk806master@0 {
                compatible = "rockchip,rk806";
                spi-max-frequency = <1000000>;
                reg = <0x0>;

                interrupt-parent = <&gpio0>;
                interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
                /* 0: restart PMU;
                 * 1: reset all the power off reset registers,
                 *    forcing the state to switch to ACTIVE mode;
                 * 2: Reset all the power off reset registers,
                 *    forcing the state to switch to ACTIVE mode,
                 *    and simultaneously pull down the RESETB PIN for 5mS before releasing
                 */
                pmic-reset-func = <1>;

                vcc1-supply = <&vcc5v0_sys>;
                vcc2-supply = <&vcc5v0_sys>;
                .................
                vcca-supply = <&vcc5v0_sys>;
                regulators {
                        vdd_gpu_s0: DCDC_REG1 {
                                regulator-always-on;
                                regulator-boot-on;
                                regulator-min-microvolt = <550000>;
                                regulator-max-microvolt = <950000>;
                                regulator-ramp-delay = <12500>;
                                regulator-name = "vdd_gpu_s0";
                                regulator-state-mem {
                                        regulator-off-in-suspend;
                                };
                      };
                        vdd_npu_s0: DCDC_REG2 {
                        .................
                        };
                        .................
              };
       };
       rk806slave@1 {
                compatible = "rockchip,rk806";
                spi-max-frequency = <1000000>;
                reg = <0x01>;

                interrupt-parent = <&gpio0>;
                interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
                /* 0: restart PMU;
                 * 1: reset all the power off reset registers,
                 *    forcing the state to switch to ACTIVE mode;
                 * 2: Reset all the power off reset registers,
                 *    forcing the state to switch to ACTIVE mode,
                 *    and simultaneously pull down the RESETB PIN for 5mS before releasing
               */
                pmic-reset-func = <1>;

                vcc1-supply = <&vcc5v0_sys>;
                vcc2-supply = <&vcc5v0_sys>;
                .................
                vcca-supply = <&vcc5v0_sys>;

                pwrkey {
                        status = "disabled";
                };
                regulators {
                        vdd_cpu_big1_s0: DCDC_REG1 {
                                regulator-always-on;
                                regulator-boot-on;
                                regulator-min-microvolt = <550000>;
                                regulator-max-microvolt = <950000>;
                                regulator-ramp-delay = <12500>;
                                regulator-name = "vdd_cpu_big1_s0";
                                regulator-state-mem {
                                        regulator-off-in-suspend;
                                };
                        };
                        vdd_cpu_big0_s0: DCDC_REG2 {
                        .................
                        };
                        .................
                };
       };
};
  1. spi 挂载整个完整的 rk806 节点挂在对应的spi 节点下面,并且配置 status = “okay”;
  1. 主体部分不可修改:
compatible = "rockchip,rk806";
spi-max-frequency = <1000000>;
reg = <0x0>;

interrupt-parent = <&gpio0>;
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;

可修改(按照 pinctrl 规则)interrupt-parent:pmic_int 隶属于哪个 gpio;interrupts:pmic_int 在 interrupt-parent 的 gpio 上的引脚索引编号和极性;

  1. pwrkey、gpio项目中若没有用到pwerkey或者gpio功能,可以在 dts 里增加pwrkey、gpio 节点,并且显式指明状态为status = “disabled”,这样就不会使能驱动,但是开机信息会有错误 log 报出,可以忽略。
pwrkey {
        status = "disabled";
};
  1. regulatorregulator-compatible :驱动注册时需要匹配的名字,不能改动,否则会加载失败;regulator-name :电源的名字,建议和硬件图上保持一致,使用 regulator_get 接口时需要匹配这个名字;regulator-init-microvolt :u-boot阶段的初始化电压,kernel阶段无效;regulator-min-microvolt :运行时可以调节的最小电压;regulator-max-microvolt :运行时可以调节的最大电压;regulator-initial-mode :运行时 DCDC 的工作模式,一般配置为 1。 1:force pwm,2:auto pwm/pfm;regulator-mode :休眠时 DCDC 的工作模式,一般配置为 2。1:force pwm, 2:autopwm/pfm;regulator-initial-state :suspend 时的模式,必须配置成 3;regulator-boot-on :存在这个属性时,在注册 regulator 的时候就会使能这路电源;regulator-always-on :存在这个属性时,表示运行时不允许关闭这路电源且会在注册的时候使能这路电源;regulator-ramp-delay :DCDC 的电压上升时间,固定配置为 12500;regulator-on-in-suspend :休眠时保持上电状态,想要关闭该路电源,则改成”regulator-off-in-suspend”;regulator-suspend-microvolt :休眠不断电情况下的待机电压。

5.10内核配置请参考5.10内核DTS配置。

2.3 函数接口

如下几个接口基本可以满足日常使用,包括 regulator 开、关、电压设置、电压获取等:

  1. 获取 regulator:struct regulator devm_regulator_get_optional(struct device *dev, const charid)dev 为当前设备,id 对应 dts 里的设置的-supply 属性。
  1. 释放 regulatorvoid regulator_put(struct regulator *regulator)
  1. 打开 regulatorint regulator_enable(struct regulator *regulator)
  1. 关闭 regulatorint regulator_disable(struct regulator *regulator)
  1. 获取 regulator 电压

int regulator_get_voltage(struct regulator *regulator)

  1. 设置 regulator 电压int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV)传入的参数时保证 min_uV <= max_uV,由调用者保证。
  1. 范例
struct regulator *vdd_ana;

vdd_ana = devm_regulator_get_optional(dev, "power");
/* 从dts获取power-supply
   power-supply = <&vcc3v3_lcd0_n> */
regulator_enable(vdd_ana);
regulator_disable(vdd_ana);                         // 关闭vdd_ana
regulator_put(vdd_ana);                             // 释放vdd_ana

3. Debug

3.1 内核

因为 PMIC 涉及的驱动在使用逻辑上都不复杂,重点都体现在最后的寄存器设置上。所以目前常用的debug 方式可以通过过如下节点:/sys/kernel/debug/regulator

中文 PDF 原图 — p.15

原图可读内容转录(原厂示例;图像边缘被截断的不可读字符不补猜):

console:/ # ls /sys/kernel/debug/regulator/
avcc_1v8_codec_s0         vcc5v0_sys             vdd_0v75_s3
avcc_1v8_s0               vcc5v0_usb             vdd_0v85_s0
avdd1v8_ddr_pll_s0        vcc5v0_usbdcin         vdd_1v8_pll_s0
avdd_0v75_s0              vcc_1v1_nldo_s3        vdd_2v0_pldo_s3
avdd_0v85_s0              vcc_1v8_cam_s0         vdd_cpu_big0_mem_s0
avdd_1v2_cam_s0           vcc_1v8_s0             vdd_cpu_big0_s0
avdd_1v2_s0               vcc_2v8_cam_s0         vdd_cpu_big1_mem_s0
pcie20_avdd0v85           vcc_3v3_s0             vdd_cpu_big1_s0
pcie20_avdd1v8            vcc_3v3_s3             vdd_cpu_lit_mem_s0
pcie30_avdd0v75           vcc_3v3_sd_s0          vdd_cpu_lit_s0
pcie30_avdd1v8            vcc_mipicsi0           vdd_ddr_pll_s0
pldo6_s3                  vcc_mipicsi1           vdd_ddr_s0
reg-dummy-regulator-dummy vcc_mipidcphy0         vdd_gpu_mem_s0
regulator_summary        vccio_1v8_s3           vdd_gpu_s0
supply_map               vccio_sd_s0            vdd_log_s0
vbus5v0_typec             vdd1_1v8_ddr_s3        vdd_npu_mem_s0
vcc12v_dcin               vdd2_ddr_s3            vdd_npu_s0
vcc3v3_lcd0_n             vdd21_0v9_ddr_s3       vdd_vdenc_mem_s0
vcc3v3_pcie30             vdd_0v75_hdmi_edp_s0   vdd_vdenc_s0
vcc5v0_host               vdd_0v75_pll_s0        vddq_ddr_s0

中文 PDF 原图 — p.15

/sys/kernel/debug/regulator/regulator_summary

中文 PDF 原图 — p.16

原图可读内容转录(原厂示例;图像边缘被截断的不可读字符不补猜):

 regulator                    use open bypass opmode  voltage current min max
 regulator-dummy                5 5 0 unknown 0mV 0mA 0mV 0mV
    fe210000.sata-target         1                 0mA 0mV 0mV
    fe210000.sata-phy            1                 0mA 0mV 0mV
    fe210000.sata-ahci           1                 0mA 0mV 0mV
    backlight-power             1                 0mA 0mV 0mV
    regulator-dummy             0                 0mA 0mV 0mV
 vcc12v_dcin                    3 4 0 unknown 12000mV 0mA 12000mV 12000mV
    vcc12v_dcin                  0                 0mA 0mV 0mV
    vcc5v0_sys                  30 30 0 unknown 5000mV 0mA 5000mV 5000mV
       vcc5v0_sys                0                 0mA 0mV 0mV
       vdd_gpu_s0                1 3 0 normal 750mV 0mA 550mV 950mV
          fb000000.gpu-mali      0                 0mA 750mV 950mV
          fb000000.gpu-mali      0                 0mA 0mV 0mV
          vdd_gpu_s0             0                 0mA 0mV 0mV
       vdd_npu_s0                1 1 0 normal 750mV 0mA 550mV 950mV
          vdd_npu_s0             0                 0mA 0mV 0mV
       vdd_log_s0                1 1 0 normal 750mV 0mA 750mV 750mV
          vdd_log_s0             0                 0mA 0mV 0mV
       vdd_vdenc_s0              1 1 0 normal 750mV 0mA 550mV 950mV
          vdd_vdenc_s0           0                 0mA 0mV 0mV
       vdd_gpu_mem_s0            1 3 0 normal 750mV 0mA 675mV 950mV
          fb000000.gpu-mem       0                 0mA 750mV 950mV
          fb000000.gpu-mem       0                 0mA 0mV 0mV
          vdd_gpu_mem_s0         0                 0mA 0mV 0mV
       vdd_npu_mem_s0            1 1 0 normal 750mV 0mA 675mV 950mV
          vdd_npu_mem_s0         0                 0mA 0mV 0mV
       vdd_2v0_pldo_s3           9 9 0 normal 2000mV 0mA 2000mV 2000mV
          vdd_2v0_pldo_s3        0                 0mA 0mV 0mV
          avcc_1v8_s0            1 3 0 unknown 1800mV 0mA 1800mV 1800mV
             avcc_1v8_s0         0                 0mA 0mV 0mV
             pcie20_avdd1v8      0 1 0 unknown 1800mV 0mA 1800mV 1800mV
                pcie20_avdd1v8   0                 0mA 0mV 0mV
             pcie30_avdd1v8      0 1 0 unknown 1800mV 0mA 1800mV 1800mV
                pcie30_avdd1v8   0                 0mA 0mV 0mV
          vdd1_1v8_ddr_s3        1 1 0 unknown 1800mV 0mA 1800mV 1800mV
             vdd1_1v8_ddr_s3     0                 0mA 0mV 0mV
          avcc_1v8_codec_s0      1 1 0 unknown 1800mV 0mA 1800mV 1800mV
             avcc_1v8_codec_s0   0                 0mA 0mV 0mV
          avdd_1v2_cam_s0        1 1 0 unknown 1200mV 0mA 1200mV 1200mV
             avdd_1v2_cam_s0     0                 0mA 0mV 0mV
          avdd_1v2_s0            1 1 0 unknown 1200mV 0mA 1200mV 1200mV
             avdd_1v2_s0         0                 0mA 0mV 0mV
          vcc_1v8_cam_s0         1 1 0 unknown 1800mV 0mA 1800mV 1800mV
             vcc_1v8_cam_s0      0                 0mA 0mV 0mV
          avdd1v8_ddr_pll_s0     1 1 0 unknown 1800mV 0mA 1800mV 1800mV
             avdd1v8_ddr_pll_s0  0                 0mA 0mV 0mV
          vdd_1v8_pll_s0         1 1 0 unknown 1800mV 0mA 1800mV 1800mV
             vdd_1v8_pll_s0      0                 0mA 0mV 0mV
       vdd_vdenc_mem_s0          1 1 0 normal 750mV 0mA 675mV 950mV
          vdd_vdenc_mem_s0       0                 0mA 0mV 0mV
       vdd2_ddr_s3               1 1 0 normal 1100mV 0mA 0mV 0mV
          vdd2_ddr_s3            0                 0mA 0mV 0mV
       vcc_1v1_nldo_s3           6 6 0 normal 1100mV 0mA 1100mV 1100mV
          vcc_1v1_nldo_s3        0                 0mA 0mV 0mV
       avdd_0v75_s0              1 2 0 unknown 750mV 0mA 750mV 750mV

中文 PDF 原图 — p.16

:每一路电源对应的属性及电压值可通过以下节点查找

中文 PDF 原图 — p.16

原图可读内容转录(原厂示例;图像边缘被截断的不可读字符不补猜):

console:/sys/kernel/debug/regulator/vdd_gpu_mem_s0 # ls
bypass_count  fb000000.gpu-mem  mode        vdd_gpu_mem_s0
consumers     force_disable   open_count  voltage
enable        load            use_count

中文 PDF 原图 — p.16

3.2 Kernel 5.10 内核

请参考5.10内核命令。

校对注:原稿 BUCK 电压表范围写 0.7125–1.45,但档位写 0.5–1.5;NLDO 范围从 0.5 起,档位首项为 0.5125。正文提及三个 PWRCTRL 又称两个;引脚表写 PWRCRTL,SPI CLK 的 I/O 标为 O。以上均保留,不擅自修正;适配前须核实。

源稿 DTS 注意:第 9 页末尾确实写有 num-cs = <&spi2 {,随后重复 SPI 属性;第 12 页还保留原稿全角分号。该示例并非可直接编译的完整 DTS,本文不猜测修复这些原稿问题,需对照对应 BSP 源码核实。第 3.1 节原稿标题仅写“内核”,未指定版本。

浏览此主题 → · 入门路线 →