news 2026/4/3 7:58:23

RK3568 Android14 集成 HYM8563 外部 RTC (I2C接口)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RK3568 Android14 集成 HYM8563 外部 RTC (I2C接口)

RK3568 Android14 集成 HYM8563 外部 RTC (I2C接口)

前言

虽然 RK3568 SoC 内部自带了 RTC 控制器(rtc-rkw808),但在很多工业板卡或手持设备设计中,为了更低的待机功耗和更灵活的电池备份方案,硬件工程师往往会选择外挂一颗低功耗 RTC 芯片。
HYM8563 (与 BM8563、PCF8563 寄存器兼容)是最常见的一种 I2C 接口 RTC 芯片。本文将记录在 RK3568 Android 14 平台上,如何驱动这颗芯片,并使其成为系统的主 RTC。

一、 硬件原理与连接

1.1 硬件接口

HYM8563 是一颗标准的 I2C 从设备。
通讯接口:I2C (SCL/SDA)
设备地址:0x51 (7-bit address)
中断引脚:INT (输出低电平有效,非常重要,用于实现定时开机/唤醒功能)

1.2 原理图参考

假设我们将 RTC 挂载在 I2C5 总线上,中断脚连接到 GPIO0_D3。

HYM8563与RK3568引脚对应表

BM8563引脚RK3568引脚功能说明
SCLI2C5_SCL_M0I2C时钟信号线
SDAI2C5_SDA_M0I2C数据信号线
INTGPIO0_D3中断输出,用于唤醒主控
VCCVCC_3V3供电(纽扣电池或常电)

二、 内核驱动配置 (Kernel Config)

Rockchip 的 Linux 5.10 / 6.1 内核源码中已经包含了该芯片的通用驱动。

2.1 检查 Menuconfig

执行 make menuconfig,确保勾选以下选项:

Device Drivers--->[*]Real Time Clock---><*>Philips PCF8563/Epson RTC8564/Haoyu HYM8563

对应的 .config 配置项为:

CONFIG_RTC_DRV_HYM8563=y

注意:通常驱动源码位于 drivers/rtc/rtc-hym8563.c。

2.2 设备树配置 (DTS)

这是集成的核心步骤。我们需要在对应的 I2C 节点下添加 RTC 设备,并指定中断引脚。
打开 arch/arm64/boot/dts/rockchip/rk3568-your-board.dts:

/* 启用 I2C3 控制器 */&i2c5{status="okay";/* 添加 RTC 节点 */hym8563:hym8563@51{status="okay";compatible="haoyu,hym8563";reg=<0x51>;pinctrl-names="default";/* 配置中断脚: GPIO0_D3 *//* RK_PD3 需要在头文件中查找或直接写数字,通常推荐使用宏定义 */pinctrl-0=<&rtc_int>;interrupt-parent=<&gpio0>;interrupts=<RK_PD3 IRQ_TYPE_LEVEL_LOW>;};};/* 配置引脚复用(如果该引脚默认为其他功能) */&pinctrl{rtc{rtc_int:rtc-int{rockchip,pins=<0RK_PD3 RK_FUNC_GPIO&pcfg_pull_up>;};};};

三、 编译与验证

编译内核并烧录 boot.img 和 dtbo.img (如有)。

3.1 功能验证 (Linux 层)

# 读取硬件时间 hwclock-r-f/dev/rtc0 # 将系统时间写入硬件 RTC date-s"2025-05-01 12:00:00"hwclock-w-f/dev/rtc0 # 断电重启,再次读取,检查时间是否保存

3.2 唤醒测试 (关键)

HYM8563 的中断脚连接到 GPIO,主要为了支持 “设置闹钟唤醒系统”(深度休眠唤醒)。
设置定时唤醒:

echo+30>/sys/class/rtc/rtc0/wakealarm(表示30秒后触发中断)

让系统进入休眠:

echo mem>/sys/power/state

观察:
30秒后,系统应该自动亮屏或串口打印唤醒日志。如果无法唤醒,请检查:
INT 引脚的硬件连接是否正确。
DTS 中 interrupts 极性配置是否为 IRQ_TYPE_LEVEL_LOW。
示波器测量 INT 脚是否有电平拉低动作。

四.、常见问题 (FAQ)

Q1: 读取时间报错 “RTC_RD_TIME: Invalid argument”
原因:RTC 芯片内部寄存器数据非法(通常是电池没电或初次上电未初始化,Voltage Low 标志位被置起)。
解决:写入一次正确时间即可清除标志位:hwclock -w。

Q2: 系统重启后时间变回 1970 年
原因:纽扣电池没电,或者板子上并没有给 VCC 脚接常电。
解决:测量电池电压;检查 hctosys 是否开启(内核配置 CONFIG_RTC_HCTOSYS=y)。

Q3: I2C 通讯失败 (Timeout / No ack)
原因:地址错误(7位地址是 0x51,8位读地址是 0xA3),或者 I2C 上拉电阻缺失。
解决:检查原理图,确认 SDA/SCL 是否有 4.7k 上拉电阻。

总结

集成 HYM8563 相对简单,主要是标准的 I2C 设备调试。但在 Android 14 上,需要额外注意 aliases 别名 的设置,确保系统将 HYM8563 识别为 rtc0,否则系统可能依然读取 SoC 内部的默认时间,导致掉电时间不准。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 3:54:24

前端——前端路由守卫与权限验证实战

路由守卫是实现页面访问控制的重要手段&#xff0c;结合权限系统可以实现精细化的访问控制。 1 全局前置守卫 // 路由守卫 router.beforeEach(async (to, from, next) > {// 检查是否需要认证if (to.meta.requiresAuth) {const isAuthenticated store.getters.isAuthentica…

作者头像 李华
网站建设 2026/3/31 21:22:16

Java GC是任意时候都能进行的吗?

大家好&#xff0c;我是锋哥。今天分享关于【Java GC是任意时候都能进行的吗&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring IoCJava GC是任意时候都能进行的吗&#xff1f; 超硬核AI学习资料&#xff0c;现在永久免费了&#xff01; 不是的&#xff0c;Java 的…

作者头像 李华
网站建设 2026/4/3 4:41:13

测试平台出问题?看我20分钟快速定位!

今天遇到一个问题&#xff0c;感觉挺有意思&#xff0c;处理过程也非常有意义&#xff0c;希望能给大家一个借鉴吧。今天一位小姐姐找到了我们大组长&#xff0c;说测试平台添加自动化测试用例失败&#xff0c;之后我们组长把我拉到了一个群里让我去看一下&#xff0c;硬着头皮…

作者头像 李华
网站建设 2026/4/2 13:54:51

C#数组操作全攻略:引用测试与查询方法

第九次一&#xff0c;数组的引用测试和属性方法1&#xff0c; 数组的引用测试int[] ints new int[] {1,2,3}; int[] ints2 ints; //赋值关系 ints[0] 999; Console.WriteLine(ints2[0]); Console.WriteLine(ints[0]);2&#xff0c;方法传递时候对数组引用测试int[] ints3 n…

作者头像 李华