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.

[参考译文] TPS65910:RTC 问题

Guru**** 2508065 points
Other Parts Discussed in Thread: TPS65910, AM3715, TPS65010

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/857863/tps65910-rtc-issue

器件型号:TPS65910
主题中讨论的其他器件: AM3715TPS65010

大家好、团队、

 

在更新 RTC 时、我们会遇到 TPS65910的奇怪行为。 介绍了如何设置 RTC 的两个选项。 在这两种情况下、我们都发现了一些问题。

 

CPU:AM3715、OS:WEC7

 

重要提示:对于以下所有情况,RTC 不会冻结!

 

 

  1. 设置新日期/时间时 RTC 停止时的行为:

    1. 执行写命令以停止 RTC

    2. 读取运行标志并等待直至其显示“0”

    3. 在有问题的情况下,运行标志不会变为系统挂起的“0”。

    4. 如果在等待一段时间后第二次执行写命令,因为运行标志没有变为“0”,RTC 停止,运行标志变为“0”

    5. 遗憾的是、这在现有软件中是不可能的

       

  2. 在不停止 RTC 的情况下设置新日期和时间的行为

    1. 系统挂起

    2. 一个测试例程正在检查新的日期/时间是否已到达 RTC

    3. 设置新的日期/时间后、将设置标志 RTC_V_OPT 和 GET_TIME、以将值复制到影子寄存器中并读取它们

    4. 偏差正好显示1分钟

    5. 观察到秒数显示了写入的数字、但分钟数恰好增加了1分钟

 

我们 不认为 RTC 的设置频率存在相关性。 这些问题也可以 作为单个事件发生。 如果问题发生、则之前设置日期/时间的事件大约是1秒前的事件。     

I2C 通信似乎可以、因为 在与其他客户端通信时未观察到任何其他影响。

非常感谢

Lutz

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

    Lutz、

    我们正在讨论这一问题,并决定谁是对这一问题作出最佳反应的人。 我们将在第二天左右回复更多信息。 谢谢你。

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

    [引用 user="Lutz Naumann "]在不停止 RTC 的情况下设置新日期和时间的行为

    Lutz、对于项目#2、这主要与 PMIC 相关、因此我将在 Sitara 团队继续审查项目#1的同时尝试在此处进行跟进。

    [引用 user="Lutz Naumann "]测试例程正在检查新的日期/时间是否已到达 RTC[/引用]

    请提供有关测试例程的更多详细信息。 如何设置新日期/时间? 发送到 PMIC 的 I2C 命令的顺序是什么?

    [引用 USER="Lutz Naumann "]设置新日期/时间后、设置标志 RTC_V_OPT 和 GET_TIME、以将值复制到影子寄存器并读取它们[/QUEST]

    您按什么顺序设置 get_time 和 RTC_V_opt 标志?

    [引用 user="Lutz Naumann"]偏差正好显示1分钟。  观察到秒数显示了写入的数字、但分钟数恰好增加了1分钟[/引述]

    请提供 PMIC RTC 中设置的日期/时间示例、并提供从影子寄存器返回的信息(解码的日期/时间和原始数据)。

    我建议使用逻辑分析仪("I2C 监听器")记录您可以作为 CSV 附加的数据。 这样、除了您的阅读观察结果之外、我们还可以在结尾处对其进行解释。

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

    您好 Brian、

    以下 是对 PMIC TPS65010中 RTC 寄存器的访问顺序:

     

    注册表地址

     

     

     

    通过 UART 接口进行调试输出

     

    PID:055F00C6 TID:043F00E2 +OEMSetRealTime()

    PID:055F00C6 TID:043F00E2 OEMSetRealTime()-输入

     

    PID:055F00C6 TID:043F00E2 OEMSetRealTime():72919962 -设置为:0x1d4439de87cb380              将 GetTickCount()和 FileTime 的实际值显示为四字

    PID:055F00C6 TID:043F00E2读取 RTCTime  - Y:0x18;M:0x9;T:0x3;H:0x15;M:0x50; S:0x59                          显示要设置的日期和时间的转换值

     

    PID:055F00C6 TID:043F00E2 TWLWriteRegs ()- OAL/TWL_ACCESS:  Addr:0x5;值:0x18                  将值写入 RTC 的寄存器

    PID:055F00C6 TID:043F00E2 TWLWriteRegs ()- OAL/TWL_ACCESS:  地址:0x4;值:0x9

    PID:055F00C6 TID:043F00E2 TWLWriteRegs ()- OAL/TWL_ACCESS:  地址:0x3;值:0x3

    PID:055F00C6 TID:043F00E2 TWLWriteRegs ()- OAL/TWL_ACCESS:  地址:0x2;值:0x15

    PID:055F00C6 TID:043F00E2 TWLWriteRegs ()- OAL/TWL_ACCESS:  地址:0x1;值:0x50

    PID:055F00C6 TID:043F00E2 TWLWriteRegs ()- OAL/TWL_ACCESS:  地址:0x0;值:0x59

                                 

    PID:055F00C6 TID:043F00E2 TWLReadRegs ()- OAL/TWL_ACCESS:  ADDR:0x10;值:0x1                  读取控制寄存器

    PID:055F00C6 TID:043F00E2 TWLWriteRegs ()- OAL/TWL_ACCESS:  Addr:0x10;值:0xc1                 同时设置 RTC_V_OPT 和 GET_TIME

    PID:055F00C6 TID:043F00E2 TWLReadRegs ()- OAL/TWL_ACCESS:  ADDR:0x10;值:0x81                读取控制寄存器

     

    PID:055F00C6 TID:043F00E2 TWLReadRegs ()- OAL/TWL_ACCESS:  ADDR:0x5;值:0x18                  读取 RTC 寄存器的值

    PID:055F00C6 TID:043F00E2 TWLReadRegs ()- OAL/TWL_ACCESS:  地址:0x4;值:0x9

    PID:055F00C6 TID:043F00E2 TWLReadRegs ()- OAL/TWL_ACCESS:  地址:0x3;值:0x3

    PID:055F00C6 TID:043F00E2 TWLReadRegs ()- OAL/TWL_ACCESS:  地址:0x2;值:0x15

    PID:055F00C6 TID:043F00E2 TWLReadRegs ()- OAL/TWL_ACCESS:  地址:0x1;值:0x51

    PID:055F00C6 TID:043F00E2 TWLReadRegs ()- OAL/TWL_ACCESS:  地址:0x0;值:0x59

     

    PID:055F00C6 TID:043F00E2读取 RTCTime  - Y:0x18;M:0x9;T:0x3;H:0x15;M:0x51; S:0x59                          显示寄存器的读取值

     

    PID:055F00C6 TID:043F00E2 TWLReadRegs ()- OAL/TWL_ACCESS:  ADDR:0x10;值:0x81                读取控制寄存器

    PID:055F00C6 TID:043F00E2 TWLWriteRegs ()- OAL/TWL_ACCESS:  地址:0x10;值:0x1                  复位 RTC_V_OPT

     

    PID:055F00C6 TID:043F00E2 OEMSetRealTime():72920202 -时间设置为:0x1d4439ec3ff980                      将 GetTickCount()和 FileTime 的实际值显示为四字

    PID:055F00C6 TID:043F00E2 OEMSetRealTime()-时间不同!

    PID:055F00C6 TID:043F00E2 OEMSetRealTime()-时间差异大于一秒:0x023c34600   时间差异为一分钟-请参阅寄存器0x01

     

    PID:055F00C6 TID:043F00E2 OEMSetRealTime()- leaved

    PID:055F00C6 TID:043F00E2 -OEMSetRealTime()

     

    GetTickCount 的不同值为240ms (橙色标记)

    RTC 的分钟寄存器递增、第二个寄存器不变。 (红色标记)

     

    谢谢 Lutz

    e2e.ti.com/.../PMIC-communication.DOCX

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

    大家好、团队有关这项工作的任何新闻。 客户正在等待。

    谢谢

    Lutz

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

     ROUND _30s 位的值是什么?

    在此事务期间是否设置了 STOP_RTC 位? 根据您提供的数据、该位似乎设置为0b、因此我不会详细介绍该位。 如果设置为1b、RTC 将在下一分钟舍入。

    设置新时间的过程可以通过将 STOP_RTC 位设置为来完成:

    要修改当前时间、软件将新时间写入 TC 寄存器以修复时间/日历信息。 DBB 可以在不停止 RTC 的情况下写入 TC 寄存器。 此外、软件可以通过清除控制寄存器的 STOP_RTC 位来停止 RTC、并检查状态的 RUN 位以确保 RTC 被冻结。 然后更新 TC 值、然后通过设置 STOP_RTC 位重新启动 RTC。

    根据您提供的数据、STOP_RTC = 1b (RTC 正在运行)。

    在将 seconds_REG 写入:59之前,RTC 从59秒回滚到00秒并将分钟递增1是否合理?

    考虑到秒寄存器位于:59且 RTC 正在运行,这对我来说是一个合理的解释。

    为此、我建议您再次运行测试、方法是清除 STOP_RTC = 0b、然后覆盖时间、回读时间、然后通过重新设置 STOP_RTC = 1b 来重新启动 RTC。  这将验证我的理论是否正确。

    0xc1.   

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

    感谢 Brian、

    我将与客户核实这一点。 您建议的停止 RTC 的测试实际上是所述的第二种情况 、这种情况导致 RTC 在某些情况下不更新、需要第二个写入命令(软件中未实现)请参考初始问题。

    根据我的理解、必须有其他因素导致问题。 有时它可以工作、有时我们在两种更新情况下都解决了该问题(无论是否停止 RTC)。

    非常感谢

    Lutz  

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

    Lutz、

    1. 对于案例1 (RTC 重写期间每分钟更新1次)、如果有时出现问题、有时不会出现问题、我的理论不会被驳斥。 根据写入 Minute 寄存器和第二个寄存器所需的时间,只要秒为:59,就有可能发生这种情况
    2. 对于情况2 (更新 RTC 之前需要写入2倍):我没有对该问题的解释、但从我的角度来看、如果有时发生问题、有时不会发生问题、这不是问题。 通过检查 Write 是否生效、可以完全预防故障。

    在第2种情况下、这是在寄存器值被写入后读回它们的目的:验证它们是否被正确写入。 如果错误、则需要第二个写入命令、但要求第二个写入命令不是问题。 我建议:停止 RTC、 写入、 读取、 写入(如有必要、再次执行)、  读取(再次)、 再次启动 RTC