16. RTC¶
RTC全称为Real Time Clock,是一个专门用来记录时间的硬件设备,一般可以集成在soc内部,或者选择外挂,通过i2c与其通信。
那为什么会需要RTC,因为Linux的系统时间(也就是我们常说的wall time)只能在系统运行时使用,系统关机时间就丢了,而RTC可以在系统关闭后,依靠外部电池或其他supply继续工作,这才将时间保存下来。
LubanCat系列板卡需要RTC电池才能使用RTC的功能,RTC电池的选型如下:
购买链接(仅供参考): (淘宝野火)CR1220锂电池带线带插头电池RTC记忆时钟后备电池3v
购买链接(仅供参考): (淘宝)CR2032联想 IBM笔记本台式机主板电池3V纽扣COMS 带线 2针
购买链接(仅供参考): (淘宝)原装KTS CR2032纽扣电池3V笔记本遥控器台式机主板电脑锂电池带线
注解
链接仅供参考,如需要,请自行根据上述链接的关键词搜索购买。
接线的正负极如下:
如果线序不对,可以使用镊子调整RTC电池的接口:
16.1. rk809¶
RK809是一款高性能PMIC,RK809 集成5个大电流DCDC、9个LDO、2个开关SWITCH、 1个RTC、1个高性能CODEC、可调上电时序等功能。
LubanCat系列板卡均使用RK809作为pmic使用,但是真正使用RK809的RTC功能的有:
LubanCat-1(V1、V2)
LubanCat-2(V1、V2)
LubanCat-2N(V1、V2)
以上板卡从V3版本开始均使用外部低功耗RTC。
注意
rk809的内部rtc电流在30uA,外置的rx8010芯片的电流在0.8uA,相差整整37.5倍,如果使用rk809的内部rtc电池很快就会没电,如果是需要长时间使用rtc的场景,建议使用外部rtc。
16.2. rx8010¶
RX8010是爱普生推出的一款低功耗、高性能的实时时钟(RTC)芯片,由于其高精度、低功耗和多功能特性, 广泛应用于智能家居设备、工业控制器、物联网设备等各种需要精确时间信息的嵌入式系统中。
使用rx8010的RTC的有:
LubanCat-1IO
LubanCat-2IO
16.3. HYM8563S/BM8563¶
HYM8563S和BM8563都是低功耗、高性能的实时时钟(RTC)芯片,芯片具有一个可编程的时钟输出、一个中断输出、一个掉电检测器以及片内电源复位功能, 还支持设置闹钟和周期性报警,可根据用户设定的时间间隔发出报警信号。
使用HYM8563S/BM8563的有:
LubanCat-1(V3)
LubanCat-1h
LubanCat-1hs
LubanCat-2(V3)
LubanCat-2n(V3)
16.4. 使用板卡上的RTC¶
以上带有外部rtc的板卡,默认关闭了内部rk809的rtc,默认使能外部rtc;不带有rx8010的板卡默认使能了内部rk809的rtc。
Linux提供了三种用户空间调用接口,在板卡中对应的路径为:
SYSFS接口:/sys/class/rtc/rtc0/
PROCFS接口: /proc/driver/rtc
IOCTL接口: /dev/rtc0
SYSFS接口:
1 2 3 4 | root@lubancat:~# cat /sys/class/rtc/rtc0/date
2023-06-19
root@lubancat:~# cat /sys/class/rtc/rtc0/time
03:15:22
|
PROCFS接口:
1 2 3 4 5 6 7 8 9 10 11 12 | root@lubancat:~# cat /proc/driver/rtc
rtc_time : 07:06:56
rtc_date : 2023-06-19
alrm_time : 03:18:50
alrm_date : 2023-06-19
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接口:
1 2 | 可以参考内核文档作为例子
tools/testing/selftests/timers/rtctest.c
|
16.5. 同步时间¶
1 2 3 4 | date //修改系统时钟,具体命令使用可以man下
hwclock -s //将硬件时间同步到系统时间
hwclock -w //将系统时间同步到硬件时间
timedatectl //显示系统时间等
|
一般同步时间步骤为:
1 2 3 4 5 6 7 8 | #手动设置时间,设置的时间不能太“远古”,建议设置当前时间或者近期时间
sudo date -s "2026-01-27 08:00:00"
#系统时间同步到硬件rtc
sudo hwclock -w
#硬件rtc同步到系统
sudo hwclock -s
|
以上手动设置时间或者网络同步时间后,-w将系统时间写入到硬件rtc,-s再将rtc时间写回系统,这样每次重启板卡都会进行rtc时间同步到系统时间。
16.6. 外挂RTC模块¶
提示
如果使用不带rx8010板卡的用户也希望使用低功耗的外部rtc,可以通过40pin外挂一个rtc。
16.6.1. 40pin外挂rtc¶
推荐使用pcf8563或者ds1307外部rtc模块。
购买链接(仅供参考):(淘宝)PCF8563T芯片 RTC实时时钟模块
购买链接(仅供参考):(淘宝)DS1307时钟模块 RTC实时时钟模块
16.6.1.1. 更新内核deb包¶
野火在3月20日更新了pcf8563、ds1307模块的设备树插件,如果是比这个日期旧的镜像,需要更新内核,如果是比这个日期更加新的镜像,则不需要更新内核。
1 2 3 4 5 6 7 8 | #更新数据库
sudo apt update
#更新内核
sudo apt install linux-image-4.19.232 linux-headers-4.19.232
#安装完成,重启即可
sudo reboot
|
16.6.1.2. 修改设备树插件¶
以鲁班猫1为例,鲁班猫1板卡40pin上总共有3个i2c,分别是I2C3_M0、I2C3_M1、I2C5_M0,其中I2C3_M0、I2C3_M1是同一功能的不同组引脚不能同时开启。
使用其中一个不冲突的I2C,修改/boot/uEnv/uEnv.txt配置文件,将对应的I2C取消注释,如下图使用I2C3_MO,然后保存重启板卡。
以上rtc插件包含了pcf8563、ds1307模块,接这两个型号中的任何一个都可以。
16.6.1.3. 实物连接¶
以鲁班猫1使用I2C3_M0为例。
板卡 |
模块 |
|---|---|
3.3V |
VCC |
SCL |
SCL |
SDA |
SDA |
GND |
GND |
其余引脚不接 |
pcf8563实物连接图如下:
ds1307实物连接图如下:
16.6.1.4. 测试¶
测试方法和前面使用rk809和rx8010方法一致,此处不再赘述,请参考前面讲述的方法。
