文章目录
前言
实时时钟的缩写是RTC(Real_Time Clock)。RTC 是集成电路,通常称为时钟芯片。 实时时钟芯片是日常生活中应用最为广泛的消费类电子产品之一。 目前实时时钟芯片大多采用精度较高的晶体振荡器作为时钟源,有些主板时钟芯片为了在主电源掉电时,还可以工作,一般添加额外电池供电,本文主要介绍在RK3568平台调试RTC时芯片ISL1208的开发记录
一、RTC部分原理图
ISL1208使用i2c接口与cpu进行通信,RK3568通过i2c接口完成对RTC时钟芯片的配置,以及数据读写操作,部分原理图如下所示:
二、设备树配置
根据原理图,RK3568 CPU通过i2c3完成对rtc时钟芯片的配置,通过查询rtc时钟芯片手册,可以得知RTC ISL1208芯片i2c地址为0x6f,我们使用官方sdk包进行配置,打开设备树文件vi /rk356x_linux_220118/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10.dtsi,设备配置节点如下所示:
&i2c3 {
status = "okay";
isl1208: isl1208@6f {
status = "okay";
compatible = "isil,isl1208";
reg = <0x6f>;
pinctrl-names = "default";
pinctrl-0 = <&rtc_int>;
interrupt-parent = <&gpio0>;
interrupts = <RK_PD3 IRQ_TYPE_LEVEL_LOW>;
};
};
&pinctrl {
rtc {
rtc_int: rtc-int {
rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;
};
};
};
主要配置部分主要包含以下几点:
1、i2c3控制器使能;
2、rtc时钟芯片i2c设备地址配置;
3、中断脚配置,该模块芯片中断脚主要用作定时、报警等功能,在本文不做介绍。
三、内核配置
内核配置主要包含i2c控制器驱动、rtc时钟芯片驱动配置等,官方sdk已经包含ISL1208驱动,我们只需要配置编译该模块驱动即可,驱动路径如下所示:
rk356x_linux_220118/kernel/drivers/rtc/rtc-isl1208.c
驱动配置:> Device Drivers > Real Time Clock >Intersil ISL1208
注意点:
由于RK809内部集成了rtc功能,且sdk默认打开了rtc时钟配置,故需要设置系统启动读取ISL1208时钟芯片时钟作为系统时间,配置节点如下:
> Device Drivers > Real Time Clock > (RTC1) RTC used to set the system time
配置完成编译kernel即可。
四、设备信息查看
1、dmesg查看ISL1208节点信息,如下rtc时钟芯片驱动加载成功,时间读取正常:
2、设备节点查看,rtc0位RK809 rtc设备节点、rtc1为1208时钟芯片设备节点,系统默认读取rtc1时间作为系统时钟:
3、i2c设备节点扫描,i2c3总线上扫描到i2c设备,UU表示设备被系统占用:
五、RTC时间读写设置
1、rtc时间设置。设置时间到系统,并使用hwclock同步rtc时钟芯片,命令如下所示:
date -s "2022-11-09 21:51:00"
hwclock -w -u -f /dev/rtc1
2、rtc时间读取。使用hwclock读取rtc时钟芯片时间数据,命令如下所示:
hwclock -r -u -f /dev/rtc1
总结
以上就是今天要讲的内容,包含ISL1208时钟芯片驱动配置,模块数据读写等。