RTC指实时时钟,主要作用是为电子设备提供精准的时间基准。RTC分为两类,片内RTC和外部(挂)RTC。
• 内部RTC
集成在芯片内部,RTC模块和时钟配置系统一般处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。
• 外部RTC
独立于主芯片的IC,也称为时钟芯片。通常使用独立电源,一般为纽扣电池。在系统断电后仍能自动运转,维系统更新实时时间。当系统上电后,通过相应的接口从外部RTC读取当前时间,用于同步系统时间。
本文介绍在基于MT76x8的Openwrt系统下增加外部RTC(EPSON,RX8010SJ)及相应的驱动支持。
一个基于I2C串行接口的系统实时时钟模块,内部包含一个32.768的晶体振荡器。提供包括但不限于秒、分、时、星期、日、月、年等时间基准。
既然是基于I2C串行接口的模块,那么第一步就需要在系统中添加I2C支持。
make menuconfig
Kernelmodules --->
I2Csupport --->
<*> kmod-i2c-core
<*> kmod-i2c-algo-bit
<*> kmod-i2c-gpio
<*> kmod-i2c-mt7628
Save && Exit.
make kernel_menuconfig
kernel_menuconfig
DeviceDrivers --->
<*> I2C support --->
<*> I2C device interface
I2CHardware Bus support --->
<*> Ralink I2C Controller
<*> MT7621/MT7628 I2C Controller
&i2c {
status = "okay";
};
同时需要注意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设备:
查看时间寄存器:
但这种使用非常复杂,接下来需要添加EPSONRX8010SJ相关的驱动,以便使用hwclock更简单的访问时钟芯片。
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.
&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指令查看当前系统时间。
今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多无线射频模块和无线通信技术资料,感兴趣的小伙伴可以登录我们的亿佰特官网进行了解,也可以直接拨打400电话咨询技术专员!
相关阅读:
7 X 24 销售服务热线
4000-330-990深圳办事处柯经理:18218726658 南京办事处葛经理:17626012283
成都总部销售经理:
秦 科(无线模块):18884314654 冯子恒(无线模块):18828049434
蔡友银(无线模块):13882211021 葛宇龙(通信设备):19138800613
胡兵(外贸销售经理):18584911141、 sales06@ebyte.com
业务邮箱:support@cdebyte.com 全国销售投诉电话:19934352316
地址:四川省成都市高新西区西区大道199号B5栋(前台座机:028-61543675)
©© 成都亿佰特电子科技有限公司【版权所有】 蜀ICP备13019384号