1. 什么是RTC
RTC(Real-Time Clock,实时时钟)是一种电子设备或芯片,它用于保持当前时间和日期,即使系统关闭或断电也能持续计时。RTC 通常用于计算机、嵌入式系统、物联网设备等需要精确时间管理的场景。
1.1 RTC 的特点
低功耗:RTC 采用独立的电池(如纽扣电池 CR2032)供电,即使系统断电也能持续运行。
高精度:RTC 通过内置的石英晶振(通常为 32.768 kHz)提供高精度的时间基准。
独立运行:即使主系统重启或关闭,RTC 仍能保持正确的时间。
提供时间戳:常用于日志记录、定时任务等。
1.2 RTC 的常见应用
计算机系统:用于存储系统时间,即使断电也能保持时间同步。
物联网(IoT)设备:需要定时唤醒设备执行任务或进行数据记录。
工业控制:定时触发某些操作,如设备自检、数据采集等。
嵌入式系统:用于时间同步、定时触发事件等。
智能家居:自动控制家电设备的开关,如定时开关灯、空调等。
1.3 RTC 的组成
一个典型的 RTC 主要由以下部分组成:
- 振荡器(Oscillator):一般是 32.768 kHz 的石英晶振,用于提供精确的时间基准。
- 计时寄存器:存储当前的秒、分钟、小时、日期、月份和年份等信息。
- 备用电源:独立的纽扣电池(如 CR2032),即使主系统掉电,RTC 仍能继续计时。
- I²C/SPI 通信接口:与主系统(MCU、CPU)进行通信,获取时间或设置时间。
2. 适配过程
RTC 部分需要移植的主要为一个 I2C 设备(HYM8563TS, 是一款低功耗CMOS实时时钟/日历芯片,由武汉昊昱公司设计生产), 原理图如下:
从控制角度看,RTC无非是带有一个中断引脚的I2C设备。
从 PCB 中可以看出, 一个中断引脚和 I2C 引脚
2.1 设备树配置
&i2c6 {status = "okay";pinctrl-names = "default";pinctrl-0 = <&i2c6m0_xfer>;hym8563: hym8563@51 {compatible = "haoyu,hym8563";reg = <0x51>;#clock-cells = <0>;clock-frequency = <32768>;clock-output-names = "hym8563";pinctrl-names = "default";pinctrl-0 = <&rtc_int>;# gpio默认配置为上拉,使能低电平中断。interrupt-parent = <&gpio0>;interrupts = <RK_PB0 IRQ_TYPE_LEVEL_LOW>;wakeup-source;};
};&pinctrl {hym8563 {rtc_int: rtc-int {# 通过芯片手册可以看出, 中断引脚需要默认上拉.rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>;};};
}
3. 测试
3.1 系统内RTC功能测试
root@LPA3588:/dev# dmesg | grep rtc
[ 9.673251] rockchip-drm display-subsystem: [drm] Cannot find any crtc or sizes
[ 9.704414] rockchip-drm display-subsystem: [drm] Cannot find any crtc or sizes
[ 9.731203] rockchip-drm display-subsystem: [drm] Cannot find any crtc or sizes
[ 9.737375] rtc-hym8563 6-0051: rtc information is valid
[ 9.742877] rtc-hym8563 6-0051: registered as rtc0
[ 9.743916] rtc-hym8563 6-0051: setting system clock to 2000-01-01T00:00:23 UTC (946684823)
root@LPA3588:/dev# hwclock -r
2000-01-01 00:48:18.485166+00:00
root@LPA3588:/dev# hwclock --set --date "2025-02-05 15:30:00"
root@LPA3588:/dev# hwclock -r
2025-02-05 15:30:03.097318+00:00
root@LPA3588:/dev# ll rtc*
lrwxrwxrwx 1 root root 4 Sep 8 09:58 rtc -> rtc0
crw------- 1 root root 250, 0 Sep 8 09:58 rtc0
内核配置中可以看出RTC初始化成功。并且可以设置以及同步系统时间。
正常!