当前位置: 首页 > 科技观察

如何快速调试RTC?你知道吗?

时间:2023-03-17 19:22:32 科技观察

想了解更多开源,请访问:开源基础软件社区https://ost.51cto.com1.RTC简介RTC是RealTimeClock的缩写,在硬件电路上独立供电.当系统关机时,CPU和其他外部硬件设备全部断电,但RTC仍继续工作。这继续为设备提供准确的时钟,并提供警报和定时器功能。2.如何查询系统时间和硬件时间(1)查询系统时间#dateSatAug509:15:26UTC2017(2)查看RTC硬件时间:hwclock-rDisplayRTCtime(读取RTC时间显示)。#hwclockSatAug509:13:3620170.000000seconds(3)设置系统时间,硬件时间hwclock-rdisplayRTCtime(读取RTC时间显示)hwclock-wsetRTCtime(将系统时间传给RTC驱动,设置RTC驱动time)hwclock-s设置系统时间(读取RTC时间设置为系统时间)。3.如何查看RTC设备节点和文件(1)RTC设备节点。#pwd/dev#lsrtc*rtcrtc0rtc12)sys/class/rtc#pwd/sys/class/rtc#lsrtc0rtc1#pwd/sys/class/rtc/rtc0#lsalarmtimer.3.auto设备名称子系统wakealarmdatehctosyspowertimedevmax_user_freqsince_epochuevent(2)proc/driver/rtc:获取RTC相关信息。#catproc/driver/rtcrtc_time:09:12:46rtc_date:2017-08-05alrm_time:00:00:00alrm_date:1999-12-16alarm_IRQ:noalrm_pending:noupdateIRQenabled:noperiodicIRQenabled:noperiodicIRQfrequency:1maxuserIRQfrequency:6424hr:是的4。如何在内核中启用RTC并设置时间同步在linux系统上,要从用户空间正确管理RTC,需要注意两个内核选项:内核构建进程hctosys.c,它在启动和恢复时从RTC设置系统时间。启用此选项后,系统时间将设置为从指定RTC设备读取的值。CONFIG_RTC_HCTOSYS_DEVICE中指定RTC设备:CONFIG_RTC_HCTOSYS=yCONFIG_RTC_HCTOSYS_DEVICE="rtc0"5.RTC关键结构描述rtc_time结构描述:structrtc_time{inttm_sec;/*秒,0~60(闰秒需要60)*/inttm_min;/*分钟,0~59*/inttm_hour;/*小时,0~23*/inttm_mday;/*一个月中的第几天,1~31*/inttm_mon;/*从一月份开始的数字,0~11*/inttm_year;/*自1900年以来的年数*/inttm_wday;/*星期几,0~6,星期日为0*/inttm_yday;/*一年中的第几天,0~365*/inttm_isdst;/*夏令时标志*/};rtc_wkalrm结构说明:structrtc_wkalrm{unsignedcharenabled;/*0=禁用警报,1=启用警报*/unsignedcharpending;/*0=alarmNotsuspended,1=alarmsuspended(alreadyoccurred)*/structrtc_time时间;/*设置的闹钟中断发生的时间*/};6.RTC框图7.RTC适配问题总结Build,无法获取硬件时间。#hwclockhwclock:/dev/misc/rtc:Nosuchfileordirectory问题分析:启动日志报告novalidclock/calendarvaluesavailable[1.179936]rk808-rtcrk808-rtc:registeredasrtc0[1.186459]rtc-hym85635-0051:没有有效的时钟/日历值可用[1.186675]rtc-hym85635-0051:注册为rtc1[1.187698]rtc-hym85635-0051:没有有效的时钟/日历系统值可用[1.187723]rtc-hym8563:hc-hym8563unabletoreadthehardwareclock从日志分析,rtc1时钟值无效,可能是人为写入了无效值,或者初始化时写入了无效值;解决方法:(1)在dts中添加init_date项,当hym8563_probe时,如果系统检测到时间没有设置,则给时钟芯片一个默认值(init_date设置的值);&i2c_AO{status="okay";pinctrl-名称=“默认”;pinctrl-0=;时钟频率=;/*default100k*//*forrtchym8563*/hym8563:hym8563@51{compatible="haoyu,hym8563";注册=;init_date="2021/07/28";#clock-cells=;};};(2)通过命令设置硬件时钟;时钟-w。验证结果:通过log查看显示。[1.413453]rk808-rtcrk808-rtc:registeredasrtc0[1.423286]rtc-hym85635-0051:registeredasrtc1[1.424348]rtc-hym85635-0051:settingsystem1-clockto20211-13T21:10:55UTC(1636837855)问题2:设置rtc1为硬件时钟后,连接网络进行NTP时间同步,检查发现rtc1时钟不同步,但rtc0硬件时钟实际同步#dateFriNov1815:53:21UTC2022#hwclockSunNov1420:18:5820210.000000seconds问题分析:怀疑是联网后,网络时间同步模块将同步后的系统时间写入硬件时时钟,它写入/dev/rtc0而不是实际使用的/dev/rtc1;检查网络时间同步后,硬件时钟代码位置设置为:/base/miscservices/time/services/time_manager/src/time_service.cpp添加LOG打印信息如下,确认问题出在写入到达在/dev/rtc0,而不是实际的/dev/rtc1;#嗨日志|grepRTC11-1815:46:28.906464464E01c02/TimeService:[time_service.cpp]set_rtc_time#RTCrtc_id:0:11-1815:46:28.906464464E01c02/TimeService:[time_service.cpp]set_rtc_time#RTCrtc_dev:/dev/rtc0:解决方法:修改代码set_rtc_time函数,设备节点由/dev/rtc0改为/dev/rtc,此时/dev/rtc软连接为实际硬件时钟/dev/rtc1,不固定为/dev/rtc0。vibase/miscservices/time/services/time_manager/src/time_service.cpp+351@@-348,13+356,15@@intTimeService::set_rtc_time(time_tsec)返回-1;}std::stringstreamstrs;-strs<<"/dev/rtc"<rtc1crw-r-----1systemsystem250,02021-11-1421:15rtc0crw-r-----1rootroot250,12021-11-1421:15rtc1在设备初始化代码中添加修改rtc1用户组:index766f404..0530a20100755---a/rk3568/build/rootfs/init.rk3568.cfg+++b/rk3568/build/rootfs/init.rk3568.cfg@@-5,7+5,8@@"jobs":[{"name":"pre-init","cmds":[-"write/proc/sys/vm/min_free_kbytes10240"+"write/proc/sys/vm/min_free_kbytes10240",+"chownsystemsystem/dev/rtc1"]},{"name":"init",查看rtc1用户修改后组:#cddev/#ls-alrtc*lrwxrwxrwx1rootsystem42022-11-1818:24rtc->rtc1crw-r-----1systemsystem250,02022-11-1818:24rtc0crw-rw----1systemsystem250,12022-11-1818:24rtc1用户程序可以正常打开:11-1818:00:36.159533533E01c02/TimeService:[time_service.cpp]set_rtc_time#RTCrtc_dev:/dev/rtc:11-1818:00:36.161533533E01c02/TimeService:[time_service.cpp]set_rtc_time#RTCset_rtc_timesuccess!!!!!!验证结果:结果符合预期,连接后的系统时间tothenetwork,hardwareclocksareautomaticallysynchronizedtothenetworktime//将系统和硬件时间设置为非当前时间。#dateFriJan100:02:40UTC2021#hwclockFriJan100:02:4620210.000000seconds//连接网络后,同步网络时间,系统时间和硬件时钟自动同步。#dateMonNov2115:19:28UTC2022#hwclockMonNov2115:19:3220220.000000seconds摘要:本文介绍了OpenHarmony中外部RTC的调试和使用,以及RTC在操作系统中的作用,对于后续的NTP时间同步是支持的。了解更多开源请访问:开源基础软件社区https://ost.51cto.com