11. RTC 使用¶
11.1. 简介¶
ITX-3588J 开发板采用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)
内部集成振荡电容
漏极开路中断引脚
RTC有两个供电选择,一个是纽扣电池,一个是电容。开发板装上1220纽扣电池后,可以保证板子掉电后RTC长时间正常运行,电容则是短时间内保证RTC运行。纽扣电池座和电容的位置如下图所示:
11.2. RTC驱动¶
Android SDK中的DTS配置参考: kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-diff.dtsi
和
`kernel/arch/arm64/boot/dts/rockchip/rk3588-firefly-itx-3588j.dtsi
&i2c6 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c6m0_xfer>;
clock-frequency = <400000>;
hym8563: hym8563@51 {
compatible = "haoyu,hym8563";
reg = <0x51>;
#clock-cells = <0>;
clock-frequency = <32768>;
clock-output-names = "hym8563";
pinctrl-names = "default";
pinctrl-0 = <&hym8563_int>;
interrupt-parent = <&gpio0>;
interrupts = <RK_PB0 IRQ_TYPE_LEVEL_LOW>;
wakeup-source;
status = "disabled";
};
};
驱动参考:kernel-5.10/drivers/rtc/rtc-hym8563.c
11.3. 接口使用¶
Linux 提供了三种用户空间调用接口。在 ITX-3588J 开发板中对应的路径为:
SYSFS接口:/sys/class/rtc/rtc0/
PROCFS接口: /proc/driver/rtc
IOCTL接口: /dev/rtc0
11.3.1. SYSFS接口¶
可以直接使用 cat
和 echo
操作 /sys/class/rtc/rtc0/
下面的接口。
比如查看当前 RTC 的日期和时间:
# cat /sys/class/rtc/rtc0/date
2022-06-21
# cat /sys/class/rtc/rtc0/time
06:52:08
设置开机时间,如设置 120 秒后开机:
#120秒后定时开机
echo +120 > /sys/class/rtc/rtc0/wakealarm
# 查看开机时间
cat /sys/class/rtc/rtc0/wakealarm
#关机
reboot -p
11.3.2. PROCFS 接口¶
打印 RTC 相关的信息:
# cat /proc/driver/rtc
rtc_time : 06:53:50
rtc_date : 2022-06-21
alrm_time : 06:55:05
alrm_date : 2022-06-21
alarm_IRQ : yes
alrm_pending : no
update IRQ enabled : no
periodic IRQ enabled : no
periodic IRQ frequency : 1
max user IRQ frequency : 64
24hr : yes
11.3.3. IOCTL接口¶
可以使用 ioctl
控制 /dev/rtc0
。
详细使用说明请参考文档 kernel-5.10/Documentation/admin-guide/rtc.rst
。