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

embedded/2024/11/14 12:18:12/

本文目录

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

  

在这里插入图片描述

一、基础知识点

RTC_6">1.什么是RTC

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

RTC_9">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。

RTCRX8010_31">二、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时间。

四、应用层使用

RTC_79">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.ppmy.cn/embedded/137196.html

相关文章

Excel 无法打开文件

Excel 无法打开文件 ‘新建 Microsoft Excel 工作表.xlsx",因为 文件格式或文件扩展名无效。请确定文件未损坏&#xff0c;并且文件扩展名与文件的格式匹配。 原因是卸载WPS之后&#xff0c;注册表未修改过来。 重新下载WPS&#xff0c;新建&#xff0c;xls工作表&#x…

Vue3 -- 新组件【谁学谁真香系列6】

Teleport Teleport是什么?–Teleport是一种能够将我们的组件html结构移动到指定位置的技术。 父组件: <template><div calss="outer"><h2>我是App组件</h2><img src="https://z1.ax1x.com/2023/11/19/piNxLo4.jpg" alt=&qu…

Prompt Engineering Guide

文章目录 Prompt Engineering Guide提示工程简介基本概念包含要素要避免不明确的prompt技术关注做了什么&#xff0c;不要关注不做什么角色提示Role Prompting 提示技术CoT生成的知识作为预测的知识库判断的一部分Prompting ChainingToT思维链检索增强RAGPrompt策略分析 提示应…

STM32WB55RG开发(3)----生成 BLE 程序连接手机APP

STM32WB55RG开发----3.生成 BLE 程序连接手机APP 概述硬件准备视频教学样品申请源码下载参考程序选择芯片型号配置时钟源配置时钟树RTC时钟配置RF wakeup时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙设置工程信息工程文件设置结果演示 概述 本项目旨…

探索深度学习的本质

深度学习的本质是利用多层&#xff08;深层&#xff09;的神经网络结构来从数据中学习复杂的模式和特征。其主要特点是具有层次结构&#xff0c;能够实现自动特征提取。非线性、可扩展性和迁移学习能力是深度学习能够处理复杂问题和广泛&#xff08;低成本&#xff09;应用的关…

使用ookii-dialogs-wpf在WPF选择文件夹时能输入路径

在进行WPF开发时&#xff0c;System.Windows.Forms.FolderBrowserDialog的选择文件夹功能不支持输入路径&#xff1a; 希望能够获得下图所示的选择文件夹功能&#xff1a; 于是&#xff0c;通过NuGet中安装Ookii.Dialogs.Wpf包&#xff0c;并创建一个简单的工具类&#xff1a; …

计算机毕业设计Python流量检测可视化 DDos攻击流量检测与可视化分析 SDN web渗透测试系统 网络安全 信息安全 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

金价大跌,特朗普胜选或成导火索

黄金光芒不再&#xff0c;美元强势崛起 上周特朗普赢得美国总统选举后&#xff0c;金价出现了大幅下跌。这标志着市场情绪正在发生转变&#xff0c;投资者开始从避险资产转向风险资产。 为何金价会下跌&#xff1f; 美元走强&#xff1a; 特朗普的胜选提振了美元&#xff0c;…