20250709榮品RD-RK3588開發板的Android13系統下修改為連續長按10s開機

20250709榮品RD-RK3588開發板的Android13系統下修改為連續長按10s開機
2025/7/9 10:11


緣起:由于榮品RD-RK3588開發板使用的PMIC是RK806。
以前在榮品PRO-RK3566開發板上使用的PMIC是RK809上做過了長按開機的。
直接遷移過來了!


1、根據RK809的DATASHEET,短按開機【100ms/500ms】/長按關機,長按關機。6s/8s/10s
我在網上找到的DATASHEET是V1.0的,據說有V1.4的或者更新的?
如果有,方便的話,發一下。

2、我們希望長按2s開機。
如果 RK809的開機模式是寫死了。我司需要 等待 2s時間 【以防 誤操作/誤觸發】

可以使用這個上電邏輯不?

先讓 RK809檢測到500ms 開機指令,如果檢測到,先【清除掉 寄存器中的開機指示?】,然后讓 RK809等待1.5s == 1500ms,
現在 在 檢測 電源鍵 是否還是按下的。如果是的。走正常的開機邏輯。
如果不是,就判定為 誤操作,關機了。

或者您這邊有更好的 上電邏輯/建議?

【榮品RD-RK3588開發板使用RK806這顆PMIC,看驅動名稱使用了PMIC接口】
Z:\14TB\versions\RD-RK3588_Android13\u-boot\drivers\power\pmic\rk8xx_spi.c
【榮品PRO-RK3566開發板使用RK809這顆PMIC】
Z:\14TB\versions\pro3566_Android13.0\u-boot\drivers\power\pmic\rk8xx.c

Z:\14TB\versions\RD-RK3588_Android13\u-boot\drivers\power\pmic\rk8xx_spi.c

本次修改存在的問題:
1、uboot啟動到pmic的probe大概1-2s。
之后需要檢測POWERKEY按鍵是否連續按10s。
本程序簡單的處理為10s的最后階段檢測一次。
實際上,需要在循環的每一次/一秒的延遲/間隔期間都需要檢測,沒有按POWER按鍵就直接走關機流程了!

2、本次關機流程,直接COPY了關機的代碼。
實際上調用關機函數更好!


static int rk8xx_spi_probe(struct udevice *dev)
{
struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
struct rk8xx_priv *priv = dev_get_priv(dev);
struct udevice *spi = dev_get_parent(dev);
struct spi_slave *slave = NULL;
u8 on_source, off_source;
u8 msb, lsb, value = 0;
int ret;

printf("**** wyb 2025/6/26 16:58 %s %s %d\n", __FILE__, __FUNCTION__, __LINE__);

?? ?if (spi->seq < 0) {
dev_err(dev, "Failed to configure the spi num\n");
return -EINVAL;
}

?? ?slave = spi_setup_slave(spi->seq, plat->cs, plat->max_hz,
plat->mode);
if (!slave)
return -ENODEV;
priv->slave = slave;

?? ?/* read Chip variant */
ret = rk806_spi_read(dev, RK806_CHIP_NAME, &msb, 1);
if (ret) {
dev_err(dev, "rk806 name read error: %d\n", ret);
return ret;
}

?? ?ret = rk806_spi_read(dev, RK806_CHIP_VER, &lsb, 1);
if (ret) {
dev_err(dev, "rk806 version read error: %d\n", ret);
return ret;
}

?? ?priv->variant = ((msb << 8) | lsb) & RK8XX_ID_MSK;
printf("spi%d: RK%x%x: %d\n", spi->seq, msb, (lsb >> 4), lsb & 0x0f);

?? ?rk806_spi_read(dev, RK806_ON_SOURCE, &on_source, 1);
rk806_spi_read(dev, RK806_OFF_SOURCE, &off_source, 1);
printf("ON=0x%02x, OFF=0x%02x\n", on_source, off_source);

?? ?ret = rk806_spi_read(dev, RK806_HW_VER, &value, 1);
if (ret)
panic("RK806: read RK806_HW_VER error!\n");
/* dual rk806 dev name: "rk806master@0", "rk806slave@1"
* single rk806 dev name: " rk806single@0"
*/
if ((!strcmp(dev->name, "rk806master@0")) || (!strcmp(dev->name, "rk806slave@1"))) {
if (value != HW_DUAL_PMIC) {
dev_err(dev, "HW single pmic, the firmware dual pmic(0x%x)!\n", value);
run_command("download", 0);
}
} else {
if (value != HW_SINGLE_PMIC) {
dev_err(dev, "HW dual pmic, the firmware single pmic(0x%x)!\n", value);
run_command("download", 0);
}
}

?? ?if ((lsb & 0x0f) == VERSION_AB) {
ret = rk806_spi_read(dev, RK806_SYS_CFG1, &value, 1);
if (ret) {
dev_err(dev, "rk806 RK806_SYS_CFG1 read error: %d\n", ret);
return ret;
}
value |= 0x80;
rk806_spi_write(dev, RK806_SYS_CFG1, &value, 1);
}

?? ?if (priv->rst_fun) {
rk806_spi_read(dev, RK806_SYS_CFG3, &value, 1);
value &= 0x3f;
if (priv->rst_fun == RK806_RST_MODE1) {
value |= (RK806_RST_MODE1 << 6);
rk806_spi_write(dev, RK806_SYS_CFG3, &value, 1);
} else if (priv->rst_fun == RK806_RST_MODE2) {
value |= (RK806_RST_MODE2 << 6);
rk806_spi_write(dev, RK806_SYS_CFG3, &value, 1);
}
}

?? ?rk8xx_spi_irq_chip_init(dev);


///* 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");
//}

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

?? ?//int j = 0;
//for(j=0; j<256; j++)
//{
//?? ?//printf("0x%02x, ", pmic_reg_read(dev, j) );
//?? ?//ret = rk806_spi_read(dev, RK806_SYS_CFG1, &value, 1);
//?? ?ret = rk806_spi_read(dev, j, &value, 1);
//?? ?//printf("0x%02x = 0x%02x\n", j, pmic_reg_read(dev, j) );
//?? ?printf("0x%02x = 0x%02x\n", j, value );
//}


?? ?int j = 0;
for(j=0; j<10; j++)
{
mdelay(1000);
printf("**** wyb 2025/6/26 16:58 %s %s %d j=%d\n", __FILE__, __FUNCTION__, __LINE__, j);
}

//ret = rk806_spi_read(dev, RK806_SYS_CFG3, &dev_off, 1);
ret = rk806_spi_read(dev, 0x5D, &value, 1);
if (0x80 == value)
{
u8 dev_off;
int ret = 0;
printf("**** wyb 2025/6/26 16:58 %s %s %d\n", __FILE__, __FUNCTION__, __LINE__);

ret = rk806_spi_read(dev, RK806_SYS_CFG3, &dev_off, 1);
if (ret)
return ret;

dev_off |= RK806_DEV_OFF;
ret = rk806_spi_write(dev, RK806_SYS_CFG3, &dev_off, 1);
if (ret) {
dev_err(dev, "rk806 shutdown error: %d\n", ret);
return ret;
}

while (1)
;
}

?? ?return 0;
}

static int rk8xx_spi_shutdown(struct udevice *dev)
{
u8 dev_off;
int ret = 0;

printf("**** wyb 2025/6/26 16:58 %s %s %d\n", __FILE__, __FUNCTION__, __LINE__);

?? ?ret = rk806_spi_read(dev, RK806_SYS_CFG3, &dev_off, 1);
if (ret)
return ret;

?? ?dev_off |= RK806_DEV_OFF;
ret = rk806_spi_write(dev, RK806_SYS_CFG3, &dev_off, 1);
if (ret) {
dev_err(dev, "rk806 shutdown error: %d\n", ret);
return ret;
}

?? ?while (1)
;

?? ?return 0;
}

參考資料:
https://blog.csdn.net/Y1anH/article/details/146641944?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-146641944-blog-127852443.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.2&utm_relevant_index=3
RK806S PMIC電源管理芯片調試
https://blog.csdn.net/Y1anH/article/details/146641944

解析此處的核心代碼

當點按PWRON按鍵時,rk806上電開始啟動bootloader和uboot,在執行到此處時檢測到是由于按鍵啟動的,所以0x5d的值是0x80,0x74的值是0x80,在一般情況下,mode都默認是none的,所以mode值為11,因此就進入了我們的if判斷,若是由于按鍵啟動的,則直接調用rk8xx_shutdown函數關掉,進入這個函數會看到實際是通過i2c給0x72寄存器的BIT(0)寫1,使其關機。

所以此操作就實現了點按PWRON按鍵無法開機,避免了誤觸情況。

在判斷里加上0x74寄存器為0x40的情況,則避免了12V電源插入自動啟動

而長按開機時,0x5d實際讀到的值是0x00,所以不會進入此處的判斷

關于此處按鍵寄存器檢測的值,從邏輯上來看更像是按下為0x00,不按為0x80,這里后續還要再想辦法測試一下,即rk806芯片手冊與實際描述是相反的。或者與PWRON按鍵接vcc或GND有關,因為rk806手冊按下按鍵時電平狀態是拉低的

總之實現的邏輯是這樣的,具體的場景需要微調寄存器判斷的值


https://blog.csdn.net/u011774634/article/details/130585756?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-6-130585756-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-6-130585756-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=11
RK3588S Android12修改PMIC(RK806)長按電源鍵強制關機的時長為10秒
https://blog.csdn.net/u011774634/article/details/130585756

--- a/kernel-5.10/drivers/mfd/rk806-core.c
+++ b/kernel-5.10/drivers/mfd/rk806-core.c
@@ -677,6 +677,8 @@ static int rk806_parse_dt(struct rk806 *rk806)
/* 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);
+ ? ? ??
+ ? ? ? rk806_field_write(rk806,PWRON_LP_OFF_TIME,0x02);

return 0;
}


https://blog.csdn.net/u011774634/article/details/132744969?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-132744969-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-132744969-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=12
RK3588S Android12修改短按電源鍵的開機按鍵時長
https://blog.csdn.net/u011774634/article/details/132744969

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/weixin_43245753/article/details/127852443
RK3588長按power鍵強制關機的按鍵時間設置


https://wenku.csdn.net/answer/4cc3d5c9b6ae43f09a8c301a1ec7a02d?spm=1001.2101.3001.6650.20&utm_medium=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7ECTRLIST%7EPosition-20-4cc3d5c9b6ae43f09a8c301a1ec7a02d-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7ECTRLIST%7EPosition-20-4cc3d5c9b6ae43f09a8c301a1ec7a02d-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=25
RK3568 Android11 去除長按power鍵關機的功能 - CSDN文庫.mhtml
https://wenku.csdn.net/answer/4cc3d5c9b6ae43f09a8c301a1ec7a02d

RK3568 Android11 去除長按power鍵關機的功能?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
時間: 2023-09-11 13:10:10 瀏覽: 545?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?

您可以通過修改系統源代碼來實現去除長按power鍵關機的功能。具體的實現步驟如下:?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?

1、打開系統源代碼,并找到 frameworks/base/packages/systemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java 文件。?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?

2、在該文件中找到 mPowerOptions = (Linearlayout) mDialog.findViewById(R.id.power_options);代碼行。?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?

3、在該代碼行后面添加以下代碼:?? ?
// 關閉長按 power 鍵關機功能
mPowerOptions.findViewById(R.id.shutdown).setVisibility(View.GONE);復制代碼?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?

4、保存文件并重新編譯系統源代碼。?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?

5、在設備上安裝編譯后的系統鏡像,并測試長按 power 鍵是否已經無法關機。?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?

注意:該方法需要您具備一定的 Android 系統開發經驗,并且需要對設備進行 ROOT 操作才能實現。另外,修改系統源代碼可能會導致系統不穩定或無法正常升級,請謹慎操作。?? ?


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/2092347.html
【深圳觸覺智能技術分享】RK3568 RK809電量計電池調試

https://www.elecfans.com/d/2089149.html
基于IDO-SBC3568主板說明PMIC RK809電量計的調試方法-電子發燒友網

https://blog.csdn.net/Industio_CSDN/article/details/130921874?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-130921874-blog-107173710.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.2&utm_relevant_index=4
https://blog.csdn.net/Industio_CSDN/article/details/130921874
【深圳觸覺智能技術分享】RK3568 RK809電量計電池調試


https://blog.csdn.net/qq_40715266/article/details/130229120?spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-130229120-blog-107173710.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-130229120-blog-107173710.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=21
https://blog.csdn.net/qq_40715266/article/details/130229120
rk3568-rk809電池電量計
[*] CW2015 Battery driver


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...


【參考資料:】
https://damodev.csdn.net/68243289a5baf817cf4bb2d5.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MjQwNTYwLCJleHAiOjE3NDk1Mzk2ODksImlhdCI6MTc0ODkzNDg4OSwidXNlcm5hbWUiOiJ3YjQ5MTYifQ.H5IbfRcXuGLiIByHSErH_Ot8Y5r_XJUMkbGuVadaNkw&spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7Eactivity-4-146173693-blog-107173710.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7Eactivity-4-146173693-blog-107173710.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=7
https://damodev.csdn.net/68243289a5baf817cf4bb2d5.html
RK809-5電源管理芯片(PMIC)主要有以下幾種開機模式:

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/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.pswp.cn/diannao/90973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90973.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90973.shtml

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

相關文章

20250713-`Seaborn.pairplot` 的使用注意事項

Seaborn.pairplot 的使用注意事項 sns.pairplot 是 Seaborn 中最常用、最強大的探索性數據分析&#xff08;EDA&#xff09;函數之一。 它在一個調用里就能同時展示&#xff1a; 任意兩兩變量間的 散點圖&#xff08;觀察關系、聚類、異常值&#xff09;對角線上每個變量的 單…

如何選擇合適的AI論文寫作工具?七個AI英文論文寫作網站

在寫作英文論文時&#xff0c;許多人往往會遇到寫作思路卡殼、語言不流暢、重復率過高等問題。幸運的是&#xff0c;AI論文寫作工具的出現&#xff0c;極大地提升了寫作效率和質量。這些工具不僅可以幫你快速生成內容、擴展論點&#xff0c;還可以優化語言&#xff0c;幫助你順…

【保姆級喂飯教程】idea中安裝Conventional Commit插件

目錄前言一、安裝二、測試前言 之前了解到了Conventional Commit規范&#xff0c;idea中好像沒什么鉤子工具&#xff0c;測試一下Conventional Commit插件吧 一、安裝 點擊file-settings 點擊plugins插件&#xff0c;搜索Conventional Commit&#xff0c;點擊install安裝&…

# 電腦每次重啟都自動啟動惠普安裝程序,怎么取消?

電腦每次重啟都自動啟動惠普安裝程序&#xff0c;怎么取消&#xff1f; 一、通過任務管理器禁用&#xff1a; 1&#xff09;右鍵點擊任務欄上的空白區域&#xff0c;選擇 “任務管理器”。 2&#xff09;在任務管理器窗口中&#xff0c;點擊頂部菜單欄上的 “啟動” 選項卡。 3…

QT遇到過的樣式記錄

此帖主要記錄平常工程里遇到的qt樣式 窗口無邊框 原始文檔 void QWidget::setWindowFlag(Qt::WindowType flag, bool on true) Sets the window flag flag on this widget if on is true; otherwise clears the flag. This function was introduced in Qt 5.9. See also se…

軟件設計師中級概念題

軟件過程模型 1. 瀑布模型&#xff1a; 五個階段&#xff1a;需求分析、設計、編碼、測試、運行與維護。 為軟件的開發和維護提供了一種有效的管理模式&#xff0c;它是以文檔作為驅動、合適于軟件需求很明確的軟件項目模型。瀑布模型假設&#xff0c;一個待開發的系統需求是完…

Elasticsearch安裝、入門、基礎API操作、全文檢索、精準查詢、地理查詢、復合查詢、排序、分頁、高亮、數據聚合、自動補全、數據同步、ES集群

學習資料&#xff1a; 通過網盤分享的文件&#xff1a;Elasticsearch 鏈接: https://pan.baidu.com/s/18BxA0BH0G–jwy95uFmFZQ 提取碼: yyds 初識ES正向索引倒排索引ES與MySQL 概念對比安裝ES操作索引庫mapping屬性創建索引庫{"mappings": {"properties":…

教程:如何查看瀏覽器擴展程序的源碼

在學習前端、自動化或擴展開發時&#xff0c;我們常常會想研究某個瀏覽器插件的實現邏輯。即使擴展沒有公開源碼&#xff0c;只要我們本地安裝了它&#xff0c;就可以查看它的完整源代碼進行學習。? 方法一&#xff1a;從瀏覽器插件目錄提取源碼 第一步&#xff1a;打開擴展程…

虛擬儲能與分布式光伏協同優化:新型電力系統的靈活性解決方案

安科瑞顧強摘要&#xff1a; 在全球能源結構向低碳化、智能化加速轉型的背景下&#xff0c;分布式光伏的大規模接入為電力系統帶來機遇的同時&#xff0c;也因其波動性與間歇性帶來了運行挑戰。本文聚焦于虛擬儲能系統&#xff08;Virtual Energy Storage System, VESS&#xf…

java valueOf方法

一,什么是valueOf方法?valueOf是java包裝類(比如Long,Integer等)中提供的一個靜態方法二,valueOf的主要作用是什么主要作用是將其他類型的數據轉換為當前包裝類的對象三,代碼實例:咱們以Long.valueOf為例,1,他可以接受一個long類型的數值,返回對應的Long對象(把基本類型long包…

工業平板電腦 vs 消費級平板:從防護等級到使用壽命全方面對比

平板電腦已經廣泛應用于各個行業。但你知道嗎&#xff1f;市面上常見的“平板”其實可以分為兩大類&#xff1a;工業平板電腦和消費級平板電腦。雖然它們看起來都是“平板”&#xff0c;但用途、性能和適用場景卻大不相同。今天&#xff0c;我們就來聊聊這兩者的區別&#xff0…

MySQL技術筆記-索引+慢 SQL+鎖 全鏈路優化實戰

目錄 前言 MySQL索引 一、概述 二、索引分類 &#xff08;一&#xff09;按功能特性分類 &#xff08;二&#xff09;按存儲方式分類 &#xff08;三&#xff09;按數據結構分類 &#xff08;四&#xff09;按索引字段數量分類 三、索引的優缺點 &#xff08;一&…

S7-1200 與 S7-300 PNS7-400 PN UDP 通信 TIA 相同項目

7-1200 與 S7-300 PN/S7-400 PN UDP 通信 TIA 相同項目S7-1200 與 S7-300 PN 口之間的以太網通信可以通過 UDP 協議來實現&#xff0c;使用的通信指令是在雙方 CPU 調用通信-開放式用戶通信TSEND_C&#xff0c;TRCV_C&#xff08;1200支持&#xff0c;300不支持&#xff09;或T…

java進階(二)+學習筆記

面向對象設計原則1. 面向對象概念面向對象 是一種編程思想&#xff0c;面向過程是關注實現的步驟&#xff0c;每個步驟定義一個函數&#xff0c;調用函數執行即可。面向對象關注的是誰(對象)來執行&#xff0c; 把具有相同屬性和行為的一類事物(對象)進行抽象成類&#…

[附源碼+數據庫+畢業論]基于Spring Boot+mysql+vue結合內容推薦算法的學生咨詢系統

摘要 隨著互聯網的普及&#xff0c;學生在學習和生活中面臨著海量信息&#xff0c;如何高效獲取有價值的內容成為亟待解決的問題。本文基于 Spring Boot 框架&#xff0c;結合內容推薦算法&#xff0c;設計并實現了一個學生咨詢系統。系統采用 Spring Boot MyBatis MySQL Vu…

DeepSeek 微調實踐:DeepSeek-R1 大模型基于 MS-Swift 框架部署 / 推理 / 微調實踐大全

注&#xff1a;此文章內容均節選自充電了么創始人&#xff0c;CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》&#xff08;跟我一起學人工智能&#xff09;【陳敬雷編著】【清華大學出版社】 GPT多模態大模型與AI Agent智能體書籍本章配套視頻課程【陳敬雷】 文…

python基礎知識pip配置pip.conf文件

pip.conf一、 INI格式二、 級別三、 文件位置四、 加載順序五、 常用一、 INI格式 配置文件可以更改pip命令行選項的默認值&#xff0c;這個文件是使用INI格式編寫的。 INI格式 主要包含三個內容&#xff1a;1.節section 2.鍵值對 3.注釋 [section1] key1 value1 \\注釋 key2…

深入理解 Java JVM

文章目錄&#x1f4d5;1. JVM簡介&#x1f4d5;2. JVM運行流程&#x1f4d5;3. JVM運行時數據區&#x1f4d5;4. JVM類加載??4.1 類加載過程??4.2 雙親委派模型??4.3 破壞雙親委派模型&#x1f4d5;5. JVM垃圾回收機制&#xff08;GC機制&#xff09;??5.1 判斷死亡對象…

Linux內核高效之道:Slab分配器與task_struct緩存管理

前言 在Linux內核中&#xff0c;進程創建與銷毀是最頻繁的操作之一。想象一下&#xff1a;當系統每秒需要處理成百上千次fork()和exit()調用時&#xff0c;如何保證task_struct&#xff08;進程描述符&#xff09;的分配與釋放既快速又不產生內存碎片&#xff1f;這就是Slab分配…

雙esp8266-01之間UDP透傳傳輸,自定義協議

使用AT模式的透傳&#xff0c;串口打印的數據包含pd1,4,數據打印的數據不是直接將數據打印出來&#xff0c;包含了pd1,4,特殊字符&#xff0c;針對想要直接開機直接透傳&#xff0c;打印數據且按照自主協議幀頭的功能進行開發。1.server程序&#xff1a;/*************SERVER**…