您尚未登录。

楼主 # 2022-03-29 09:38:01

Chen569
会员
注册时间: 2022-03-29
已发帖子: 3
积分: 3

V3s rtc时间跑得快了,有解决办法吗?

12小时快了9秒,周末的时候放这里两天也快了16秒,怎么还不是均匀的快?论坛中有个人也有这个问题,但他最终没写解决办法,你们有谁遇到过怎么解决的?
我现在是3.4的kernel,由于产品做出去了货才发现有这个问题,需要尽量不要改硬件,或者少改软件。


     105 void sunxi_rtc_fixup(unsigned long *org_time, unsigned long *time)
-    106 {
|    107     unsigned long delta;
|    108     unsigned long t1, t2;
|    109     bool out;
|    110
|    111     if (!time)
|    112         return;
|    113
|-   114     if (!org_time) {
||   115         t1 = (unsigned long long)sunxi_rtc_read(SUNXI_GPDATA_REG(6)) << 32;
||   116         t1 |= (unsigned long)sunxi_rtc_read(SUNXI_GPDATA_REG(7));
||   117     } else
|    118         t1 = *org_time;
|    119
|    120     t2 = *time;
|    121
|    122     out = sunxi_rtc_read(SUNXI_LOSC_CTRL_REG) & RTC_SOURCE_EXTERNAL;
|    123
|    124     delta = (t2 > t1) ? (t2 - t1) : (t1 - t2);
|    125     delta = (delta * (OSC_ORG - OSC_32K)) / OSC_ORG;
|    126

|    129     if (out)
|    130         *time -= delta;
|    131     else
|    132         *time += delta;
|    133 }

另外他这个驱动这里的换算也有问题啊, delta = (delta * (OSC_ORG - OSC_32K)) / OSC_ORG;这里的乘法会导致溢出啊。最开始我们客户发现的时候就是快了1天多,就是这么来的。但现在是几个小时内也会有秒级的快。这是怎么回事啊?

离线

楼主 #3 2022-04-06 18:37:35

Chen569
会员
注册时间: 2022-03-29
已发帖子: 3
积分: 3

Re: V3s rtc时间跑得快了,有解决办法吗?

我之前就仔细看了这些帖子,没有实质性帮助。 你说的启动要校准下,就是我上面贴的那个算法:当用户设置时间的时候,会将时间戳的time值保存起来,等下次启动会将当前时间减去之前保存的时间再x768/32768,意思是实际硬件上寄存器的时间是以32000为计算的。这套换算没问题,只是有个溢出,可以修改,溢出会导致大概64天后比北京时间快两天。
现在最主要的问题是,平时放置着几天后会快几秒到十几秒不等。不在晶振的误差范围内。

离线

楼主 #4 2022-04-06 18:52:22

Chen569
会员
注册时间: 2022-03-29
已发帖子: 3
积分: 3

Re: V3s rtc时间跑得快了,有解决办法吗?

roc4461@163.com 说:

改下32.768K的匹配电容试试,还有温度补偿

电容改了几个,都差不多。温度补偿是怎么修改?

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn