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 仍能繼續計時。
- I2C/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初始化成功。并且可以設置以及同步系統時間。
正常!