31. 外部RTC使用

EBF6ull Pro开发板使用内部的RTC,断电时需要纽扣电池供电,而且耗电较快也不是很准,为此我们可以使用外置的 RTC电路。本章将简单讲解一种外置RTC的方法。

31.1. RTC硬件

rtc原理图

硬件电路参考如上,使用外置RTC芯片RX8010SJ,只使用时钟功能,通过i2c读取,IRQ1和IRQ2不用接。

31.2. RTC驱动增加

使用这个外置时钟,需要内核加下驱动,可以改下我们内核的配置文件(npi_v7_defconfig), 增加CONFIG_RTC_DRV_RX8010=y配置,然后重新编译,替换内核即可,内核编译替换可以参考下: 内核编译

31.3. RTC设备树插件

可以修改设备树或者插件一个独立的设备树插件,下面使用设备树插件添加

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 /dts-v1/;
 /plugin/;
 #include "imx6ul-pinfunc.h"
 #include "dt-bindings/gpio/gpio.h"

 / {
     fragment@0 {
         target= <&i2c2>;
         __overlay__{
             rx8010: rx8010@32 {
                 compatible = "epson,rx8010";
                 reg = <0x32>;
                 status = "okay";
             };
         };
     };
 };

重新编译下设备树插件,可以参考下: 设备树插件编译加载

获取到设备树插件文件rtc-rx8010.dtbo,使用新的镜像,需要传输到开发板的/usr/lib/linux-image-4.19.35-imx6/overlays/目录下, 然后在/boot/uEnv.txt文件中开启设备树插件,即加一行:

1
 dtoverlay=/usr/lib/linux-image-4.19.35-imx6/overlays/rtc-rx8010.dtbo

保存uEnv.txt文件后,使用sync,然后再重启下系统。

31.4. RTC测试

使用命令安装下i2c工具

sudo apt install i2c-tools -y

然后使用i2cdetect命令查看i2c2总线上的设备,可以看到设备显示UU, 说明是被其他驱动占用(这里是RTC的驱动使用这个设备)

i2c总线查看rtc

也可以使用命令查看下设备文件,

rtc设备文件查看

使用命令sudo hwclock -f /dev/rtc0,读取rtc的时间,这里之前同步了时间

时间查看

一些常用的命令:

date          //修改系统时钟,具体命令使用可以man下
hwclock -s    //将硬件时间同步到系统时间
hwclock -w    //将系统时间同步到硬件时间
timedatectl   //显示系统时间等