5. RTC 使用

5.1. 简介

AIO-3562JQ开发板采用 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)

  • 内部集成振荡电容

  • 漏极开路中断引脚

5.2. DTS 配置

例如:

&i2c2 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&i2c2m0_xfer>;

    hym8563: hym8563@51 {
        status = "okay";
        compatible = "haoyu,hym8563";
        reg = <0x51>;
        #clock-cells = <0>;
        rtc-irq-gpio = <&gpio0 RK_PA5 IRQ_TYPE_EDGE_FALLING>;
        clock-frequency = <32768>;
    };
};

驱动:kernel/drivers/rtc/rtc-hym8563.c

5.3. 接口使用

Linux 提供了三种用户空间调用接口。在 AIO-3562JQ开发板中对应的路径为:

  • SYSFS 接口:/sys/class/rtc/rtc0/

  • PROCFS 接口: /proc/driver/rtc

  • IOCTL 接口: /dev/rtc0

5.3.1. SYSFS 接口

可以直接使用 catecho 操作 /sys/class/rtc/rtc0/ 下面的接口。

比如查看当前 RTC 的日期和时间:

# cat /sys/class/rtc/rtc0/date
2021-03-10
#cat /sys/class/rtc/rtc0/time
03:35:01

设置开机时间,如设置 120 秒后开机:

#120秒后定时开机
echo +120 >  /sys/class/rtc/rtc0/wakealarm
# 查看开机时间
cat /sys/class/rtc/rtc0/wakealarm
#关机
reboot -p

5.3.2. PROCFS 接口

打印 RTC 相关的信息:

# cat /proc/driver/rtc
rtc_time	: 03:36:05
rtc_date	: 2021-03-10
alrm_time	: 03:37:59
alrm_date	: 2021-03-10
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

5.3.3. IOCTL 接口

c 程序中可以使用 ioctl 控制 /dev/rtc0

用法非常简单,详细使用说明可上网搜索。

5.4. FAQs

5.4.1. Q1: 开发板断电一段时间后上电时间不同步?

A1: 检查一下 RTC 电池是否正确接入。