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.

[参考译文] CC3220:如何计算 SD 卡的当前时间

Guru**** 2564090 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/763347/cc3220-how-to-calculate-current-time-for-sd-card

器件型号:CC3220

大家好、
我正在使用以下函数计算表示存储文件时 SD 卡中日期的时间:

int32_t fatfs_getFatTime (空)

time_t 秒;
uint32_t fatTime;
struct tm *pTime;

/*
* TI TIME()返回1900年以来经过的秒数,而其他工具则返回
*从1970年起返回秒数。 但是、TI 和 GNU localtime()
*将 TM TM_year 设置为1900年以来的年数。
*
秒=时间(空);

pTime = localtime (&seconds);

/*
* localtime()将 pTime->TM_year 设置为年数
*自1900年起、因此从 TM_year 中减去80即可获得 FAT 时间
*自1980年起的偏移量。
*
fatTime =((uint32_t)(pTime->TM_year - 80)<< 25)|
((uint32_t)(pTime->TM_mon)<< 21)|
((uint32_t)(pTime->tm_mday)<< 16)|
((uint32_t)(pTime->tm_hour)<< 11)|
((uint32_t)(pTime->TM_min)<< 5)|
((uint32_t)(pTime->TM_sec)>> 1);

返回((int32_t) fatTime);

秒= fatfs_getFatTime();
ts.tV_sec =秒;

但是、除了当前日期之外、其他值也不同、有人能建议我如何表示文件存储在 SD 卡中的确切时间。

谢谢、此致
Sreentha

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

    您好、Sreentha、

    您使用的是 SDK 的哪个版本? 我无法在2_30_00_05中找到 TIME()函数?

    Jesu

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

    您好、Jesu、

    我使用的是 SDK 2_30_00_05,请查看 fatsd SDK 示例中的 fatsd.c 文件。

    time()是 #include 中的通用函数 头文件、我尝试了另一种计算和表示 SD 卡中时间的方法、我在下面进行了解释:

    struct tm t;
    T.TM_year = 54;(2024-1970)
    t.tm_mon = 1;//月、(必须以0 - Jan 格式给出、但在 CCS 中、它接受的格式与1 - Jan 类似)
    t.tm_mday = 1;//月中某天
    T.TM_Hour = 15;
    T.TM_MIN = 20;
    T.TM_sec = 42;
    T.TM_isdst = 0;

    time_t 秒;
    秒= mktime (&t);
    秒=秒;
    display_printf (display、0、0、"从 epoch 开始的秒数=%d\n"、秒);

    struct timespec tms ={
    .tv_sec =秒、
    .tv_nsec = 0
    };

    /*初始化实时时钟*/

    Clock_settime (clock_realtime、&TMS);

    根据上述计算,我得到了正确的 epoch seconds,因为我得到的值与通过  此网站计算得出的 seconds (www.epochconverter.com)类似。

    但是、当我将此值分配给 .tv_sec =秒 时、SD 卡中没有任何日期和时间、通常我必须给出 t.tm_mon = 1;//月(0- Jan)、因为它不起作用、我分配  了 t.m_mon = 1; //月,(1月1日), 我在 SD 卡中得到分配的日期和时间。

    通过这种方法、我也无法始终获得正确的值、例如、如果我提供的是 Jan-31-2024、我获得的是 feb-2-2024、如果我提供的是 Jan-31-2023、我获得的是 feb-3-2023

    我能不能知道我为什么会这样做、是否有用于此计算的文档。

    请帮助我解决此问题。

    谢谢、此致

    ~Sreentha

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

    我进行了一些搜索、找到了以下资源:

    processors.wiki.ti.com/.../Time_and_clock_RTS_Functions
    processors.wiki.ti.com/.../CIO_System_Call_Protocol

    所有 FatFS 功能都是第三方功能、您可以在此处找到相关文档:
    elm-chan.org/.../appnote.html

    如果问题仍然存在、解决方法可能只是解决代码中两天的偏移问题。

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

    您好、Jesu、

    感谢您的回复, 我已经浏览过以下帖子: processors.wiki.ti.com/.../Time_and_clock_RTS_Functions ,但没有关于 SD 卡的时间系统的任何信息。

    但我的理解是:

    /*初始化实时时钟*/

    Clock_settime (clock_realtime、&TMS);

    由于仅使用此功能、我在 SD 卡中获得了不同的时钟时间、

     那么、您能不能建议我使用任何其他函数来设置除该函数之外的实时时钟、  

    谢谢、此致

    ~Sreentha

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

    Clock_settime 是一个 POSIX 函数、我并不完全确定它的工作方式。 可以使用 PRCMSlowClkCtrlMatchSet()访问设置 RTC 匹配值。

    有关 API 的说明、请访问 www.ti.com/.../swru465.pdf 第506页。

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

    我假设我的上一篇帖子由于不活动而解决了您的问题。 如果您有新问题、可以随意创建新主题。

    Jesu