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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/908686.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/908686.shtml
英文地址,請注明出處:http://en.pswp.cn/news/908686.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AIGC 基礎篇 Python基礎 02

1.bool類型 書接上回&#xff0c;我們上次最后講了三大數據類型&#xff0c;除了這三個之外&#xff0c;Python也有bool類型&#xff0c;也就是True和False。 a 2 print(a1) print(a2) 像這里&#xff0c;輸出的內容第一個是False&#xff0c;因為a的值為2&#xff0c;而第…

華為大規模——重塑生產力

華為大模型通過以下幾個方面重塑生產力&#xff1a; 提供強大算力支持 華為致力于構建領先的昇騰人工智能算力平臺&#xff0c;推出高性能昇騰AI集群&#xff0c;支持月級長期穩定訓練&#xff0c;可靠性業界領先。同時打造開放的昇騰計算平臺&#xff0c;兼容主流算子、框…

iOS上傳應用包錯誤問題 “Invalid bundle. The “UIInterfaceOrientationPortrait”“

引言 在開發 iOS 應用的整個生命周期中&#xff0c;打包上傳到 App Store 是一個至關重要的步驟。每一次提交&#xff0c;Xcode 都會在后臺執行一系列嚴格的校驗流程&#xff0c;包括對 Info.plist 配置的檢查、架構兼容性的驗證、資源完整性的審查等。如果某些關鍵項配置不當…

【計算機組成原理】緩沖技術SPOOLing技術

緩沖技術 單緩沖區&#xff1a;初始&#xff1a;工作區滿&#xff0c;緩沖區空 每塊用時max(處理時間, 輸入時間) 傳送時間雙緩沖區&#xff1a;先裝1&#xff0c;1滿才裝2。初始&#xff1a;工作區空&#xff0c;1空&#xff0c;2滿 每塊用時max(處理時間, 傳送時間) 輸入時…

給網站添加live2d看板娘

給網站添加live2d看板娘 參考文獻&#xff1a; stevenjoezhang/live2d-widget: 把萌萌噠的看板娘抱回家 (ノ≧?≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 網站環境如下&#xff0c;文章也主…

web端rtmp推拉流測試、抽幀識別計數,一鍵式生成巡檢報告

本文旨在實現無人機城市交通智慧巡檢中的一個模塊——無人機視頻實時推拉流以及識別流并在前端展示&#xff0c;同時&#xff0c;統計目標數量以及違停數量&#xff0c;生成結果評估&#xff0c;一并發送到前端展示。對于本文任何技術上的空缺&#xff0c;可在博主主頁前面博客…

基于自適應虛擬諧波阬的光儲VSG并網電流諧波抑制模型

“電氣仔推送”獲得資料&#xff08;專享優惠&#xff09; 模型簡介 此模型完全復現于《基于自適應虛擬阻抗的光儲并網系統諧波抑制策略》-程靜 此并網系統模型的核心控制為虛擬同步發電機&#xff08;VSG&#xff09;控制&#xff0c;采用基于混合廣義積分器的諧波信號提取…

【RockeMQ】第2節|RocketMQ快速實戰以及核?概念詳解(二)

升級Dledger高可用集群 一、主從架構的不足與Dledger的定位 主從架構缺陷 數據備份依賴Slave節點&#xff0c;但無自動故障轉移能力&#xff0c;Master宕機后需人工切換&#xff0c;期間消息可能無法讀取。Slave僅存儲數據&#xff0c;無法主動升級為Master響應請求&#xff…

【會員專享數據】2017-2024年我國分省的10米精度土地覆蓋數據

土地覆蓋數據是我們在各項研究中都非常常用的數據&#xff0c;之前我們分享過2017-2024年全球范圍的10米精度土地覆蓋數據&#xff08;均可查看之前的文章獲悉詳情&#xff09;&#xff01;該數據提供瓦片形式&#xff0c;也就是全球的數據沒有拼成一張圖&#xff0c;很多小伙伴…

通過css實現正方體效果

效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* css實…

Java并發編程-理論基礎

Java并發編程-理論基礎 1、什么是進程&#xff1f; 進程&#xff08;Process&#xff09;是計算機中的程序關于某數據集合上的一次運行活動&#xff0c;是系統進行資源分配的基本單位&#xff0c;是操作系統結構的基礎。在早期面向進程設計的計算機結構中&#xff0c;進程是程…

Tornado WebSocket實時聊天實例

在 Python 3 Tornado 中使用 WebSocket 非常直接。你需要創建一個繼承自 tornado.websocket.WebSocketHandler 的類&#xff0c;并實現它的幾個關鍵方法。 下面是一個簡單的示例&#xff0c;演示了如何創建一個 WebSocket 服務器&#xff0c;該服務器會接收客戶端發送的消息&a…

模塊化架構下的前端調試體系建設:WebDebugX 與多工具協同的工程實踐

隨著前端工程化的發展&#xff0c;越來越多的項目采用模塊化架構&#xff1a;單頁面應用&#xff08;SPA&#xff09;、微前端、組件化框架等。這類架構帶來了良好的可維護性和復用性&#xff0c;但也帶來了新的調試挑戰。 本文結合我們在多個模塊化項目中的真實經驗&#xff…

高考:如何合理選擇學科、專業以及職業

如何合理選擇學科、專業以及職業 一、自我認知&#xff1a;明確自身興趣與優勢&#xff08;一&#xff09;興趣探索&#xff08;二&#xff09;能力評估&#xff08;三&#xff09;價值觀與目標 二、外部調研&#xff1a;深入了解學科、專業與職業&#xff08;一&#xff09;學…

【新品解讀】一板多能,AXRF49 定義新一代 RFSoC FPGA 開發平臺

“硬件系統龐雜、調試周期長” “高頻模擬前端不穩定&#xff0c;影響采樣精度” “接收和發射鏈路難以同步&#xff0c;難以擴展更多通道” “數據流量大&#xff0c;處理與存儲跟不上” 這些是大部分客戶在構建多通道、高頻寬的射頻采樣鏈路時&#xff0c;面臨的主要問題。…

實現仿中國婚博會微信小程序

主要功能&#xff1a; 1、完成底部標簽導航設計、首頁海報輪播效果設計和宮格導航設計&#xff0c;如圖1所示 2、在首頁里&#xff0c;單擊全部分類宮格導航的時候&#xff0c;會進入到全部分類導航界面&#xff0c;把婚博會相關內容的導航集成到一個界面里&#xff0c;如圖2…

MySQL強化關鍵_020_SQL 優化

目 錄 一、order by 優化 1.未添加索引 2.添加索引 3.復合索引默認升序排列 4.復合索引降序排列 5.復合索引升序降序排列并用 6.總結 二、group by 優化 1.未添加索引 2.添加索引 3.添加復合索引 三、limit 優化 四、主鍵優化 1.主鍵設計原則 五、insert 優化…

湖北理元理律師事務所視角:企業債務優化的三維平衡之道

核心提示&#xff1a;債務優化的本質不是消滅債務&#xff0c;而是在法律框架內重建財務可持續性。 一、企業債務危機的典型誤區 某制造企業主曾向我坦言&#xff1a;“用新貸還舊貸3年&#xff0c;債務從200萬滾到500萬。”這類案例暴露出企業債務處置的共性痛點&#xff1a…

【Ragflow】27.RagflowPlus(v0.4.1):小版本迭代,問題修復與功能優化

概述 RagflowPlus v0.4.0 在發布后&#xff0c;收到了積極的反饋&#xff0c;同時也包含一些問題。 本次進行一輪小版本更新&#xff0c;發布 v0.4.1 版本&#xff0c;對已知問題進行修復&#xff0c;并對部分功能進行進一步優化。 開源地址&#xff1a;https://github.com/…

【hadoop】Flink安裝部署

一、單機模式 步驟&#xff1a; 1、使用XFTP將Flink安裝包flink-1.13.5-bin-scala_2.11.tgz發送到master機器的主目錄。 2、解壓安裝包&#xff1a; tar -zxvf ~/flink-1.13.5-bin-scala_2.11.tgz 3、修改文件夾的名字&#xff0c;將其改為flume&#xff0c;或者創建軟連接…