OpenWrt系统下增加RTC(EPSON, RX8010SJ)及驱动详解

亿佰特物联网应用2024-04-07 17:04:26  126

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
0
最新回复(0)