RK3399 Android 7.1 uboot阶段配置电源域

本文讲述了如何解决rk808芯片中GPIO4_D3的电源域配置问题,通过分析原理图、内核绑定文档和主控芯片TRM手册,确定了配置寄存器GRF_IO_VSEL的方法,并在rk808驱动源码中实现具体操作,最终验证了GPIO的正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、整体思路

        dts已经配置好了电源域,软件和硬件上的电源配置已确认一致,GPIO在uboot阶段无法正常拉高拉低,所用的pmic是rk808,经排查是rk808的驱动没有配置电源域。

        结合查看原理图和TRM手册,查看对应的寄存器,直接在rk808的驱动源码中使用io接口写入寄存器进行配置即可。

二、步骤

就已GPIO4_D3为例,配置GPIO4的电源域。

1.1 打开原理图,搜GPIO4_D3

可以看到,GPIO4的电源由APIO4提供,而且硬件上配置为3V

1.2 打开内核的绑定文档,查看软件上APIO4这路电源是如何配置

        RK电源域的配置文档路径在:kernel/Documentation/devicetree/bindings/power/rockchip-io-domain.txt

        打开文档,可以看到:

        于是可以在对应的dts中搜“io_domain”,可以看到:

&io_domains {
 status = "okay";

 bt656-supply = <&vcc_3v0>;
 audio-supply = <&vcca1v8_codec>;
 sdmmc-supply = <&vccio_sd>;
 gpio1830-supply = <&vcc_3v0>;
 wifi-supply = <&vcc_1v8>;
};

        可见软件上的电源配置为3V,跟硬件上是一样,没有问题。

1.3 打开主控芯片的TRM手册,查看io-domains的关键寄存器

        搜 “vsel” ,可以看到:

        从该图,可以获取很多有用的信息:

        1、寄存器名称为 GRF_IO_VSEL,基地址名称为GRF

        2、该寄存器相对基地址的偏移量为 0x0e640

        3、GPIO4的所有pin的电压由寄存器的第3bit控制:设为0电压为3.0V,设为1电压为1.8V

        4、根据16~31bit的Description,要想让第3bit的值写入有效,则第19bit必须是1

1.4 查GRF的地址,得到寄存器GRF_IO_VSEL的完整地址

        在主控芯片的TRM手册中搜GRF,如下图:

        

        GRF的地址为0xff770000

        所有寄存器GRF_IO_VSEL的完整地址是 0xff770000 +  0x0e640 = 0xff77e640

1.5 在rk808驱动源码中,使用io函数写入寄存器

        我的源码路径: uboot/drivers/power/pmic/pmic_rk808.c

        根据上述,我们要往寄存器GRF_IO_VSEL的第3bit写入0(因为原理图上硬件的电压配置为3.0V),第19bit要写入1(使能第3bit写入有效)。

        结论就是写入的二进制数为:1000 0000 0000 0000 0000 ,转为HEX为0x80000

        代码如下:

static int rk808_parse_dt(const void* blob)
{
    //此处省略

    node_io = fdt_node_offset_by_compatible(blob, -1, "rockchip,rk3399-io-voltage-domain");
    if (node_io < 0) {  
       return -ENODEV;
       } else {             
                  writel(0x8000,0xff77e640);
               }
       }


        return 0;
}

1.6 编译烧录验证,对应的gpio能够正常拉起

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值