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.

[参考译文] MSP432E401Y:保存文件时、SDFatFS 驱动程序不会生成正确的文件创建日期

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1447613/msp432e401y-the-sdfatfs-driver-does-not-generate-correct-file-creation-date-when-saving-a-file

器件型号:MSP432E401Y

工具与软件:

我的固件系统使用 MSP432E401器件、使用 FreeRTOS 并使用作为 TI 驱动程序或第三方提供的 SDFatFS 驱动程序。
我将 SD 卡连接到其中一个 SPI 端口、一切都运行良好。 我可以写入和读取文件而不会出现任何问题。
我的问题是创建文件时日期戳是错误的。 打开文件时、我确实看到了正确的 UNIX 时间、但在查看创建的文件时、文件创建日期未显示相应的日期。

我已在下面设置 Unix 时间。
   SDFatFS_Handle SDHandle = NULL;

   // add_device()应该被调用一次、并用于所有媒体类型
   ADD_DEVICE (fatfsPrefix_2、_msa、ffcio_open、ffcio_close、ffcio_READ、
        ffcio_write、ffcio_lseek、ffcio_unlink、ffcio_rename);

   //初始化实时时钟*
   CLOCK_settime (clock_REALTIME、ts);

   //安装 SD 卡
   sdHandle = mOpenSdCardHandle();

我测试了 TI 提供的示例、其中预设了 Unix 时间、即使在示例中、日期也不正确。 我还注意到,无论你把12月的任何一个月都不被记录为一个文件创建日期。
TI 提供了两个 FatFs 示例:一个不带 RTOS、另一个使用 FreeRTOS。 您可以在两个示例中的任何一个中测试该问题。

需要注意的是、在休眠模块中、我不使用 RTC 的日历工作模式。

感谢任何帮助。



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

    您好!

     我不擅长回答为什么在文件系统上创建文件时日期/时间不正确。 下面示例自述文件中的注释可能会提供一些提示、但我不知道它是否能回答您的问题。  

    TI-RTOS:

    •  timespec 必须使用当前 UNIX 秒数初始化该结构、才能编写具有准确时间戳的文件。 这是因为 time() 它使用的是 BIOS 秒模块而不是 RTS 库函数。

    • 在 Code Composer Studio 中构建时、内核配置项目将与示例一起导入。 该示例引用了内核配置项目、因此会首先编译该项目。 "发布"内核配置是使用的默认工程。 它禁用了许多调试功能。 这些功能包括断言检查、记录和运行时堆栈检查。 有关"发布"和"调试"内核配置之间的详细差异以及如何在这两种配置之间进行切换、请参阅 SimpleLink MCU SDK 用户指南。 "发布"和"调试"内核配置项目可在下找到 /kernel/tirtos/builds /(release|debug)/(CCS|gcc)。

    FreeRTOS:

    •  time()  localtime() 使用和的编译器特定 RTS 库函数。 无需初始化 timespec 结构。

    • 请查看 FreeRTOSConfig.h 头文件、以获取示例配置信息。

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

    感谢您的答复。 我非常感谢。 我使用 FreeRTOS 和 CCS 进行开发。 相关示例是 FreeRTOS 版本、在以下位置提供。

    https://dev.ti.com/tirex/explore/node?node=A__AHVfRL.LbnjqftYVDQ4Tag__com.ti.SIMPLELINK_MSP432E4_SDK__J4.hfJy__LATEST

    我应该清楚地说明文件创建时间不正确的含义、让我更好地说明一下。 我看到月份不正确、剩余的日期和时间值很好。

    看看我在固件实施中使用的示例、我觉得"fatfs_getFatTime (void)"函数可能不正确。 具体而言、后续部分将介绍相关内容。

       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);

    "月份"字段应如下所示。

    ((uint32_t)(pTime->TM_MON+1)<< 21)|

    当我从"tm_mon"调整月份时、创建时间在我测试的 Frertos 实现上正确运行。

    谢谢你。