This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am335x 系统时间跳变问题



您好,我遇到一个系统时间跳变问题,AM335X Linux在启动时,使用了hwlock -s命令,使系统时间和RTC时间一致,但是经过一段时间后,发现系统时间和RTC的时间不一致,系统本地时间比RTC时间快,第一次快大概32个小时, 后面又会恢复保持一致,但隔一段时间后,系统时间又快大约30多个小时,这样一直反复....。用的是外部RTC,请问为什么系统时间会调变?

  • 你所说的后面又会恢复保持一致的原因,是因为软件上面主动去读外部RTC的时间而更新到自己的系统RTC时钟吗?

    之前有遇到过类似的时间跳变问题,根源在于OSC0和OSC1的地没有和DGND供地。在你的办卡设计中,是否有注意到这三个地必须共地的设计?

  • 我也遇到这个问题,请问你解决了没呀~

  • 是共地设计的,请看附件OSC0、OSC1和DGND原理图。不过我现在用的是外部RTC,不是am335x的RTC。目前我通过修改代码改了下,但不知道是否能从根本上解决问题,修改代码如下:

    $(KERNEL_DIR)/arch/arm/mach-omap2/timer.c

    459 -OMAP_SYS_TIMER_INIT(3_am335x, 2, OMAP4_MPU_SOURCE, 1, AM33XX_RTC32K_SOURCE)

    460 +OMAP_SYS_TIMER_INIT(3_am335x, 2, OMAP4_MPU_SOURCE, 1, OMAP4_MPU_SOURCE)

  • 是共地设计的,请看附件OSC0、OSC1和DGND原理图设计。我用的是外部RTC,不是AM335X内部RTC。目前修改了下代码,但不知道是否能够从根本上解决问题,修改代码如下:

    $(KERNEL_DIR)/arch/arm/mach-omap2/timer.c

    459 -OMAP_SYS_TIMER_INIT(3_am335x, 2, OMAP4_MPU_SOURCE, 1, AM33XX_RTC32K_SOURCE)

    460 +OMAP_SYS_TIMER_INIT(3_am335x, 2, OMAP4_MPU_SOURCE, 1, OMAP4_MPU_SOURCE)

  • 了解,如果供地设计了,硬件上应该是没问题的。但是针对于你这个问题的本身,我还是有些不明白的地方:

    1. 你用了外部的RTC这点我知道;但对于AM335x的RTC部分设计,你在板子上做了吗?还是按照check list的要求,做成了disable的设计?

    2. 你现在说道的系统时间跳变,具体的操作流程是怎样?是指系统刚启动的时候,会读取外部的RTC时间,然后存在了AM335x的RTC时间里,然后这个部分是会发生跳变的?然后过一段时间,这个时间就又好了?

    3. 你改的代码是基于SDK 6.0的吧?这里的设置是改变对时钟源的设置,这个改后会对问题有帮助?

  • 我遇到情况是:开机读取rtc时间后设置为系统时间,然后过一会系统时间会突然增加个30小时,但rtc的时间这个时候还是正确的。然后就一直重复这个过程,每隔一段时间系统时间就增加30来个小时,但是这个间隔时间不固定。并且系统时间是不会恢复过来的会一直增加。

    不知道楼主是不是跟我这个情况一样,而且我这边也就这批板出现了这个问题,之前的都没有,硬件也没改动这里。

  • 开机读取rtc时间后设置为系统时间: 这个在Linux操作命令?

    然后过一会系统时间会突然增加个30小时: 这个的操作log?

    但rtc的时间这个时候还是正确的: 这个是指读外面的RTC?

    能不能把log信息发一下,这样我能清楚你每一步都是针对哪个的。

  • 1.开机读取rtc时间后设置为系统时间:这个是文件系统脚本里执行的,/etc/init.d/hwclock.sh,这个流程应该是没错的。

    2.然后我用date命令查看系统时间和用hwclock -r打印的时间是一致的,rtc的话是用外部rtc,内部rtc在menuconfig里关了。

    3.过一段时间后,我再次用date查看系统时间,系统时间有时候就不对了,会比正常时间快30多个小时,这个时候用hwclock -r查看rtc时间是对的。

    这个是我内核的打印信息,这个OMAP clocksource用的是 32768 Hz,但是我内核CONFIG_OMAP_32K_TIMER没有打开,这个会有影响吗。

    我现在将

    OMAP_SYS_TIMER_INIT(3_am33xx, 2, OMAP4_MPU_SOURCE, 1, AM33XX_RTC32K_SOURCE) 

    改为
    OMAP_SYS_TIMER_INIT(3_am33xx, 2, OMAP4_MPU_SOURCE, 1, OMAP4_MPU_SOURCE)

    跑了几个小时没出现这种情况了。但是我们之前的板子就没遇到这个问题,很奇怪。

    改之前:

    [ 0.000000] OMAP clockevent source: GPTIMER2 at 25000000 Hz
    [ 0.000000] OMAP clocksource: GPTIMER1 at 32768 Hz
    [ 0.000000] sched_clock: 32 bits at 32kHz, resolution 30517ns, wraps every 131071999ms
    [ 0.183654] Switching to clocksource gp timer
    [ 10.363037] clock: disabling unused clocks to save power
    [ 10.395996] rtc-isl1208 1-006f: setting system clock to 2016-12-19 11:40:34 UTC (1482147634)

    改之后:

    [ 0.000000] OMAP clockevent source: GPTIMER2 at 25000000 Hz
    [ 0.000000] OMAP clocksource: GPTIMER1 at 25000000 Hz
    [ 0.000000] sched_clock: 32 bits at 25MHz, resolution 40ns, wraps every 171798ms
    [ 0.183599] Switching to clocksource gp timer
    [ 10.372085] clock: disabling unused clocks to save power
    [ 10.411999] rtc-isl1208 1-006f: setting system clock to 2016-12-20 15:04:59 UTC (1482246299)

    这样改对系统会有影响吗?



  •  hi,   我们遇到的问题一样!长期测试测试看看还会不会跳变。如果您有新的发现请说一下,谢谢!

  • 你好,SONG ALLEN~我这里 跑了一会了,暂时没有发现这个问题了,请问下你们的板子有跑其他程序吗,我们的是跑了一个qt的应用程序的,如果开机不跑这个程序的时候好像并不会出现这个问题,但是如果跑了这个程序,即使把它kill掉,这个还是会出现,很奇怪。

  • 这个应该是系统时钟源稳定不稳定的问题,与跑什么程序应该没关系,你不跑这个QT程序长时间测试测试看看。我这里跑了好几个任务,而且时间对我很重要,如果时间有跳变会造成个别线程中断无法执行。

  • 如果我一开机不执行这个qt程序,我放了差不多3个小时没出现这个问题就没往后测了,但是如果我执行了这个qt程序,这个问题就出现的很频繁,即使kill掉程序仍然还会出现。很怪,我现在换了25mhz那个时钟源后确实没这个问题了。

  •  您好,,如果用外部RTC,那么OSC1的32.768K是否还需要焊接?