当前位置: 首页 >应用方案 >技术应用 >

OpenWrt 19.07增加RTC(EPSON, RX8010SJ)驱动详解

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

1  增加RTC驱动

   Save && Exit.

2添加内核支持

make kernel_menuconfig

kernel_menuconfig

   DeviceDrivers --->

       <*> I2C support --->

       <*> I2C device interface

2  增加RTC驱动

       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设备:

3  增加RTC驱动

查看时间寄存器:

4  增加RTC驱动

但这种使用非常复杂,接下来需要添加EPSONRX8010SJ相关的驱动,以便使用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

5  增加RTC驱动

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时可能会出现如下错误:

6  增加RTC驱动

造成以上问题,可能是RTC芯片刚上电时,内部时间非法,及通过驱动读取到非法时间,导致调用驱动时传入参数报错。

7  增加RTC驱动

此时需要通过写入方式,将EPSON RX8010SJ内部寄存器改为合法值,即将实时时钟更新为系统时间。

8  增加RTC驱动

再次通过hwclock指令读取RTC时间,即可成功读取到RTC(EPSON RX8010SJ)时间,如下图:

9  增加RTC驱动

当需要使用RTC更新系统时钟时,即可简单的使用指令:hwclock -s。执行完此指令后,可通过date指令查看当前系统时间。


今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多无线射频模块和无线通信技术资料,感兴趣的小伙伴可以登录我们的亿佰特官网进行了解,也可以直接拨打400电话咨询技术专员!


相关阅读:

1、系统与服务管理器systemd详解

2、基于STM32F103+MAX4003的射频功率表制作

3、Mosquitto详解和基于Mosquitto实现MQTT通讯教程  


亿佰特官网 4000-330-990

https://www.wjx.cn/jq/84863372.aspx