记录RK3506上挂载DS1307N RTC实时时钟芯片

一、芯片差异

原厂EVB底板使用的RTC芯片是ISL1208(原理图上标着RS4C1338),接到i2c0上,是一个低功耗RTC芯片,供电3.3v
image

目前库存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驱动配置

image
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时间设置为系统时间
image

posted @ 2026-03-11 22:11  上善若淼  阅读(3)  评论(0)    收藏  举报