20250607在荣品的PRO-RK3566开发板的Android13系统下实现长按开机之后出现插入适配器不会自动启动的问题的解决

20250607在荣品的PRO-RK3566开发板的Android13系统下实现长按开机之后出现插入适配器不会自动启动的问题的解决

2025/6/7 17:20

缘起:

1、根据RK809的DATASHEET,短按开机【100ms/500ms】/长按关机,长按关机。6s/8s/10s

我在网上找到的DATASHEET是V1.0的,据说有V1.4的或者更新的?

如果有,方便的话,发一下。

2、我们希望长按2s开机。

如果 RK809的开机模式是写死了。我司需要 等待 2s时间 【以防 误操作/误触发】

可以使用这个上电逻辑不?

先让 RK809检测到500ms 开机指令,如果检测到,先【清除掉 寄存器中的开机指示?】,然后让 RK809等待1.5s == 1500ms,

现在 在 检测 电源键 是否还是按下的。如果是的。走正常的开机逻辑。

如果不是,就判定为 误操作,关机了。

或者您这边有更好的 上电逻辑/建议?

【已知的/已经测试出来的BUG:】

这个PATCH可以实现 按键2s 开机。

但是有一个问题。

现在 插电/适配器之后,RK3566不会自动开机。

追问一下。是否可以解决这个问题?

uboot_longpress_power_on.patch

diff --git a/drivers/power/pmic/rk8xx.c b/drivers/power/pmic/rk8xx.c

old mode 100644

new mode 100755

index e361015337..e44c38448a

--- a/drivers/power/pmic/rk8xx.c

+++ b/drivers/power/pmic/rk8xx.c

@@ -6,6 +6,7 @@

*/

#include <common.h>

+#include <boot_rkimg.h>

#include <dm.h>

#include <errno.h>

#include <irq-generic.h>

@@ -486,6 +487,8 @@ static int rk8xx_probe(struct udevice *dev)

uint8_t power_en0, power_en1, power_en2, power_en3;

uint8_t on, off;

uint8_t value;

  • int mode;

/* read Chip variant */

if (device_is_compatible(dev, "rockchip,rk817") ||

@@ -618,6 +621,31 @@ static int rk8xx_probe(struct udevice *dev)

printf("IRQ chip initial failed\n");

return ret;

}

  • /* 10*100ms */

  • mode = rockchip_get_boot_mode();

  • printf("xxxx: mode: %d\n", mode);

  • value=pmic_reg_read(dev, 0xf0)&0x80;

  • printf("value=0x%x\n",value );

  • if((pmic_reg_read(dev, 0xf0)&0x80) && mode == BOOT_MODE_UNDEFINE )

  • {

  • printf("xxxx: power off\n");

  • rk8xx_shutdown(dev);

  • }

  • if ((pmic_reg_read(dev, 0xf0) & 0x80)==0 &&

  • mode == BOOT_MODE_UNDEFINE) {

  • i = 0;

  • while (i < 10) {

  • value = pmic_reg_read(dev, 0xf0) & 0x80;

  • printf("value=0x%x\n",value );

  • if ((value & 0x80)) {

  • printf("xxxx: power off\n");

  • rk8xx_shutdown(dev);

  • }

  • mdelay(100);

  • i++;

  • }

  • printf("xxxx: power on\n");

  • }

return 0;

}

Z:\Android13.0\u-boot\drivers\power\pmic\rk8xx.c

ret = rk8xx_irq_chip_init(dev);

if (ret) {

printf("IRQ chip initial failed\n");

return ret;

}

/* 10*100ms */

mode = rockchip_get_boot_mode();

printf("xxxx: mode: %d\n", mode);

for j = 0;

//for(j=0; j<256; j++)

//{

// //printf("0x%02x, ", pmic_reg_read(dev, j) );

// printf("0x%02x = 0x%02x\n", j, pmic_reg_read(dev, j) );

//}

//if( 0x82 == pmic_reg_read(dev, 0xf0) )

if( 0x40 == pmic_reg_read(dev, 0xf5) )

//if( 0 )

{

printf("**** Success 2025/6/5 20:12 %s %s %d have +12V !\n", FILE, FUNCTION, LINE);

}

else

{

value=pmic_reg_read(dev, 0xf0)&0x80;

printf("value=0x%x\n",value );

if((pmic_reg_read(dev, 0xf0)&0x80) && mode == BOOT_MODE_UNDEFINE )

{

printf("xxxx: power off\n");

rk8xx_shutdown(dev);

}

if ((pmic_reg_read(dev, 0xf0) & 0x80)==0 &&

mode == BOOT_MODE_UNDEFINE) {

i = 0;

//while (i < 30) {

//while (i < 5) {

while (i < 2) {

value = pmic_reg_read(dev, 0xf0) & 0x80;

printf("value=0x%x\n",value );

if ((value & 0x80)) {

printf("xxxx: power off\n");

rk8xx_shutdown(dev);

}

mdelay(10);

printf("**** wyb 2025/6/4 17:43 %s %s %d i=%d s! loop 2 ---- mdelay 10ms\n", FILE, FUNCTION, LINE, i);

//mdelay(1000);

i++;

}

printf("xxxx: power on\n");

}

}

return 0;

}

U-Boot 2017.09 (Jun 07 2025 - 17:34:50 +0800)

Model: Rockchip RK3568 Evaluation Board

MPIDR: 0x81000000

PreSerial: 2, raw, 0xfe660000

DRAM: 4 GiB

Sysmem: init

Relocation Offset: ed218000

Relocation fdt: eb9f8aa8 - eb9fecd0

CR: M/C/I

Using default environment

optee api revision: 2.0

dwmmc@fe2b0000: 1, dwmmc@fe2c0000: 2, sdhci@fe310000: 0

Bootdev(atags): mmc 0

MMC0: HS200, 200Mhz

PartType: EFI

DM: v1

Android 13.0, Build 2023.8, v2

boot mode: None

RESC: 'boot', blk@0x0001da6c

Device is: UNLOCKED

DTB: rk-kernel.dtb

HASH(c): OK

ANDROID: fdt overlay OK

**** wyb 2025/5/30 17:47 drivers/power/pmic/rk8xx.c rk8xx_bind 334

I2c0 speed: 100000Hz

**** wyb 2025/5/30 17:47 drivers/power/pmic/rk8xx.c rk8xx_ofdata_to_platdata 389

**** wyb 2025/5/30 17:47 drivers/power/pmic/rk8xx.c rk8xx_probe 521

PMIC: RK8090 (on=0x40, off=0x80)

**** wyb 2025/5/30 17:47 drivers/power/pmic/rk8xx.c rk8xx_irq_chip_init 447

xxxx: mode: 11

value=0x80
xxxx: power off
**** wyb 2025/5/30 17:47 drivers/power/pmic/rk8xx.c rk8xx_shutdown 293

逻辑是对的,对了一下原理图,vdc应该只有dc上电时才有一瞬间的电压导通启动,应该通过其他电路放电

查看手册,可以通过PMIC_ON_SOURCE 寄存器来获取启动方式

可以获取0xf5第 6 位的值来判定目前是什么方式启动,如果是1 就是dc触发开机,就不跑power判定逻辑

ret = rk8xx_irq_chip_init(dev);

if (ret) {

printf("IRQ chip initial failed\n");

return ret;

}

/* 10*100ms */

mode = rockchip_get_boot_mode();

printf("xxxx: mode: %d\n", mode);

for j = 0;

//for(j=0; j<256; j++)

//{

// //printf("0x%02x, ", pmic_reg_read(dev, j) );

// printf("0x%02x = 0x%02x\n", j, pmic_reg_read(dev, j) );

//}

//if( 0x82 == pmic_reg_read(dev, 0xf0) )
if( 0x40 == pmic_reg_read(dev, 0xf5) )
//if( 0 )
{
printf("**** Success 2025/6/5 20:12 %s %s %d have +12V !\n", FILE, FUNCTION, LINE);
}
else

{

value=pmic_reg_read(dev, 0xf0)&0x80;

printf("value=0x%x\n",value );

if((pmic_reg_read(dev, 0xf0)&0x80) && mode == BOOT_MODE_UNDEFINE )

{

printf("xxxx: power off\n");

rk8xx_shutdown(dev);

}

if ((pmic_reg_read(dev, 0xf0) & 0x80)==0 &&

mode == BOOT_MODE_UNDEFINE) {

i = 0;

//while (i < 30) {

//while (i < 5) {

while (i < 2) {

value = pmic_reg_read(dev, 0xf0) & 0x80;

printf("value=0x%x\n",value );

if ((value & 0x80)) {

printf("xxxx: power off\n");

rk8xx_shutdown(dev);

}

mdelay(10);

printf("**** wyb 2025/6/4 17:43 %s %s %d i=%d s! loop 2 ---- mdelay 10ms\n", FILE, FUNCTION, LINE, i);

//mdelay(1000);

i++;

}

printf("xxxx: power on\n");

}

}

return 0;

}

相关推荐
南棱笑笑生5 天前
20250603在荣品的PRO-RK3566开发板的Android13下的命令行查看RK3566的温度
杂质
南棱笑笑生6 天前
20250602在荣品的PRO-RK3566开发板的Android13下的uboot启动阶段配置BOOTDELAY为10s
杂质
南棱笑笑生7 天前
20250602在Ubuntu20.04.6下修改压缩包的日期和时间
杂质
南棱笑笑生13 天前
20250526给荣品PRO-RK3566的Android13单独编译boot.img
杂质
南棱笑笑生19 天前
20250520在全志H3平台的Nano Pi NEO CORE开发板上运行Ubuntu Core16.04.3时跑通4G模块EC20
杂质
南棱笑笑生24 天前
20250515配置联想笔记本电脑IdeaPad总是使用独立显卡的步骤
杂质
南棱笑笑生25 天前
20250513给NanoPi NEO core开发板的Ubuntu core20.04系统重新编译内核boot.img【正式版本】
杂质
南棱笑笑生1 个月前
20250508在WIN10下使用移远的4G模块EC200A-CN直接上网
杂质
南棱笑笑生1 个月前
20250430在ubuntu14.04.6系统上完成编译NanoPi NEO开发板的FriendlyCore系统【严重不推荐,属于没苦硬吃】
杂质