console:/ # i2cget -f -y 0 0x20 0xf7
console:/ # i2cset -f -y 0 0x20 0xf7 0xc6 b


20250607在荣品的PRO-RK3566开发板的Android13下使用i2c-tools工具中的i2cget+i2cset来读写PMIC芯片RK809的寄存器
2025/6/7 9:17


缘起:使用的是荣品的PRO-RK3566开发板,RK3566+RK809。
在Android13下需要精细化调整开关机时间+充电。
那就深入琢磨RK809的寄存器吧!


1、根据RK809的DATASHEET,短按开机【100ms/500ms】/长按关机
我在网上找到的DATASHEET是V1.0的,据说有V1.4的或者更新的?
如果有,方便的话,发一下。

2、我们希望长按2s开机。
如果 RK809的开机模式是写死了。我司需要 等待 2s时间 【以防 误操作/误触发】

可以使用这个上电逻辑不?

先让 RK809检测到500ms 开机指令,如果检测到,先【清除掉 寄存器中的开机指示?】,然后让 RK809等待1.5s == 1500ms,
现在 在 检测 电源键 是否还是按下的。如果是的。走正常的开机逻辑。
如果不是,就判定为 误操作,关机了。

或者您这边有更好的 上电逻辑/建议?


1、既要长按【3s】开机,
2、又要【带2节电池的情况下】插入适配器自动开机!

console:/ # 
console:/ # 
console:/ # i2cget -f -y 0 0x20 0xf7                                           
0x86
console:/ # 
console:/ # i2cset -f -y 0 0x20 0xf7 0xc6
i2cset: mode too long (see "i2cset --help")
1|console:/ # 
1|console:/ # i2cset --help
Toybox 0.8.6-android multicall binary (see toybox --help)

usage: i2cset [-fy] BUS CHIP ADDR VALUE... MODE

Write an i2c register. MODE is b for byte, w for 16-bit word, i for I2C block.

-f    Force access to busy devices
-y    Answer "yes" to confirmation prompts (for script use)
console:/ # 
console:/ # i2cset -f -y 0 0x20 0xf7 0xc6 b                                    
console:/ # 
console:/ # i2cget -f -y 0 0x20 0xf7                                           
0xc6
console:/ # 
console:/ # 


console:/ # i2cget -f -y 0 0x20 0xf7
0x06
console:/ # 

console:/ # 
console:/ # i2cget -f -y 0 0x20 0xf0                                           
0x82
console:/ #

console:/ # 
console:/ # i2cget -f -y 0 0x20 0xf5                                           
0x40
console:/ # 

console:/ # i2cget -f -y 0 0x20 0xf6                                           
0x08
console:/ # i2cget -f -y 0 0x20 0xfA                                           
0x00
console:/ #
拔掉时配置,只接电池


参考资料:
https://blog.csdn.net/tianlai1009/article/details/107173710/
RK809搞一下长按PWR键重启

TE_ET
于 2020-07-07 09:18:51 发布

拿到的源码默认长按关机,短按开机,

不要长按关机,

只要长按重启

那么看一下规格书:

看一下驱动:

没有做这个寄存器的配置?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}
                       
};

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐