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.

[参考译文] CC1352R:校准 RTC

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1128976/cc1352r-calibrate-rtc

器件型号:CC1352R
Thread 中讨论的其他器件:SysConfig

您好!

我一直在代码的其他部分工作、完全不考虑实时时钟的问题。 现在、我将尝试使用它重新启动。

在我的硬件中、我有一个48MHz xtal 基准: XRCGB48M000F4M00R0、我在 SysConfig 中更改了 Xosc 电容阵列增量、以查看实时时钟的精度是否有任何变化、但并未发生变化、或变化太小、以至于我无法看到。

此外、我正在检查 SUBSECINC 的值、它始终是相同的值、它永不更改、我不知道如何查看我的代码是否使用此值、因为我找不到代码调用此函数的位置。

我有一个需要有日历的器件、为此、我使用 seconds.h 中的函数"seconds_set" 因此、当我需要检查日历时、我会调用"seconds_get()"。 此选项是否是拥有日历的正确选项? 或者、我应该使用任何其他功能或驱动程序吗?

谢谢、

Sandra

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

    您好、Sandra、

    您可以使用 seconds_set 设置 epoch 时间、然后可以使用 time.h 库获取当前日期和时间。 请参阅此 E2E 主题: https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1010813/launchxl-cc1312r1-how-to-use-rtc-to-keep-track-of-updated-current-time。 请注意,您不需要调用 seconds_get(),因为这是在调用 时间(NULL)时在内部完成的

    是否为 LF 时钟使用外部晶体(即 SCLK_LF 设置为 XOSC_LF)。 这是在 SysConfig 的"器件配置"模块中选择的。 如果选择了 XOSC_LF、则不会进行校准。 只有在选择 RCOSC_LF (内部 RC 振荡器)作为 LF 时钟并且在 SysConfig 中的"电源"模块中启用了"校准 RCOSC_LF"时、才会进行校准。 我们计划在 未来的 SDK 版本中选择 XOSC_LF 时添加对执行校准的支持。

    此致、
    尼古拉伊

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

    Nikolaj、您好!

    感谢您的快速回复。

    感谢实时时钟的链接。

    关于振荡器、我们还使用外部 LF、参考"TF202P32K7680"。 因此、在 SysConfig 中、我将其选择为 LF_XOSC。 那么、这意味着没有进行校准?

    是否可以由我自己实现?

    何时计划或多或少发布新的 SDK 版本?

    非常感谢!

    Sandra

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

    您好、Sandra、

    正确、在您的情况下 RTC 补偿将不会完成。

    我相信、当 SCLK_LF 为 XOSC_LF 时、对 RTC 补偿的支持将在2022年第4季度 SDK 中准备就绪(但这一决定尚不是最终决定)。

    您可以自己添加薪酬、但我是否可以问您为何要执行薪酬? 您的 LF 晶振似乎至少具有与48MHz 晶振相同的频率容差(至少在25°C 时)、那么为什么要 对 HF 晶振执行 LF 晶振补偿? 您希望实现什么目标?  

    此致、
    尼古拉伊

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

    您好!

    我的问题是、我的实时时钟不是很精确、每小时的速度大约快1秒。

    一段时间前、我问过这个主题、一位同事告诉我 RTC 补偿是存在的、我正在进行一些没有结果的测试、但我现在需要停止这个、我已经找到了一些时间尝试解决这个问题。

    谢谢、

    Sandra

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

    您好!

    每小时1次的误差听起来很高。 这是一个大约278ppm 的偏移、这似乎比您所使用的晶振的频率容差高得多。 您可以尝试通过使用 GPIO_setMux (x、 IOC_PORT_AON_CLK32K)配置 DIO 的多路复用器来输出 SCLK_LF 时钟信号。 通过此选项、您可以测量时钟是否具有预期频率。

    下面介绍了启用补偿的一种黑客方法:

    1. 将 source\ti\drivers\power\PowerCC26X2.c 和  source\ti\drivers\power\PowerCC26X2_calibrateRCOSC_aplers.c 文件添加到您的项目中
      1. 我们将对这些文件进行更改、这样它们将只适用于特定项目。
    2. 在  PowerCC26X2.c 中的 Power_init 中、注释掉 与下面第3行和第5行对应的行:  
          if (PowerCC26X2_config.calibrateRCOSC_LF) {
              /* verify RCOSC_LF is the LF clock source */
      //        if (ccfgLfClkSrc == CCFGREAD_SCLK_LF_OPTION_RCOSC_LF) {
                  PowerCC26X2_module.calLF = true;
      //        }
          }
       
      1. 即使 RCOSC_LF 未用作 LF 时钟、这也会启用校准。
    3. 将下面的5-8行添加到  PowerCC26X2_calibrateRCOSC_elers.c 中的 PowerCC26X2_setAclkRefSrc
      __tfm_secure_gateway_attributes__
      void PowerCC26X2_setAclkRefSrc(uint32_t source)
      {
          if (source == ACLK_REF_SRC_RCOSC_HF || source == ACLK_REF_SRC_RCOSC_LF) {
              if ((source == ACLK_REF_SRC_RCOSC_LF) && (CCFGRead_SCLK_LF_OPTION() == CCFGREAD_SCLK_LF_OPTION_XOSC_LF))
              {
                  source = 3; // XOSC_LF
              }
              /* set the ACLK reference clock */
                  DDI16BitfieldWrite(
                      AUX_DDI0_OSC_BASE,
                      DDI_0_OSC_O_CTL0,
                      DDI_0_OSC_CTL0_ACLK_REF_SRC_SEL_M,
                      DDI_0_OSC_CTL0_ACLK_REF_SRC_SEL_S,
                      source
                  );
      
                  /* read back to ensure no race condition between OSC_DIG and AUX_SYSIF */
                  DDI16BitfieldRead(
                      AUX_DDI0_OSC_BASE,
                      DDI_0_OSC_O_CTL0,
                      DDI_0_OSC_CTL0_ACLK_REF_SRC_SEL_M,
                      DDI_0_OSC_CTL0_ACLK_REF_SRC_SEL_M
                  );
          }
      }
      1. 您还需要将"#include DeviceFamily_constructPath (driverlib/ccfgread.h)"添加到文件中。
      2. 完成这些步骤后、在预制测量 LF 时钟以执行校准时使用正确的时钟。
    4. SysConfig 的"电源"模块中启用"校准 RCOSC_LF"。

    这些步骤未经充分测试、不建议在生产代码中使用、但您可以使用它们来测试校准是否有助于解决您的问题。

    此致、
    尼古拉伊

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

    您好!

    非常感谢! 我将尝试它、让我们看看它是否起作用。

    Sandra

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

    您好!

    我在周末离开了器件、现在时钟精度最差。 17分钟。

    我尝试测量 SCLK_LF、但我无法执行此任务。我使用的是 SDK 5.20、但函数 GPIO_setMux (x、 IOC_PORT_AON_CLK32K)不在那里。

    因此我无法测量它。 我尝试更改 SDK、但它给了我更多错误。 因此、我将尝试找到测量输出的方法。

    Sandra

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

    您可以使用  IOCIOPortIdSet: https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_6_20_00_29/docs/driverlib_cc13xx_cc26xx/cc13x2_cc26x2/driverlib/group__ioc__api.html#gae87a1f6be14963bee3439b13a7f4cfac、而不是使用 GPIO_setMux 

    您是否说 RTC 在一个小时内不正确17分钟? 您如何测量精度?

    此致、
    尼古拉伊

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

    您好!

    我正在使用您建议的函数、但我在输出中看不到任何内容、只是引脚变为高电平。 我不知道我是否需要进行任何其他配置。

    周末17分钟左右,每小时大约24秒。 为了测量精度、我将日期/时间输入到我的器件中、然后从器件中读回、并比较日期以查看准确度。

    谢谢、

    Sandra

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

    您好、Sandra、

    抱歉、 IOCIOPortIdSet 只更改多路复用、您还需要配置 IO 以启用输出。

    您可以配置多路复用并使用此函数启用输出( 使用以下函数时无需 IOCIOPortIdSet):

    IOCPortConfigureSet (IOID_xIOC_PORT_AON_CLK32KIOC_IOMODE_NORMAL); 

    此致、
    尼古拉伊

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

    您好!

    使用该指令、我具有相同的结果、引脚处于高电平。

    谢谢、

    Sandra

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

    您好、Sandra、

    给我带来的不便、我深表歉意。 下面是您需要执行的操作:

    包含必要的头文件:

    #include <ti/devices/DeviceFamily.h>
    #include DeviceFamily_constructPath(driverlib/ioc.h)
    #include DeviceFamily_constructPath(driverlib/aon_ioc.h)

    在任何电路板/引脚初始化代码之后添加以下内容(以防止初始 化覆盖配置)。  

    IOCPortConfigureSet(IOID_7, IOC_PORT_AON_CLK32K, IOC_IOMODE_NORMAL);
    AONIOC32kHzOutputEnable();

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

    您好!

    最后、我可以看到波形。 我可以使用示波器测量32、77kHz。

    此致、

    Sandra

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

    您好、Sandra、

    您能否尝试以更高的精度测量频率?

    是否确定  为您的外部 LF 振荡器选择了正确的负载电容器?

    您之前提到过、您曾尝试修改电容阵列增量值(请参阅下面的报价)。 是否确定已将其设置回正确的值(注意:"正确"的值取决于您的电路板和晶体)。 如果选择了不正确的值、这可能会影响 HF 时钟的精度、这也可能是 在根据 HF 时钟启用 RTC 校准时您的精度较差的原因。  

    [引用 userid="416495" URL"~/support/wireless-connectivity/sub-1GHz-group/sub-1GHz/f/sub-1GHz-forum/1128976/cc1352r-calibral-rtc"]我已在 SysConfig 中更改 Xosc 电容阵列增量、以查看是否存在实时时钟精度的任何变化、但无法查看此变化。]

    这些文档可能会帮助您:
    https://www.ti.com/lit/an/swra640f/swra640f.pdf 

    https://www.ti.com/lit/an/swra495i/swra495i.pdf 

    此致、
    尼古拉伊

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

    Nikolaj、您好!

    非常感谢您的支持。 遗憾的是、现在我无法访问实验室来测量振荡器和 HF 校准。 但我可以想象我的问题是在 HF 振荡器中、当我有机会访问实验室时、如果我发现了某个东西或者我需要一些东西、我会回来的。

    非常感谢、

    Sandra。