RK3566 IO 电源域配置指南

作者分享了自己初学Android开发的经历,特别是在使用RK3566开发板时遇到的IO电源域配置问题。文章详细介绍了PMUIO和VCCIO电源域的规则,强调了软件配置需与硬件电压匹配的重要性,以防IO损坏或功能异常。此外,还提及了如何确定和修改.dts文件以适应工程需求。

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

2023/3/28 刚入坑Android开发,使用的是RK3566开发板作为学习
现在正在学习,同时记录学习过程中的点点滴滴,如有不对,欢迎指出。

本人刚入门小白,不一定能帮大家解决问题,但是可以相互探讨学习,知无不言


1.资料

RK3566/RK3568共有10个独立的IO电源域,分别为PMUIO[0:2]VCCIO[1:7]。其中:
PMUIO0、 PMUIO1为固定电平电源域,不可配置;
PMUIO2VCCIO1,VCCIO[3:7]电源域均要求硬件供电电压与软件的配置相匹配:

  1. 当硬件IO电平接1.8V,软件电压配置也要相应配成1.8V;
  2. 当硬件IO电平接3.3V,软件电压配置也要相应配成3.3V;
    • VCCIO2电源域软件不需要配置,但是其硬件供电电压与FLASH_VOL_SEL状态需保持一致:
  3. 当VCCIO2供电是1.8V,则FLASH_VOL_SEL管脚必须保持为高电平;
  4. 当VCCIO2供电是3.3V,则FLASH_VOL_SEL管脚必须保持为低电平;
    否则:
    • 当软件配置为1.8V,硬件供电3.3V,会使得IO处于过压状态,长期工作IO会损坏;
    • 当软件配置为3.3V,硬件供电1.8V,IO功能会异常;

2.对工程进行全编,确保编译环境没问题

3.下图是我从原理图中找到对应的电压域

在这里插入图片描述

4.修改电压域源文件

<SDK>/kernel/arch/arm64/boot/dts/rockchip 目录下
可以看到有很多.dts.dtsi文件
.dts == c语言的.c文件
.dtsi== c语言的.h文件( i 表示 include 的意思 )

这么多.dts文件,我都不知道工程调用的是哪一个?—这是我的第一个疑问?
答:在 rockchip 目录下找.dtb文件(.dtb 是生成的二进制文件)

在我这里生成的是dr4-rk3566.dtb,则说明调用的是dr4-rk3566.dtsdr4-rk3566.dtsi

在网上很多教程修改电压域都是在.dtsi里
但是我的却是在dr4-rk3566.dts中修改

&pmu_io_domains {
        status = "okay";
        pmuio2-supply = <&vcc3v3_pmu>;
        vccio1-supply = <&vccio_acodec>;
        vccio3-supply = <&vccio_sd>;
        vccio4-supply = <&vcc_1v8>;
        vccio5-supply = <&vcc_3v3>;
        vccio6-supply = <&vcc_1v8>;
        vccio7-supply = <&vcc_3v3>;
};
### 在 RK3566 的 U-Boot 中配置 GPIO 复用设置 为了在 RK3566 芯片的 U-Boot 环境中配置 GPIO 复用,需要遵循特定的过程来确保 IOMUX 控制器正确选择 GPIO 模式并完成必要的寄存器配置。以下是具体方法: #### 修改 `board.c` 文件中的初始化函数 对于 RK3566 来说,可以在 u-boot 源码文件 `arch/arm/mach-rockchip/board.c` 中修改或添加相应的代码片段以实现 GPIO 配置。 ```c __weak int rk_board_init(void) { // 请求指定编号的 GPIO 引脚 (例如: 使用 pin = bank * 32 + number 计算得到的具体引脚号) gpio_request(125, "test_gpio"); // 假设 125 是目标引脚 // 设置该引脚方向为输出模式 gpio_direction_output(125, 1); return 0; } ``` 这段代码展示了如何请求一个具体的 GPIO 引脚,并将其设定为输出模式[^2]。需要注意的是,这里的 `125` 应替换为你想要操作的实际引脚号码,依据公式 `pin = bank * 32 + number` 进行计算得出。 #### 设备树(Device Tree)调整 除了直接编程控制外,还需要确认设备树(DTS/DTB)里有关于这些 GPIO 和其对应的 pinctrl 描述是否正确无误。如果发现任何异常,则应该检查 DTS 文件内的定义以及编译后的 DTB 是否包含了预期的内容[^4]。 可以通过如下命令序列验证当前使用的设备树状态: ```bash printenv fdtcontroladdr fdt ${fdtcontroladdr} list ``` 这有助于排查是否存在由于设备树描述错误而导致的问题。 #### 示例:配置 GPIOA5 作为输出高电平 假设要将 GPIOA5 设置成输出高电平的状态,那么可以根据上述原则编写类似的语句: ```c gpio_direction_output((GPIO_BANK0 | GPIO_A5), 1); ``` 这里 `(GPIO_BANK0 | GPIO_A5)` 表达式的含义是指定第 0 组 GPIO 下面的 A5 引脚[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值