RK3566-RK817通过TS管脚控制外部电源

主板电路将RK817的TS管脚连接到外部电源的EN端,想实现开机时由TS管脚置高控制外部电源开启,关机时由TS管脚置低控制外部电源关闭。

查看Rockchip RK817 Datasheet文档可知,需要操作PMIC_GPIO_INT_CONFIG寄存器中的bit[4:2]来实现。

Bit[4:2]=0x7时,TS为高电平;Bit[4:2]=0x5时,TS为低电平。

开机时置高TS管脚的方法:

可通过两种方式实现,一是修改uboot代码,二是修改内核。

修改u-boot

u-boot/drivers/power/pmic/rk8xx.c文件中rk817_init_reg[]表下增加

{ RK817_GPIO_INT_CFG, 0x1C, 0x1C },

static struct reg_data rk817_init_reg[] = {
/* enable the under-voltage protection,
 * the under-voltage protection will shutdown the LDO3 and reset the PMIC
 */
	{ RK817_BUCK4_CMIN, 0x60, 0x60},
	{ RK817_PMIC_SYS_CFG1, 0x20, 0x70},
	/* Set pmic_sleep as none function */
	{ RK817_PMIC_SYS_CFG3, 0x00, 0x18 },

#ifdef CONFIG_DM_CHARGE_DISPLAY
	/* Set pmic_int active low */
	{ RK817_GPIO_INT_CFG,  0x00, 0x02 },
#endif
	{ RK817_GPIO_INT_CFG,  0x1C, 0x1C },
};

reg_data类型定义如下: 

struct reg_data {
	u8 reg;
	u8 val;
	u8 mask;
};

修改内核驱动:

./kernel/drivers/mfd/rk808.c文件中rk817_pre_init_reg[]表下增加

{RK817_GPIO_INT_CFG, 0x1C, 0x1C},

static const struct rk808_reg_data rk817_pre_init_reg[] = {
	{RK817_SYS_CFG(3), RK817_SLPPOL_MSK, RK817_SLPPOL_L},
	{RK817_RTC_CTRL_REG, RTC_STOP, RTC_STOP},
	{RK817_GPIO_INT_CFG, RK817_INT_POL_MSK, RK817_INT_POL_L},
	{RK817_GPIO_INT_CFG, 0x1C, 0x1C},
	{RK817_SYS_CFG(1), RK817_HOTDIE_TEMP_MSK | RK817_TSD_TEMP_MSK,
					   RK817_HOTDIE_105 | RK817_TSD_140},
};

关机时置低TS管脚的方法:

./kernel/drivers/mfd/rk808.c文件中rk817_shutdown_prepare()函数中增加

    ret = regmap_update_bits(rk808->regmap,
                 RK817_GPIO_INT_CFG,
                 0x08, 0x00);

加载/* pmic sleep shutdown function */之前

static void rk817_shutdown_prepare(void)
{
	int ret;
	struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client);

	/* close rtc int when power off */
	regmap_update_bits(rk808->regmap,
			   RK817_INT_STS_MSK_REG0,
			   (0x3 << 5), (0x3 << 5));
	regmap_update_bits(rk808->regmap,
			   RK817_RTC_INT_REG,
			   (0x3 << 2), (0x0 << 2));

	if (rk808->pins && rk808->pins->p && rk808->pins->power_off) {
		ret = regmap_update_bits(rk808->regmap,
					 RK817_SYS_CFG(3),
					 RK817_SLPPIN_FUNC_MSK,
					 SLPPIN_NULL_FUN);
		if (ret) {
			pr_err("shutdown: config SLPPIN_NULL_FUN error!\n");
		}

		ret = regmap_update_bits(rk808->regmap,
					 RK817_SYS_CFG(3),
					 RK817_SLPPOL_MSK,
					 RK817_SLPPOL_H);
		if (ret) {
			pr_err("shutdown: config RK817_SLPPOL_H error!\n");
		}
		ret = pinctrl_select_state(rk808->pins->p,
					   rk808->pins->power_off);
		if (ret)
			pr_info("%s:failed to activate pwroff state\n",
				__func__);
	}

	ret = regmap_update_bits(rk808->regmap,
				 RK817_GPIO_INT_CFG,
				 0x08, 0x00);
	/* pmic sleep shutdown function */
	ret = regmap_update_bits(rk808->regmap,
				 RK817_SYS_CFG(3),
				 RK817_SLPPIN_FUNC_MSK, SLPPIN_DN_FUN);
	if (ret)
		dev_err(&rk808_i2c_client->dev, "Failed to shutdown device!\n");
	/* pmic need the SCL clock to synchronize register */
	mdelay(2);
}

因为开机时已将bit4,bit2置1,所以关机时只需将bit3置0。

### 关于IDO-Purple Pi OH RK3566-V1的人脸识别解决方案 对于基于IDO-Purple Pi OH RK3566-V1平台实现人脸识别功能,可以考虑采用OpenCV库配合Python编程语言完成图像处理与模式识别的任务。由于该开发板支持多种操作系统安装,如OpenHarmony、Android以及Ubuntu等,在这些平台上均能良好运行计算机视觉应用。 在具体实施过程中,建议先配置好适合的软件环境,比如按照瑞芯微RK3566鸿蒙开发板Ubuntu虚拟机环境搭建教程中的指导设置工作环境[^2]。之后可利用摄像头采集人脸数据并保存为训练集文件;接着通过编写脚本调用OpenCV函数来进行特征提取和模型训练;最后部署到实际硬件上测试效果。 为了简化流程提高效率,也可以寻找已经集成好的开源项目或者商业产品作为参考案例。例如GitHub上有许多关于嵌入式设备上的轻量级神经网络框架(Tiny YOLO, MobileNet SSD),它们能够很好地适配ARM架构处理器,并提供了一定程度上面部检测的能力。 另外值得注意的是,如果想要更深入研究,则可能涉及到深度学习领域内的专业知识和技术手段,这通常意味着更高的计算资源需求以及更为复杂的算法设计。 ```python import cv2 from imutils import paths # 加载预训练的人脸检测器Haar Cascade分类器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') imagePaths = list(paths.list_images("dataset")) for imagePath in imagePaths: # 读取输入图像并将它转换成灰度图 image = cv2.imread(imagePath) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) for (x,y,w,h) in faces: roi_color = image[y:y+h,x:x+w] resized_image = cv2.resize(roi_color,(96,96)) # 将裁剪后的脸部区域存储起来用于后续建模分析 cv2.imwrite(f"faces/{path.split('/')[-1].split('.')[0]}_{count}.jpg",resized_image) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火柴棍mcu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值