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.

[参考译文] CC3220SF-LAUNCHXL:如何将时间与系统时钟同步?

Guru**** 2595800 points
Other Parts Discussed in Thread: CC3220SF-LAUNCHXL

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/878151/cc3220sf-launchxl-how-to-synchronize-time-with-my-system-clock

器件型号:CC3220SF-LAUNCHXL

您好!

我对使用 SNTP 进行时间同步有疑问。

我想将 CC3220SF-LAUNCHXL 的运行时间与我的笔记本电脑的运行时间同步。 我该怎么做?

有一个 API 要求一些地址 SNTP_getTimeByAddr (SlNetSock_Addr_t *服务器、SlNetSock_Timever_t *超时 uint64_t * ntpTimeStamp)

我是否可以通过提供便携式计算机连接的 IP 地址来使用此 API 与桌面时间同步? 是否真的可以将时钟直接同步到我的笔记本电脑时钟?

请帮我解决这个问题。

谢谢、此致

深红色 R J

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

    您好!

    我对 SDK 中的 local_time 示例有另一个疑问。

    我构建并运行它、它运行得非常好。 我想知道何时我说从何处获取时间选项?

    是否从以下列表中的默认服务器之一提取?

    静态 const char * SNTP 内部串行器列表[]={
    " time.google.com "、
    " time.nist.gov "、
    " utcnist.colorado.edu "、
    " utcnist2.colorado.edu "、
    " nist-time-server.eoni.com "、
    };

     请澄清

    谢谢

    深红色 R J

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

    您好!

    很抱歉、同一问题有多个主题帖。 当我尝试对此进行更多探索时、我会有更多想法。

    我的另一个问题是、如果我们可以提供我的笔记本电脑的 IP 地址、以便从我的笔记本电脑连接到的服务器获取时间、那么如何将 IP 地址传递到 API?  

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

    您好!

    这是可能的、但仅当您的笔记本电脑运行 NTP 服务器软件时才可行。 在这种情况下、您可以向该 SNTP 文件提供笔记本电脑的地址、然后 CC3220将连接到您的笔记本电脑、以便在运行该 API 时获取时间信息。

    如果您需要进一步澄清或有进一步的问题、请告诉我。

    此致、

    Michael

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

    您好、Michael、

    如果我的笔记本电脑没有运行 NTP 服务器、如何为此设置 NTP 服务器?

    当 NTP 服务器设置了我们知道的 IP 地址时、如何调用 API 并传递服务器地址?  

    我没有找到任何有关将 SNTP 与服务器地址一起使用的示例。

    如果您有任何示例、请向他们指出、这将对我非常有帮助。

    谢谢、此致

    深红色 R J

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

    您好、Michael、

    如果在 AnyPoint,NTP 服务器未能提供时间,如何在系统上显示一个密切相关的时间?  

    我是否应该使内部计时器与从 NTP 服务器接收的时间保持同步、并在收到来自 NTP 服务器的更新时继续更新计时器?

    应该是软件计时器还是硬件计时器?

    正在等待您的回复。

    谢谢  

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

    您好、Michael、

    如何在 CC3220上使用 SNTP 实现夏令时?

    再次对我的多个问题表示歉意!!

    谢谢你。

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

    您好!

    SNTP 不支持 DST。 您需要以不同的方式实现自动 dst。 这通常是您安装的每个新设备都要求时区的原因。 这些器件具有针对每个位置的硬编码 dst 表(UTC 偏移量)。

    1月

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

    您好、Jan、

    感谢您的澄清。  

    您能帮我解决 dst 问题以上的问题吗?

    此致

    苏德

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

    您好、Sudep、

    因为 dst 取决于您的位置、所以您需要在互联网上搜索并找到适合您的算法库。 这是我能给你的最好的建议。

    但是、如果您找到现在将适合您的库、它可能会在将来发生变化。 例如、在欧盟国家/地区、将在接下来的几年中取消 DST 时间。

    1月

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

    您好、Jan、

    我从您之前的帖子中了解到了这一点。

    我要求就 dst 问题之上的两个问题发表意见,它们是  

    1) 1)如果我的笔记本电脑没有运行 NTP 服务器、如何为此设置 NTP 服务器?

    当 NTP 服务器设置了我们知道的 IP 地址时、如何调用 API 并传递服务器地址?  

    我没有找到任何有关将 SNTP 与服务器地址一起使用的示例。

    如果您有任何示例、请向他们指出、这将对我非常有帮助。

     

    2) 2)如果在 AnyPoint、我的 NTP 服务器未能提供时间、那么我如何仍然在系统上显示一个密切相关的时间?  

    我是否应该使内部计时器与从 NTP 服务器接收的时间保持同步、并在收到来自 NTP 服务器的更新时继续更新计时器?

    应该是软件计时器还是硬件计时器?

    正在等待您的回复。

     


    此致

    苏德

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

    您好、Sudep、

    我不使用 TI SNTP 代码、因此我的答案可能与示例 TI 代码不准确。 我使用自己的 SNTP 代码和过程通过网页实现时间同步。 很遗憾、我无法分享我的代码。

    您的问题答案:

    1) 1)如果我的笔记本电脑没有运行 NTP 服务器、如何为此设置 NTP 服务器?

    这取决于您的笔记本电脑上使用的操作系统。 在 Linux 计算机上,您需要运行正确的守护程序,在客户端 Windows 上,您应该使用第三方应用程序,在 Windows 服务器上,您需要启用 SNTP 服务器功能。

    当 NTP 服务器设置了我们知道的 IP 地址时、如何调用 API 并传递服务器地址?

    是的、这可能是一个问题。 通常采用通过 DHCP 选项(选项042)传输 SNTP 服务器地址的方式、但 CC3220器件不支持此功能。 另一个选项是通过 Web 或使用零配置协议(如 mDNS/Bonjour 或 LLMNR)来配置 IP。

    我没有找到任何有关将 SNTP 与服务器地址一起使用的示例。

    我不是 TI SNTP 示例的专家、但如果您插入 IP 地址而不是域名、则没有理由不起作用。

    但是、如果您需要一次性设置 RTC、则可以合理地实现从网络到网络的时间设置。

    2) 2)如果在 AnyPoint、我的 NTP 服务器未能提供时间、那么我如何仍然在系统上显示一个密切相关的时间?

    如果我没有错、TI 示例(SNTP 库)会根据需要同步内部时间。 这意味着一次是时间同步、您可以根据需要读取内部 RTC 时间。 如果需要、库将与 NTP 服务器同步时间。

    我是否应该使内部计时器与从 NTP 服务器接收的时间保持同步、并在收到来自 NTP 服务器的更新时继续更新计时器?

    这样就可以使用 TI SNTP 库。 请查看此库的源代码。

    应该是软件计时器还是硬件计时器?

    由你决定。 但与此类似、TI SNTP 库也可为您提供。 BTW... 这话什么意思是软件计时器?

    1月

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

    您好、Jan、

    感谢您的详细博文。

    是否有人可以评论在使用 TI SNTP 封装的问题上如何将 IP 地址传递到 SNTP_getTimebyAddr () API?

    我已经从 SDK 中运行了 local_time 示例、在提供偏移后、我可以将时钟与系统时钟同步。 该同步时钟是否正在 CC3220的计时器模块中更新? 如果是、那是什么计时器? 一个常规计时器模块还是一个 RTC?

    Jan、根据软件计时器、我指的是 RTOS_TIMER 模块

    谢谢、此致

    苏德  

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

    您好、Sudep、

    使用 SNTP getTimeByAddr()的示例,您可以在 sntp.h 的源代码(\source\ti\net\SNTP sntp.h)中找到。

    在本地时间通过 API sl_DeviceSet (sl_DEVICE_General、sl_DEVICE_General_DATE_TIME、... 请参阅位于\source\ti\net\utils\clock_sync.c 的函数 ClockSync_update (void)

    1月

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

    您好、Jan、

    谢谢你。 我会研究您的建议。

    此致

    苏德

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

    您好、Jan、

    我有疑问。 我可以将 RTC 用于非电池供电的应用吗?

    就我所知,我们不能。 那么、您能澄清一下吗?

    谢谢!

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

    您好!

    是的、您可以将内部 RTC 用于非电池供电的应用、但电源断电后 RTC 的内容(时间)将丢失。

    在这种分配中、有必要使用具有小型备用(纽扣电池)的外部 RTC。

    1月

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

    您好、Jan、

    案例 LocalTime_GetRTCTime:
    rtcTime = ClockSync_getRTC();
    状态= ClockSync_convert (rtcTime、&netTime);
    if (status =0)

    UART_PRINT ("RTC 时间:%s \n\r\n、asctime (&netTime));
    返回;

    其他

    UART_PRINT ("error");

    中断;

    我在 local_time 示例中添加了这段代码作为 switch 语句的最后一个例子。 因此,我要尝试的是,如果我没有从 NTP 服务器获得响应(如第二次或第三次 get_time()尝试),那么我的系统仍然必须向用户显示一些近乎准确的时间。

    因此,在第一次尝试 get_time()时,我将从服务器获得响应,并且我还将时区设置为330 (印度为5:30小时)。 因此、此时应使用当前值更新 RTC。 如果我在下一次 get_time()尝试中没有得到服务器响应,那么我可以调用上述代码中给出的 RTC 时间。 因此、借助此功能、当 NTP 服务器没有响应时、我的系统应该能够为我提供近乎准确的值。

    但是、当我运行代码并首先运行 get_time()、然后设置 timezone、然后再次运行 get_time()时、一切都正常、并且我的系统时钟与 NTP 时钟对齐。 但是、当我调用 RTC 时间时、它会显示1900年1月1日。

    为什么会发生这种情况?

    当我们调用 get_time()函数时 RTC 是否未更新?

    如果是、如何使用 RTC 来执行此任务?

    谢谢、此致

    深红色 R J

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

    您好!

    抱歉,但我不知道函数 get_time()的内部实现是如何的。 您需要自己解决这个问题。

    如果您深入了解 CC32xx SDK 中的库、您会发现如何使用 CC32xx 内部 RTC。

    使用 RTC 时间的方法之一:

    • API PRCMSlowClkCtrlFastGet ()
    • 带有参数 SL_DEVICE_General SL_DEVICE_GENE_DATE_TIME 的 API sl_DeviceGet ()

    对于 RTC 时间设置、使用 API:

    • SL_DeviceSet (SL_DEVICE_General、SL_DEVICE_General_DATE_TIME、...)

    我建议您密切关注库并确定代码不能正常工作的原因。

    1月

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

    您好、Jan、

    现在、我可以在不涉及 SNTP 功能和 NTP 服务器的情况下获得准确的时间。

    在服务器第一次响应时、在 clocksync_update 函数 ClockSync_CB.diff = rtcTime - netSecs 中完成。 因此、希望 rtcTime 和 NTP 时间之间的差值保持非常接近、在下一次尝试中、我使用当前 RTC 时间和 ClockSync_CB.diff 计算了实际时间。

    这次打印时、它与 NTP 时间非常同步。

    希望这能帮助那些现在或可能面临这一问题的人。

    谢谢、此致

    深红色 R J