当前位置: 首页 > 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}
                       
};

http://www.xdnf.cn/news/879859.html

相关文章:

  • pikachu靶场通关笔记16 CSRF关卡02-CSRF(POST)
  • Spring Boot 使用 SLF4J 实现控制台输出与分类日志文件管理
  • Linux系统编程-DAY10(TCP操作)
  • elementUI点击浏览table所选行数据查看文档
  • linux 故障处置通用流程-36计-14-27
  • JVM 核心概念深度解析
  • CB/T 3361-2019 甲板敷料检测
  • 中小企业IT运维痛点与OMS主动运维体系解析
  • 装一台水冷主机
  • uniappx插件nutpi-idcard 开发与使用指南(适配鸿蒙)
  • Linux C学习路线全概及知识点笔记2(仅供个人参考)
  • uniapp实现的简约美观的星级评分组件
  • uniapp图片文档预览
  • PHP 8.5 即将发布:管道操作符、强力调试
  • springboot mysql/mariadb迁移成oceanbase
  • 基于Java(SpringBoot、Mybatis、SpringMvc)+MySQL实现(Web)小二结账系统
  • 【图片识别改名】如何批量将图片按图片上文字重命名?自动批量识别图片文字并命名,基于图片文字内容改名,WPF和京东ocr识别的解决方案
  • 【SSM】SpringMVC学习笔记7:前后端数据传输协议和异常处理
  • 阿里云事件总线 EventBridge 正式商业化,构建智能化时代的企业级云上事件枢纽
  • 【Spark征服之路-2.2-安装部署Spark(二)】
  • 力扣LeetBook数组和字符串--二维数组
  • 【无标题】路径着色问题的革命性重构:拓扑色动力学模型下的超越与升华
  • 网络测试实战:金融数据传输的生死时速
  • C++学习-入门到精通【14】标准库算法
  • C++11实现TCP网络通讯服务端处理逻辑简化版
  • ARM处理器工作模式
  • MCP通信方式之Streamable HTTP
  • ZooKeeper 安装教程(Windows + Linux 双平台)
  • Redis 安装配置和性能优化
  • 【bug】Error: /undefinedfilename in (/tmp/ocrmypdf.io.9xfn1e3b/origin.pdf)