20250605在荣品的PRO-RK3566开发板的Android13下让PMIC芯片RK809在长按下开机
20250605在荣品的PRO-RK3566开发板的Android13下让PMIC芯片RK809在长按下开机
2025/6/5 11:36
缘起:
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;
}
https://www.rockchip.fr/RK809%20datasheet%20V1.01.pdf
RK809 Datasheet
【付费下载】
https://bbs.16rd.com/thread-566291-1-1.html
[瑞芯微RK资料]?瑞芯微RK809 datasheet数据手册1.4修订版本
如果 RK809的开机模式是写死了。我司需要 等待 2s时间 【以防 误操作/误触发】
可以使用这个上电逻辑不?
先让 RK809检测到500ms 开机指令,如果检测到,先【清除掉 寄存器中的开机指示?】,然后让 RK809等待1.5s == 1500ms,
现在 在 检测 电源键 是否还是按下的。如果是的。走正常的开机逻辑。
如果不是,就判定为 误操作,关机了。
或者您这边有更好的 上电逻辑/建议?
没有这样改过不清楚是否可行 ,如果是完全掉电的情况下rk809的寄存器是会重新初始化的,需要注意完全掉电的情况下 这个长按短按开机的判断不会生效@造诣==灶燚
1、我们地面站的电池是 直接 焊接到板上的。只要电池有电,可以保证 RK3566总是有电的。
2、我的考虑是在UBOOT阶段 使用2000 ms来判断RK809是 真实 需求上电?
还是 误触发。
【如果是误触发,直接在uboot阶段就关机了】
就算RK809掉电 也没有关系吧?
请问RK809的0xF7,里面的 PWRON_LP_TM 可以配置成为长按2秒钟开机吗?
不清楚这个寄存器实际对应的是哪个,你可以用i2cget 与i2cset 工具查看默认值 ,修改对应寄存器值测试
可以尝试在uboot 启动的时候在rk809的驱动 初始化部分添加操作寄存器的部分 通过这两个去获取对应pmic的引脚状态或着这个按键按下的状态看下
https://www.elecfans.com/d/2089149.html
基于IDO-SBC3568主板说明PMIC RK809电量计的调试方法-电子发烧友网
https://www.rockchip.fr/RK809%20datasheet%20V1.01.pdf
RK809 Datasheet
【PDF】
Rockchip RK809 Datasheet
文件格式:PDF/Adobe Acrobat -
翻译此页
7 RK809 Datasheet Rev 1.01 Chapter 1 Introduction 1.1 Overview The RK809 is a complex power-management integrated circuit (PMIC) integrated CODEC for multi-core system applications powered by an external power supply. The RK809 can provide a complete power management solution with very few ...
www.rockchip.fr/RK809 datasheet...
【参考资料:】
BING:RK809 dts press-on-time = <0>;
https://blog.csdn.net/cew333/article/details/126164529
[RK3568 Android11] RK809开机短按时间设置和长按电源键设置
https://www.codeleading.com/article/72216664876/
[RK3568 Android11] RK809开机短按时间设置和长按电源键设置
一、长按电源键 关机
二、短按开机电源键响应时间 开机
https://www.uudwc.com/A/dMX9M/
rk3568 长按电源键关机修改
https://blog.csdn.net/weixin_43245753/article/details/127852443
RK3588长按power键强制关机的按键时间设置
https://blog.csdn.net/u011774634/article/details/132744969?spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-17-132744969-blog-115718749.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-17-132744969-blog-115718749.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=21
https://blog.csdn.net/u011774634/article/details/132744969
RK3588S Android12修改短按电源键的开机按键时长
RK806的power按键开机时长有2种选择,通过如下寄存器进行配置:
默认为20mS,如果要改为500mS,则将0x76寄存器的第7位写0即可。
dts修改方法为在rk806的节点中增加如下属性即可,如下修改:
--- a/kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-rk806-single.dtsi
+++ b/kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-rk806-single.dtsi
@@ -43,6 +43,8 @@
* and simultaneously pull down the RESETB PIN for 5mS before releasing
*/
pmic-reset-func = <1>;
+
+ pwron-on-time-500ms;
vcc1-supply = <&vcc5v0_sys>;
vcc2-supply = <&vcc5v0_sys>;
pwron-on-time-500ms的解析参考kernel-5.10\drivers\mfd\rk806-core.c中如下代码:
/* PWRON_ON_TIME: 0:500mS; 1:20mS */
if (device_property_read_bool(dev, "pwron-on-time-500ms"))
rk806_field_write(rk806, PWRON_ON_TIME, 0x00);
https://blog.csdn.net/tianlai1009/article/details/107173710?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522d5016a5486700307a67c49ef8efaa4be%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=d5016a5486700307a67c49ef8efaa4be&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-8-107173710-null-null.142^v102^pc_search_result_base6&utm_term=RK3566%20uboot%20%E9%95%BF%E6%8C%89%20%E5%BC%80%E6%9C%BA&spm=1018.2226.3001.4187
https://blog.csdn.net/tianlai1009/article/details/107173710
RK809搞一下长按PWR键重启
拿到的源码默认长按关机,短按开机,
不要长按关机,
只要长按重启
那么看一下规格书:
看一下驱动:
没有做这个寄存器的配置?i2cset测试一下:
i2cget -f -y 0 0x20 0xf7
0x86
默认是86,长按关机,
那自己加一下试试:
i2cset -f -y 0 0x20 0xf7 0xc6
测试成功。
自己加一下寄存器初始化:
/* power down configuration 0xf7 */
#define RK817_PWR_KEY_LONG_PRESS_MASK BIT(6)
#define RK817_PWR_KEY_LONG_PRESS_H BIT(6)
#define RK817_PWR_KEY_LONG_PRESS_L (0)
static const struct rk808_reg_data rk817_pre_init_reg[] = {
{RK817_RTC_CTRL_REG, RTC_STOP, RTC_STOP},
{RK817_GPIO_INT_CFG, RK817_INT_POL_MSK, RK817_INT_POL_L},
{RK817_SYS_CFG(1), RK817_HOTDIE_TEMP_MSK | RK817_TSD_TEMP_MSK,
RK817_HOTDIE_105 | RK817_TSD_140},
{RK817_PMIC_PWRON_KEY,RK817_PWR_KEY_LONG_PRESS_MASK,RK817_PWR_KEY_LONG_PRESS_H}
};