使用外部RTC
rk3568的pmu rk809提供了内部RTC,edge2断电后,内部rtc无法保存系统时间。为了断电后能保存系统时间,edge2提供了外部rtc HYM8563和纽扣电池座,安装纽扣电池后,edge2可以保存系统时间。
简介
edge2提供HYM8563作为外部rtc(Real Time Clock),HYM8563是一款低功耗CMOS实时时钟/日历芯片,它提供一个可编程的时钟输出,一个中断 输出和一个掉电检测器,所有的地址和数据都通过i2c总线接口串行传递。最大总线速度为 400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动递增。
-
可计时基于 32.768kHz 晶体的秒,分,小时,星期,天,月和年
-
宽工作电压范围:1.0~5.5V
-
低休眠电流:典型值为 0.25μA(VDD =3.0V, TA =25°C)
-
内部集成振荡电容
-
漏极开路中断引脚
接口使用
Linux 提供了三种用户空间调用接口。在edge2中对应的路径为:
-
SYSFS接口:/sys/class/rtc/rtc1/
-
PROCFS接口: /proc/driver/rtc
-
IOCTL接口: /dev/rtc1
SYSFS接口
可以直接使用
cat
和hwclock
操作/sys/class/rtc/rtc0/
下面的接口。比如查看当前 rtc 的日期和时间:
# cat /sys/class/rtc/rtc1/date 2021-10-14 # cat /sys/class/rtc/rtc1/time 10:30:15
PROCFS 接口
打印 rtc 相关的信息:
# cat /proc/driver/rtc
rtc_time : 10:33:58
rtc_date : 2021-10-14
alrm_time : 11:06:00
alrm_date : 2021-10-14
alarm_IRQ : no
alrm_pending : no
update IRQ enabled : no
periodic IRQ enabled : no
periodic IRQ frequency : 1
max user IRQ frequency : 64
24hr : yes
IOCTL接口
可以使用 ioctl
或者hwclock
命令 控制 /dev/rtc1
。
# hwclock -f /dev/rtc1
Thu Oct 14 10:36:21 2021 0.000000 seconds
FAQs
Q1: 开发板上电后时间不同步?
A1: 检查一下 rtc 纽扣电池是否正确接入。
RTC驱动
[备注]:Mixtile发布的Android和Debian系统已经在内核配置好了RTC功能,用户可以忽略以下内容。如果你打算自己编译Android或Debian系统,请按照以下内容去配置RTC驱动。
kernel DTS配置参考: kernel/arch/arm64/boot/dts/rockchip/mixtile-edge2-evb.dtsi
&i2c3 {
status = "okay";
hym8563: hym8563@51 {
compatible = "haoyu,hym8563";
reg = <0x51>;
pinctrl-names = "default";
pinctrl-0 = <&rtc_int>;
interrupt-parent = <&gpio0>;
interrupts = <RK_PD3 IRQ_TYPE_LEVEL_LOW>;
status = "okay";
};
};
&pinctrl {
rtc {
rtc_int: rtc-int {
rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
}
驱动参考:kernel/drivers/rtc/rtc-hym8563.c
RTC生效
由于kernel中默认使用rk809内部rtc,如果使能外部rtc HYM8563,并且使能系统时间同步HYM8563的时间,需要对系统作出如下修改。
kernel修改
- dts修改
参考 RTC驱动 章节
- config修改
修改文件为:
kernel/arch/arm64/configs/mixtile_edge2_defconfig
添加如下配置
CONFIG_RTC_DRV_HYM8563=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc1"
CONFIG_RTC_SYSTOHC_DEVICE="rtc1"
编译kernel,参考 编译kernel 章节
下载boot.img,参考 固件升级 章节
android修改
由于外部rtc HYM8563在kernel中以节点/dev/rtc1存在于系统中,android需要获得/dev/rtc1的权限。
修改文件1:device/rockchip/rk356x/mixtile_edge2/init.mixtile_edge2.rc
增加如下配置:
on boot
chown system system /dev/rtc1
chmod 0640 /dev/rtc1
修改文件2: device/rockchip/rk356x/mixtile_edge2/sepolicy/genfs_contexts
增加如下配置:
genfscon sysfs /devices/platform/fe5c0000.i2c/i2c-3/3-0051/power/wakeup u:object_r:sysfs_wakeup:s0
genfscon sysfs /devices/platform/fe5c0000.i2c/i2c-3/3-0051/rtc/rtc1/hctosys u:object_r:sysfs_hctosys:s0
编译android,参考 编译android 章节
下载super.img,参考 固件升级 章节