汕头网站建设平台,seo营销网站,网站开发在哪个科目核算,建立网站免费本文目录 一、基础知识点1.什么是RTC#xff1f;2. RTC方案3. 电路原理图 二、RTC芯片#xff08;RX8010#xff09;移植三、关于时间的一些命令四、应用层使用1. 使用RTC驱动2. 使用time.h库#xff08;额外知识点#xff09; 一、基础知识点
1.什么是RTC#xff1f; R… 本文目录 一、基础知识点1.什么是RTC2. 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. 电路原理图 分析 1RTC供电路径 当3.3V主电源存在时RTC芯片通过路径1和路径2同时获得供电主要是3.3V供电。 当3.3V断电后RTC芯片通过路径2由电池CR1220供电。路径2是备用电池供电路径。
2二极管的选择 补充什么是电流泄露 电流泄漏是指电流在不应该流过的路径上产生的微小电流。在二极管中当二极管在反向偏置的情况下即反向电压加在二极管上也会有极小的电流通过这种电流称为反向泄漏电流。虽然这个电流一般很小但在低功耗设计中泄漏电流会逐渐消耗电池电量影响系统的待机寿命。 为了减少电流损耗和提高电源切换效率路径1的二极管应具有较低的正向压降VF和低泄漏电流通常使用肖特基二极管因为它们的正向压降低且泄漏电流小。这样可以确保在3.3V断电时电池供电能顺利切换到RTC芯片并且尽量减少3.3V电源供电时的电流泄漏从而延长电池寿命。
3Vcc_RTCBAT1-D3 RTC芯片的Vcc端电压为BAT1电池电压减去二极管D3的正向导通电压。因此选用导通电压较小的二极管能够使RTC芯片在电池供电状态下获得较高的电压使其正常工作。RTC芯片要求电源电压为 1.6v到5.5v。
二、RTC芯片RX8010移植
配置设备树device部分 这里rx8010芯片使用iic与主控通信具体挂载到那个iic控制器上可以自行定义如果原理图已经设计好就按原理图上来。
i2c5 {status okay;rx8010: rx801032 {compatible epson,rx8010;reg 0x32;status okay;#clock-cells 0;};
};图形化配置driver部分 在源码目录下使用export ARCHarm64再使用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 时间和系统时间。
data命令查看系统时间 系统时间是由内核维护的时间它通常从 RTC 获取初始值并在系统运行期间由操作系统维护和更新。系统时间会随着操作系统的运行而不断更新即使系统时间偏离了 RTC 时间。
date //查看系统时间
date -s YYYY-MM-DD HH:MM:SS // 设置系统时间
date -u //将系统时间以UTC标准显示hwclock命令查看硬件时间 RTC 是系统主板上一个独立的实时时钟模块通常带有电池因此即使系统断电或重启也能保持时间。它是系统启动时的时间源系统启动时会从 RTC 读取时间并将其复制到系统时间。
hwclock //查看 RTC 时间
hwclock -w //将系统时间写入 RTC 时间
hwclock -s //将 RTC 时间同步到系统时间我们通过上面的学习了解到系统在启动时获取RTC时间并将其设置为系统时间那为什么我们使用命令查看时两个时间不一致呢 答这是因为时间标准不一样UTC协调世界时是全球公认的时间标准CST中国标准时间即北京时间是东八区时间相当于 UTC8。使用上面的命令一个获取的是北京时间一个是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.hint 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){timtime(NULL);//获取时间戳 获取1900-1-1到现在的总秒数plocaltime(tim); //将秒数转换printf(%4d-%d-%d %d:%d:%d\r\n,p-tm_year1900,p-tm_mon1,p-tm_mday,p-tm_hour,p-tm_min,p-tm_sec);sleep(1); //延迟1s}
}