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.

[参考译文] MSP430F5342:当 RTCRDY 被清零时、读取 RTC 日历寄存器时到底会出现什么错误

Guru**** 2778685 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1604686/msp430f5342-what-exactly-can-go-wrong-reading-the-rtc-calendar-registers-when-rtcrdy-is-clear

器件型号: MSP430F5342

文档清楚地表明、您可能会得到不正确的值、并建议遵守 RTCRDY 或使用“多数票“系统。

我不清楚的是,什么可能会出错。

显然,我可以读取前几个字节,获取旧值,然后使用新值读取接下来的几个字节,并获得不正确的结果 — 但这可能比这更糟糕吗?

如果这是唯一的失败模式,那么我可以读取完整的日期时间,从几秒到一年,然后检查,看看秒是否改变。 如果没有,我接受结果,但如果他们确实改变了,我只是重新阅读完整的日期。

事实上,我可以做得更好;如果秒改变,并且新值大于旧值(同样地,如果新值不是零),我更新秒,并保留其余的结果。

另一方面、数据表的字面读数表明、在任何更新窗口期间都可能会错误地读取任何值。 即在窗口中、当时间通过 03:42:31~03:42:32 计时时、我可能会阅读小时和分钟(以及日,月,年)的任何内容、即使它们没有变化。

在第一种情况下、读取日期/时间非常便宜(我不必等待,很少需要读取多个额外的字节来验证读取)。

在第二种情况下、我必须重复读取每个字节、然后如果任何字节发生变化、可能会重新读取整个内容。

我已经做了一些测试,似乎我可以可靠地读取任何没有积极变化的字段(即,第一种情况)-但我要求这里尝试得到一个明确的答案,硬件的实际保证(也许我只是幸运到目前为止)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在这种情况下 、计数器时钟与 CPU 时钟异步。 如果您对 CPU 使用相同的时钟源、则不会出现任何问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 — 但我不确定您想说什么。

    我的问题是在可能出错的情况下(即异步时钟)到底会出现什么问题。

     -我可以从一个不改变的寄存器读取错误的值吗? (对文档的严格阅读表明是,但我似乎不太可能这样做)

     -当从 8 位寄存器读取“错误“值时,它保证是旧值还是新值,或者它是否完全是其他东西? (例如旧值中的一些位,新值中的一些位)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您将得到一个错误的值、该值可能是随机的、而不是旧值或新值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。

    该答案是否适用于值不变的情况?

    我很确定当值不变时、您不能读取错误的值、但用户指南说:

    “在禁止窗口期间、只读 RTCRDY 位被复位、在禁止窗口期间之外被设置。 RTCRDY 被复位时对时钟寄存器的任何读取都被视为可能无效、并且时间读取应被忽略。“

    关键是 RTCMIN 只会在每 60 个禁止窗口周期中有一个周期发生变化(RTCHOUR 每 3600 个周期中只有一个周期发生变化)。 所以在几乎所有这些窗口中,似乎你应该能够信任的价值。 如果您确定 秒值(例如通过“投票“方案)、您可以确定 RTCMIN 没有变化。

    因此、我剩下的问题是知道它是否没有变化足以信任读取的值、即使 RTCRDY 被复位时也是如此。

    此外,基于“你会得到一个错误的值,可能是随机的“,投票到底是如何工作的? 我不能得到两个恰好相同的连续错误值吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Mark、

    正如我在 RTCRDY 位被复位时读取寄存器的值之前所提到的、如果您读取多次、并且这与我们高度信任的值相同、但在我看来、它不能 100%保证这一点。 因此、我强烈建议使用解决方法: 轮询 RTCRDY 位或前面描述的同步过程。