当前位置: 首页 > news >正文

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}
                       
};

相关文章:

  • 设置存储器若干单元为相同的字节
  • CMake指令:add_definitions
  • CentOS 7 如何pip3安装pyaudio?
  • Windows下安装MySQL8.X
  • 【JVM】三色标记法原理
  • GPU加速与非加速的深度学习张量计算对比Demo,使用PyTorch展示关键差异
  • Python[数据结构及算法 --- 栈]
  • tcp/udp
  • 6月5日day45
  • Python实现markdown文件转word
  • 六、数据库的安全性
  • 书籍将正方形矩阵顺时针转动90°(8)0605
  • RADIUS-如何获取凭证
  • [蓝桥杯]植树
  • LLaMA.cpp 文本生成惩罚机制详解:从原理到实践的完整指南
  • Spring Bean生命周期全解析:从创建到销毁的底层细节
  • Docker MCP 目录和工具包简介:使用 MCP 为 AI 代理提供支持的简单安全方法
  • Flask+LayUI开发手记(八):通用封面缩略图上传实现
  • 复变函数中的对数函数及其MATLAB演示
  • 深入理解React Hooks的原理与实践
  • 网站建设流程教程/网络推广项目外包公司
  • 营销网站主题有哪些/网站联盟营销
  • wordpress打不开/电脑上突然出现windows优化大师
  • 设计制作生态瓶教学反思/广州seo网站
  • 北京建设网站方舟爸爸/百度下载官方下载安装
  • 游戏介绍网站模板下载/百度搜图入口