记录RK3506上挂载DS1307N RTC实时时钟芯片
一、芯片差异
原厂EVB底板使用的RTC芯片是ISL1208(原理图上标着RS4C1338),接到i2c0上,是一个低功耗RTC芯片,供电3.3v

目前库存RTC芯片是DS1307N使用的是5V电压,这个型号的驱动内核是支持的
焊接上去后没加设备树i2cdetect -y 0可以识别到设备,但是dmesg | grep rtc 看到驱动加载成功,但是读取时钟数据失败
root@rk3506-buildroot:/# i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@rk3506-buildroot:/#
root@rk3506-buildroot:~# dmesg | grep -i rtc
[ 1.238264] rtc-ds1307 2-0068: registered as rtc0
[ 1.238548] rtc-ds1307 2-0068: hctosys: unable to read the hardware clock
[ 12.152508] rockchip-vop ff600000.vop: [drm:vop_crtc_atomic_enable] Update mode to 1024x600p49, type: 16
root@rk3506-buildroot:~#
怀疑是晶振未起振,量了之前使用DS1307N芯片产品的晶振两端对地电压在0.6v这样,但是我这个一端是1.6v,另外一端是0v,
换了晶振还是不行,看了RTC芯片数据手册发现供电需要5V电压,EVB板子是3v3,于是将芯片拆下,将电源引脚翘起来飞线到5V成功读取日期时间
再次量了晶振对地电压,正常工作时一端对地0.665v,另外一端0.632v
二、kernel驱动配置

CONFIG_RTC_DRV_DS1307=y
三、设备树配置
&i2c0 {
clock-frequency = <400000>;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&rm_io25_i2c0_scl &rm_io24_i2c0_sda>;
rtc_RS4C1339: rtc@68 {
compatible = "dallas,ds1339";
reg = <0x68>;
status = "okay";
};
// rtc_DS1307: rtc@68 {
// compatible = "dallas,ds1307";
// reg = <0x68>;
// status = "okay";
// };
};
下面屏蔽部分用了之后开机读取不到时间和上面的dmesg一样,怀疑驱动有差异,这块后面继续研究
四、成功读取日期时间日志
[ 1.234965] rtc-ds1307 0-0068: registered as rtc0
[ 1.235295] rtc-ds1307 0-0068: setting system clock to 2000-01-01T00:00:00 UTC (946684800)
时间设置相关命令
date -s "2026-03-12 9:13:00"//设置系统时间
hwclock -w //系统时间写入RTC
hwclock -r //读取RTC时间
hwclock -s //RTC-->系统时间
重新开机后,系统自动将rtc时间设置为系统时间


浙公网安备 33010602011771号