一.简介
实时时钟的缩写是RTC(Real_Time Clock)。RTC 是集成电路,通常称为时钟芯片。 实时时钟芯片是日常生活中应用最为广泛的消费类电子产品之一。 它为人们提供精确的实时时间,或者为电子系统提供精确的时间基准,目前实时时钟芯片大多采用精度较高的晶体振荡器作为时钟源。 有些时钟芯片为了在主电源掉电时,还可以工作,需要外加电池供电。
二.硬件原理图
从原理图可知,外部RTC使用的是外部纽扣电池供电,挂载在i2c3上,使用外部晶振作为时钟源
三.DTS文件中增加i2c3节点的配置
&i2c3{
pinctrl-names = "default";
pinctrl-0 = <&i2c3m0_xfer>;
status = "okay";
hym8563: hym8563@51 {
compatible = "haoyu,hym8563";
reg = <0x51>;
interrupt-parent = <&gpio0>;
interrupts = <RK_PD3 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&rtc_int>;
#clock-cells = <0>;
clock-frequency = <32768>;
clock-output-names = "xin32k";
};
};
四.内核添加对hym8563的支持
先cd到kernel目录下,然后执行make menuconfig打开configuration,如下图所示:
一般内核添加了对hym8563的支持,所以不需要修改configuration。如果内核没有添加支持,选中Haoyu Microelectronics HYM8563,然后键盘输入‘y’即可选中。
五.调试
[root@RK356X:/]# i2cdetect -l
i2c-6 i2c DesignWare HDMI I2C adapter
i2c-4 i2c rk3x-i2c I2C adapter
i2c-2 i2c rk3x-i2c I2C adapter
i2c-0 i2c rk3x-i2c I2C adapter
使用i2cdetect -l 查看rk3568上的iic设备,发现并没有iic3。
解决:查看dts发现
&i2c3{
status = "disabled";
};
删除掉这个多余的iic3。
[root@RK356X:/]# i2cdetect -l
i2c-3 i2c rk3x-i2c I2C adapter
i2c-6 i2c DesignWare HDMI I2C adapter
i2c-4 i2c rk3x-i2c I2C adapter
i2c-2 i2c rk3x-i2c I2C adapter
i2c-0 i2c rk3x-i2c I2C adapter
可以找到iic3.
再执行i2cdetect -y 3检测hym8563是否在i2c总线上:
[root@RK356X:/]# i2cdetect -y 3
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
执行结果表示i2c3总线上有个地址为0x51的从设备。
说明RTC已经挂载在IIC3上面了。
查看rtc加载日志:
六.RTC时间设置:
hwclock查看RTC时间
date -s "2023-07-21 16:00:00"
显示时间
测试:
在不接外部供电的情况下,长时间放置,查看RTC实时时钟的时间是否变化很大。