Linux内核编程(二十)RTC子系统一驱动rx8010

本文目录

  • 一、基础知识点
    • 1.什么是RTC?
    • 2. RTC方案
    • 3. 电路原理图
  • 二、RTC芯片(RX8010)移植
  • 三、关于时间的一些命令
  • 四、应用层使用
    • 1. 使用RTC驱动
    • 2. 使用time.h库(额外知识点)

  

在这里插入图片描述

一、基础知识点

1.什么是RTC?

   RTC,即实时时钟(Real-Time Clock),是一种用于保持精确时间的电子时钟模块。它能够提供当前的秒、分、时、日、月和年信息,并且通常具有独立的电池供电功能。这意味着即使设备断电,RTC模块也可以继续记录时间,确保系统在重新启动时获得正确的时间数据。
   RTC模块广泛应用于电子时钟、计算机、移动设备、家用电器等场景。例如,在计算机系统中,RTC能够保证系统时间在断电状态下不会丢失;在电子门禁和安防系统中,RTC可实现基于时间的事件控制和记录。这种可靠性使得RTC在生活和工业中均成为不可或缺的组件。

2. RTC方案

(1)内部RTC
在这里插入图片描述

(2)外部RTC
在这里插入图片描述

3. 电路原理图

在这里插入图片描述
分析:
(1)RTC供电路径
当3.3V主电源存在时,RTC芯片通过路径1和路径2同时获得供电,主要是3.3V供电。
当3.3V断电后,RTC芯片通过路径2由电池(CR1220)供电。路径2是备用电池供电路径。

(2)二极管的选择
补充:什么是电流泄露?
   电流泄漏是指电流在不应该流过的路径上产生的微小电流。在二极管中,当二极管在反向偏置的情况下(即反向电压加在二极管上)也会有极小的电流通过,这种电流称为反向泄漏电流。虽然这个电流一般很小,但在低功耗设计中,泄漏电流会逐渐消耗电池电量,影响系统的待机寿命。
   为了减少电流损耗和提高电源切换效率,路径1的二极管应具有较低的正向压降(VF)和低泄漏电流(通常使用肖特基二极管,因为它们的正向压降低且泄漏电流小)。这样可以确保在3.3V断电时,电池供电能顺利切换到RTC芯片,并且尽量减少3.3V电源供电时的电流泄漏,从而延长电池寿命。

(3)Vcc_RTC=BAT1-D3
   RTC芯片的Vcc端电压为BAT1(电池电压)减去二极管D3的正向导通电压。因此,选用导通电压较小的二极管能够使RTC芯片在电池供电状态下获得较高的电压,使其正常工作。RTC芯片要求电源电压为 1.6v到5.5v。

二、RTC芯片(RX8010)移植

  1. 配置设备树(device部分)
    这里rx8010芯片使用iic与主控通信,具体挂载到那个iic控制器上可以自行定义(如果原理图已经设计好,就按原理图上来)。
&i2c5 {status = "okay";rx8010: rx8010@32 {compatible = "epson,rx8010";reg = <0x32>;status = "okay";#clock-cells = <0>;};
};
  1. 图形化配置driver部分
    在源码目录下使用export ARCH=arm64,再使用make menuconfig打开图形配置界面。具体分为下面两种情况。
    (1)源码中有rx8010的驱动程序。
    Device Drivers —>
       [★]Real Time Clock —>
          [★] Epson RX8010SJ
          [ ] Rockchip RK805/RK808/RK809/RK816/RK817/RK818 RTC
    (2)源码中没有rx8010的驱动程序。
       需要问厂家要一下源码,然后自己写一个kconfig和Makefile文件,来配置图形界面就行。配置教程。

三、关于时间的一些命令

   在 Linux 系统中,存在两个时间:系统时间 和 RTC 时间(硬件时钟时间)。这个双时间架构允许系统在断电情况下仍能保持准确的时间,并且在某些特殊用途场景(如嵌入式系统或实时应用)中,可以独立管理 RTC 时间和系统时间。

  1. data命令(查看系统时间)
       系统时间是由内核维护的时间,它通常从 RTC 获取初始值,并在系统运行期间由操作系统维护和更新。系统时间会随着操作系统的运行而不断更新,即使系统时间偏离了 RTC 时间。
date        //查看系统时间
date -s "YYYY-MM-DD HH:MM:SS"  // 设置系统时间
date -u       //将系统时间以UTC标准显示
  1. hwclock命令(查看硬件时间)
       RTC 是系统主板上一个独立的实时时钟模块,通常带有电池,因此即使系统断电或重启也能保持时间。它是系统启动时的时间源,系统启动时会从 RTC 读取时间,并将其复制到系统时间。
hwclock          //查看 RTC 时间
hwclock -w       //将系统时间写入 RTC 时间
hwclock -s       //将 RTC 时间同步到系统时间

我们通过上面的学习了解到系统在启动时获取RTC时间,并将其设置为系统时间,那为什么我们使用命令查看时,两个时间不一致呢?
   答:这是因为时间标准不一样,UTC(协调世界时)是全球公认的时间标准,CST(中国标准时间),即北京时间,是东八区时间,相当于 UTC+8。使用上面的命令一个获取的是北京时间,一个是UTC时间。

四、应用层使用

1. 使用RTC驱动

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/rtc.h>
#include <time.h>
#include <errno.h>int main(int argc, char *argv[]) {int fd;int ret;struct rtc_time tm;fd = open("/dev/rtc0", O_RDONLY);  //硬件上只有一个,常用的就是rtc0节点if (fd < 0) {perror("open error");return -1;}ret = ioctl(fd, RTC_RD_TIME, &tm);if (ret < 0) {perror("RTC_RD_TIME error");close(fd);return -1;}printf("RTC time is %d-%02d-%02d, %02d:%02d:%02d\n",tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,tm.tm_hour, tm.tm_min, tm.tm_sec);close(fd);return 0;
}

2. 使用time.h库(额外知识点)

#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>/*
struct tm {int tm_sec;	//Seconds (0-60) int tm_min;	//Minutes (0-59) int tm_hour;	// Hours (0-23) int tm_mday;	// Day of the month (1-31) int tm_mon;	// Month (0-11) int tm_year;	// Year - 1900 int tm_wday;	// Day of the week (0-6, Sunday = 0) int tm_yday;	// Day in the year (0-365, 1 Jan = 0) int tm_isdst;	// Daylight saving time };
*/
int main(int argc,char **argv)
{time_t tim;struct tm *p;while(1){tim=time(NULL);//获取时间戳 获取1900-1-1到现在的总秒数p=localtime(&tim); //将秒数转换printf("%4d-%d-%d %d:%d:%d\r\n",p->tm_year+1900,p->tm_mon+1,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);sleep(1);  //延迟1s}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GESP4级考试语法知识(贪心算法(一))

海盗船代码&#xff1a; #include<iostream> #include<algorithm> using namespace std; int data[21]; int main() {int n;cin>>n;for(int i0;i<n;i)cin>>data[i];sort(data,datan);int temp0,sum0;for(int i0;i<n;i){tempdata[i];if(temp>…

036 RabbitMQ消息确认 死信队列 延时队列

文章目录 生产者确认模式application.propertiesMessageController.javaMessageConfirmRallback.java 生产者回退模式application.propertiesMessageConfirmRallback.javaMessageController.java 消费者手动确认application.propertiesConsumerAckQueueListener.java 死信队列延…

Unity 插件 - Project窗口资源大小显示

Unity 插件 - Project窗口资源大小显示 &#x1f354;功能&#x1f32d;安装 &#x1f354;功能 &#x1f4a1;.显示Project Assets 和Packages下所有文件的大小&#xff08;右侧显示&#xff09; &#x1f4a1;.统计选中文件夹及其子文件夹下所有文件的大小并显示&#xff08…

Maven 中央仓库地址 mvnrepository.com

下载一些 jar 包驱动&#xff0c;不需用去官网下了&#xff0c;直接去 Maven 中央仓库&#xff0c;高效、简单 Maven 中央仓库地址 https://mvnrepository.com/open-source 我们下期见&#xff0c;拜拜&#xff01;

制作自己的刷题小题库,提高刷题效率

日常刷题 乱序/背题多种模式 组队刷题 查看小组的刷题统计 在线考试 创建考试多人同时答题 ----这是一条分割线----- 土著刷题&#xff0c;是一款可以导入题库的在线刷题学习小&#x1f34a;序&#xff0c;提供一套以【搭建题库-组建小组-刷题练习-在线考试】为中心的完整服务…

WPF在MVVM模式下怎么实现导航功能

在mvvm的模式下wpf通过frame实现页面跳转_哔哩哔哩_bilibili 视频讲解同步可观看 如下图&#xff0c;我们要实现点击左侧的菜单&#xff0c;在右侧展示不同的页面 实现代码如下&#xff1a; 一、如何从主窗体跳转到页面。 1、在mainwindow.xaml的菜单栏代码里加入如下代码 …

VSCode中python插件安装后无法调试

问题 VSCode中python插件安装后无法调试&#xff0c;如下&#xff0c;点击调试&#xff0c;VScode中不报错&#xff0c;也没有调试 解决方法 1、查看配置 打开所在路径 2、拷贝 将整个文件夹拷贝到vscode默认路径下 3、问题解决 再次调试&#xff0c;可以正常使用了…

光模块基础知识

1. 光模块的封装 光模块是光收发模块的简称&#xff0c;主要根据不同的外型来区分&#xff0c;而在同一外型中&#xff0c;又有着多种规格&#xff1b;在数据通信领域&#xff0c;最常见的光模块&#xff08;根据外型区分&#xff09;分别是SFF、GBIC、SFP、和XFP、QSFP 、XEN…

【GPTs】MJ Prompt Creator:轻松生成创意Midjourney提示词

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;MJ Prompt Creator主要功能适用场景优点缺点 &#x1f4af; 小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 任务说明 您是一款为幻灯片工…

uniapp路由与页面跳转详解:API调用与Navigator组件实战

UniApp路由与页面跳转详解&#xff1a;API调用与Navigator组件实战 路由 uniapp页面路由为框架统一管理&#xff0c;开发者需要在page.json里面配置每个路由页面的路径及页面样式。 路由跳转 uniapp有两种页面路由跳转方式&#xff0c;调用API跳转和navigator组件跳转。 调…

机器学习 笔记

特征值提取 字典 from sklearn.extaction import DictVectorizer mDictVectorizer(sparseFalse)#sparse是否转换成三元组形式 data[], #传入字典数据 data1model.fit_transform(data) #使用API 英文特征值提取 from sklearn.feature_extraction.text import CountVe…

【智谱开放平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

如何搭建自动化测试框架

软件测试资料领取&#xff1a;[内部资源] 想拿年薪40W的软件测试人员&#xff0c;这份资料必须领取~ 软件测试面试刷题工具&#xff1a;软件测试面试刷题【800道面试题答案免费刷】 关于测试框架的好处&#xff0c;比如快速回归提高测试效率&#xff0c;提高测试覆盖率等这里…

学Linux的第八天

目录 管理进程 概念 程序、进程、线程 进程分类 查看进程 ps命令 unix 风格 bsd风格 GNU风格 top命令 格式 统计信息区 进程信息区&#xff1a;显示了每个进程的运行状态 kill命令 作用 格式 管理进程 概念 程序、进程、线程 程序&#xff1a; 二进制文件&…

使用Matlab建立决策树

综述 除了神经网络模型以外&#xff0c;树模型及基于树的集成学习模型是较为常用的效果较好的预测模型。我们以下先构建一个决策树模型。 决策树算法的优点如下&#xff1a;1、 决策树易于理解和实现&#xff0c;用户在学习过程中不需要了解过多的背景知识&#xff0c;其能够…

安卓主板_基于联发科MTK MT8788平台平板电脑方案_安卓核心板开发板定制

联发科MT8788安卓核心板平台介绍&#xff1a; MTK8788设备具有集成的蓝牙、fm、wlan和gps模块&#xff0c;是一个高度集成的基带平台&#xff0c;包括调制解调器和应用处理子系统&#xff0c;启用LTE/LTE-A和C2K智能设备应用程序。该芯片集成了工作在2.0GHz的ARM Cortex-A73、最…

思科模拟器路由器配置实验

一、实验目的 了解路由器的作用。掌握路由器的基本配置方法。掌握路由器模块的使用和互连方式。 二、实验环境 设备&#xff1a; 2811 路由器 1 台计算机 2 台Console 配置线 1 根网线若干根 拓扑图&#xff1a;实验拓扑图如图 8-1 所示。计算机 IP 地址规划&#xff1a;如表…

Python酷库之旅-第三方库Pandas(206)

目录 一、用法精讲 961、pandas.IntervalIndex.mid属性 961-1、语法 961-2、参数 961-3、功能 961-4、返回值 961-5、说明 961-6、用法 961-6-1、数据准备 961-6-2、代码示例 961-6-3、结果输出 962、pandas.IntervalIndex.length属性 962-1、语法 962-2、参数 …

【前端】CSS入门笔记+案例

目录 CSS css 的语法 1.字体大小 font-size 2.背景颜色 backgrount-color 3.背景的宽高 w h css的三种引入方式 1.内嵌式 2.外联式 3.行内式 选择器 1.标签选择器 2.类选择器 3.id选择器 4.通配符选择器 字体和文本样式 1.字体样式 1.1字体大小 font-size 1.…

java对接微信公众号API,实现扫码关注公众号,触发多条消息回复

一、准备工作 1. 依赖库 这里使用的是binarywang的Wxjava 库&#xff0c;源码地址&#xff1a;https://github.com/binarywang/WxJava。截止发稿前最新版本是4.6.7.B&#xff0c;我采用的是4.5.0版本。 <dependency><groupId>com.github.binarywang</groupId…