16. RTC

RTC全称为Real Time Clock,是一个专门用来记录时间的硬件设备,一般可以集成在soc内部,或者选择外挂,通过i2c与其通信。

那为什么会需要RTC,因为Linux的系统时间(也就是我们常说的wall time)只能在系统运行时使用,系统关机时间就丢了,而RTC可以在系统关闭后,依靠外部电池或其他supply继续工作,这才将时间保存下来。

LubanCat-RK356x系列板卡需要RTC电池才能开启RTC的功能,RTC电池的选型如下:

注解

链接仅供参考,如需要,请自行根据上述链接的关键词搜索购买

接线的正负极如下:

未找到该图片

如果线序不对,可以使用镊子调整RTC电池的接口:

未找到该图片

16.1. rk809

RK809是一款高性能PMIC,RK809 集成5个大电流DCDC、9个LDO、2个开关SWITCH、 1个RTC、1个高性能CODEC、可调上电时序等功能。

LubanCat-RK356x系列板卡均使用RK809作为pmic使用,但是真正使用RK809的RTC功能的只有LubanCat-1,LubanCat-1N,LubanCat-2,LubanCat-2N

16.2. rx8010

LubanCat-2金手指底板和BTB底板使用的RTC是外置的rx8010芯片,rx8010有使用简单、标准SOP8封装和高性价比

注意

rk809的内部rtc电流在30uA,外置的rx8010芯片的电流在0.8uA,相差整整37.5倍,如果使用rk809的内部rtc电池很快就会没电,如果是需要长时间使用rtc的场景,建议使用外部rtc。

16.3. 使用板卡上的RTC

以上带有rx8010的板卡,默认关闭了内部rk809的rtc,默认使能rx8010,不带有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
13
 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
 root@lubancat:~#

IOCTL接口:

1
2
可以参考内核文档作为例子
tools/testing/selftests/timers/rtctest.c

16.4. 一些常用的命令

1
2
3
4
5
6
7
8
9
 date          //修改系统时钟,具体命令使用可以man下
 hwclock -s    //将硬件时间同步到系统时间
 hwclock -w    //将系统时间同步到硬件时间
 timedatectl   //显示系统时间等

 sudo date -s "2023-08-14 08:00:00"  //手动设置时间
 sudo  hwclock -w     //系统时间同步到硬件rtc
 sudo  hwclock -s    //硬件rtc同步到系统
 #以上手动设置时间或者网络同步时间后,-w将系统时间写入到硬件rtc,-s再将rtc时间写回系统,这样每次重启板卡都会进行rtc时间同步到系统时间。

16.5. 外挂RTC模块

提示

如果使用不带rx8010板卡的用户也希望使用低功耗的外部rtc,可以通过40pin外挂一个rtc。

16.5.1. 40pin外挂rtc

推荐使用pcf8563或者ds1307外部rtc模块。

16.5.1.1. 更新内核deb包

野火在3月20日更新了pcf8563、ds1307模块的设备树插件,如果是比这个日期旧的镜像,需要更新内核deb包,如果是比这个日期更加新的镜像,则不需要更新内核deb包。

将以上两个deb包传到板卡,然后执行 sudo dpkg -i *.deb ,完成后重启板卡即可。

16.5.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.5.1.3. 实物连接

以鲁班猫1使用I2C3_M0为例。

板卡

模块

3.3V

VCC

SCL

SCL

SDA

SDA

GND

GND

其余引脚不接

pcf8563实物连接图如下:

未找到该图片

ds1307实物连接图如下:

未找到该图片

16.5.1.4. 测试

测试方法和前面使用rk809和rx8010方法一致,此处不再赘述,请参考前面讲述的方法。