Enable External RTC

PMU rk809 of rk3568 provides internal RTC. After edge2 is powered off, the internal RTC cannot save the system time. In order to save the system time after power failure, edge2 provides external RTC HYM8563 and button battery base. After installing button battery, edge2 can save the system time.

Introduction

Edge 2 uses HYM8563 as RTC(Real Time Clock). HYM8563 provides a programmable clock output, an interrupt output and a power-down detector. All addresses and data are passed serially through the I2C bus interface. The maximum bus speed is 400Kbits/s. After each read and write, the embedded word address register will automatically increment.

  • Timing can be based on 32.768kHz crystals in seconds, minutes, hours, weeks, days, months, and years
  • Wide working voltage range : 1.0~5.5V
  • Low resting current: Typically 0.25μA(VDD =3.0V, TA =25°C)
  • Internal integrated oscillating capacitor
  • Drain open circuit interrupt pin

RTC Driver

The kernel DTS configuration reference: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>;
        };
    };
}

Drive reference: kernel/drivers/rtc/rtc-hym8563.c

Activating RTC

The internal RTC of RK809 is used by default in the kernel if the external RTC HYM8563 is enabled and the system time is enabled to synchronize the time of the HYM8563, the system needs to be modified as follows:

Modifying kernel

  • Modifying DTS

Refer to RTC Driver

  • Modifying config

The modified file is:

kernel/arch/arm64/configs/mixtile_edge2_defconfig

Add the following configuration:

CONFIG_RTC_DRV_HYM8563=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc1"
CONFIG_RTC_SYSTOHC_DEVICE="rtc1"

To compile the kernel, please refer to the Compile kernel chapter for more details.

To burn boot.img, please refer to Update Firmware chapter for more details.

Modifying Android

The external RTC HYM8563 exists in the system as the node /dev/rtc1 in the kernel, Android needs to obtain the permission of /dev/rtc1

Modifying file 1: device/rockchip/rk356x/mixtile_edge2/init.mixtile_edge2.rc

Add the following configuration:

on boot
    chown system system /dev/rtc1
    chmod 0640 /dev/rtc1

Modifying file 2: device/rockchip/rk356x/mixtile_edge2/sepolicy/genfs_contexts

Add the following configuration:

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

To compile Android, please refer to the Compile kernel chapter for more details.

To burn super.img, please refer to Update Firmware chapter for more details.

Using Interfaces

Linux provides three user-space call interfaces. The corresponding path in Edge 2 is:

  • SYSFS Interface : /sys/class/rtc/rtc0/

  • PROCFS Interface : /proc/driver/rtc

  • IOCTL Interface : /dev/rtc0

    SYSFS Interface

Using the interface below cat and hwclock can directly operate /sys/class/rtc/rtc0/.

Such as checking the current date and time on RTC:

# cat /sys/class/rtc/rtc1/date
2021-10-14
# cat /sys/class/rtc/rtc1/time
10:30:15

PROCFS Interface

Print RTC related information:

# 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 Interface

Using the interface below ioctl and hwclock can directly operate /dev/rtc1, you have to run the below command as root account.

# hwclock -f /dev/rtc1
Thu Oct 14 10:36:21 2021  0.000000 seconds

FAQs

Q1: Why is the time out of sync after the development board is powered on? A1: check whether the RTC button battery is connected correctly.