RTC简介
RTC指实时时钟,主要作用是为电子设备提供精准的时间基准。RTC主要分为两类:片内RTC和外部(挂)RTC。
? 内部RTC
集成在芯片内部,RTC模块和时钟配置系统一般处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。
? 外部RTC
独立于主芯片的IC,也称为时钟芯片。通常使用独立电源,一般为纽扣电池。在系统断电后仍能自动运转,为系统更新实时时间。当系统上电后,通过相应的接口从外部RTC读取当前时间,用于同步系统时间。
本文介绍在基于MT76x8的Openwrt系统下增加外部RTC(EPSON,RX8010SJ)及相应的驱动支持。
EPSON,RX8010SJ:
一个基于I2C串行接口的系统实时时钟模块,内部包含一个32.768的晶体振荡器。提供包括但不限于秒、分、时、星期、日、月、年等时间基准。
既然是基于I2C串行接口的模块,那么第一步就需要在系统中添加I2C支持。
第一步:添加I2C支持
1.添加模块支持
make menuconfig
Kernelmodules --->
I2Csupport --->
<*> kmod-i2c-core
<*> kmod-i2c-algo-bit
<*> kmod-i2c-gpio
<*> kmod-i2c-mt7628
Save && Exit.
2.添加内核支持
make kernel_menuconfig
kernel_menuconfig
DeviceDrivers --->
<*> I2C support --->
<*> I2C device interface
I2CHardware Bus support --->
<*> Ralink I2C Controller
<*> MT7621/MT7628 I2C Controller
3.修改dts文件以打开I2C外设功能
&i2c {
status = "okay";
};
同时需要注意I2C引脚是否作他用,如果另作他用,需要调整回来。
4.添加I2C常用工具集
make manuconfig
menuconfig
Base system
Busybox
Miscellaneous Utilities --->
[*] i2cget (5.5 kb)
[*] i2cset (6.7 kb)
[*] i2cdump (7.1 kb)
[*] i2cdetect (7.1 kb)
编译 && 下载到目标板。
经过以上步骤,已经完成了I2C驱动支持,至此已经可以在/dev下看到i2c-0的节点。并且可用通过代码或者指令访问EPSON RX8010SJ芯片,进行简单的设置和读取时间。
查看I2C设备:
查看时间寄存器:
但这种使用非常复杂,接下来需要添加EPSON RX8010SJ相关的驱动,以便使用hwclock更简单的访问时钟芯片。
第二步:添加EPSON RX8010SJ驱动
1.增加内核模组配置
Make kernel_menuconfig增加内核对RTC模块的支持
kernel_menucofig
Device Drivers
Real Time Clock
---Real Time Clock
[*] Set the RTC time based on NTP synchronization
[*] /sys/class/rtc/rtcN(sysfs)
[*] /proc/driver/rtc (procfs for rtcN)
[*] /dev/rtcN (character devices)
<*> Epson RX8010SJ
Save && Exit.
2.修改dts文件,适配芯片
&i2c {
status = "okay";
rtc@32 {
compatible = "epson,rx8010";
reg = <0x32>;
};
};
其中0x32为EPSON RX8010SJ的I2C从机地址,而compatible字段,参考:内核/driver/rtc/rtc-rx8010.c如下:
static const struct of_device_id rx8010_of_match[] = {
{ .compatible = "epson,rx8010" },
};
编译 && 下载到目标板。
第三步:时间读取和写入
通过hwclock指令操作。
在使用hwclock时可能会出现如下错误:
造成以上问题,可能是RTC芯片刚上电时,内部时间非法,及通过驱动读取到非法时间,导致调用驱动时传入参数报错。
此时需要通过写入方式,将EPSON RX8010SJ内部寄存器改为合法值,即将实时时钟更新为系统时间。
再次通过hwclock指令读取RTC时间,即可成功读取到RTC(EPSON RX8010SJ)时间,如下图:
当需要使用RTC更新系统时钟时,可简单的使用指令:hwclock -s。执行完此指令后,可通过date指令查看当前系统时间。
阅读其他文章:
开源啦!多功能开发板EoRa PI,支持Wi-Fi和低功耗蓝牙
全新一代LoRa无线数传电台,自动中继,FEC前向纠错
工业级兼容DIGI XBEE 3 ZigBee3.0无线模块,低功耗且集成自组网功能
2.4G低功耗BLE5.1蓝牙模块,主从一体,更高的兼容性和性价比
转载此文是出于传递更多信息目的。若来源标注错误或侵犯了您的合法权益,请与本站联系,我们将及时更正、删除、谢谢。
https://www.414w.com/read/143405.html