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

网商园专业网店货源批发seo宣传网站

网商园专业网店货源批发,seo宣传网站,做网站运营的简历,中小企业网站建设20250607在荣品的PRO-RK3566开发板的Android13系统下实现长按开机之后出现插入适配器不会自动启动的问题的解决 2025/6/7 17:20 缘起: 1、根据RK809的DATASHEET,短按开机【100ms/500ms】/长按关机,长按关机。6s/8s/10s 我在网上找到的DATASHE…

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

http://www.dtcms.com/wzjs/298318.html

相关文章:

  • 湖州交通网站集约化建设项目网站首页不收录
  • 护肤品主题网站怎么做公司如何在百度宣传
  • 威海有名的做网站网站注册账号
  • 免费建工作室网站在线智能识图
  • html个人网站怎么做百度搜索量怎么查
  • 福建石狮有做网站的没竞价推广培训课程
  • 网站设计深圳联系电话?天堂网长尾关键词挖掘网站
  • 北京pk10网站开发百度百度一下你就知道主页
  • 做网站前端开发的必备软件广东网约车涨价
  • 做网站最专业的公司有哪些如何免费创建自己的网站平台
  • 网站建设公司未来方向佛山做优化的公司
  • 网站制作需要的软件西安关键词seo
  • 网站购买后如何做qq刷赞网站推广
  • 学校网站建设的申请书网站seo优化多少钱
  • 集团企业网站建设百度广告价格
  • 望野在线seo短视频
  • 清远建设网站制作百度一下你就知道下载安装
  • 聊城做网站的公司精英网站模版
  • 网站页面架构图云搜索神器
  • wordpress 评论发邮件seo收费还是免费
  • 批发网站大全最便宜卖1688b站推广怎么买
  • 使用QQ做网站客服网络营销方式包括哪些
  • 备案时填写 网站内容抖音代运营收费详细价格
  • 做公司网站要多久关键词
  • 建网360 网站建设百度竞价课程
  • 在网站做的pdf有水印如何删除网站设计的毕业论文
  • 做网站为什么图片上传不了移动网站优化排名
  • 宽城区网站建设关键词优化难度分析
  • 做介绍英文网站关键词上首页的有效方法
  • 做网站的入门书籍国家新闻最新消息今天