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.

[参考译文] TMS320F280025C:为 SD 卡中的.txt 文件提供长文件名

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1081400/tms320f280025c-giving-long-file-names-to-the-txt-file-in-sd-card

部件号:TMS320F280025C
“线程: C2000WARE”中讨论的其它部件

嗨,我正在将 SD 卡与 TMS320F280025C 连接。

我在 以下路径中使用了 TI 提供的 Fatfs 文件:C:\ti\C2000\C2000Ware_4_00_00\device_support\f2837xd\common\depreced\third-party_fatfs。

我可以在 SD 卡中创建文件并进行访问,但给出长文件名(长度> 8)会导致“无效文件名”错误, 并且仅采用8.3格式。

在每个使用文件名的函数中,都没有文件长度宏,长度8是硬编码的,

是否有任何方法可以提供长文件名或有任何更新的驱动程序文件?

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

    C2000Ware 4.00.00中的 FatF 版本非常旧,我认为它不能提供切换到 LFN 模式的功能。 我相信,在更新的修订中可以找到它,但:

    http://elm-chan.org/fsw/ff/doc/appnote.html#lfn

    请注意,我们很快就会发布一个 C2000Ware 版本,其中将包括更新版本的 FatF 以及一些更新的示例。 它应在下周的这个时候推出。

    惠特尼

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

    好的。 让我等待新版 C2000Ware,或者有人只分享 更新后的 FATFS 文件,以便我可以更快地开发。 否则,我必须等待一周,或者等到新版本发布。

    我需要在 SD 卡上创建分区,一旦分区内存已满,请删除分区的所有内容。 我无法在可用的 FATFS 函数中执行此操作。

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

    如果您想尝试更新,C2000Ware 4.01.00下载版现在就已上线。

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

    您好,使用了最新的 c2000Ware  4.01.00。它的 FatF R0.13a 位于 C:\ti\C2000\C2000Ware_4_01_00_00\libraries\fatfs 中

    我面临以下问题:

    1)创建的.txt 文件的名称总是带有大写字母,即使我是用小写字母表示。

    2)即使设置 了 FF_USE_LNF>=1,文件名也会被截断,长度为8个字符,第7个字符和第8个字符为“~1”。

    3)使用 fdisk 创建分区(8GB SD 卡中有两个50%的分区),创建大约两个13 MB 的卷,并将其保留为未分配。

    对上述问题有什么想法?

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

    更改后,您是重新编译库还是直接在项目中使用库中的源代码?

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

    我直接使用所有源文件

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

    如果您在项目中直接使用源文件,那么您是否在链接器选项中使用编译的 fatfs.lib 文件?

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

    是的

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

    因此,对于文件名,它不区分大小写。 我们将该库移植到了这里:

    elm-chan.org/.../filename.html

    该港口旨在用作最低限度的 FATFS 港口。  

    对于长文件名,您是否知道它在代码中的哪个位置出现故障? 我建议您在论坛 上发布 http://elm-chan.org/fsw/ff/bd/

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

    大家好,我使用的方法如下:

    #define FF_USE_LFN 3.

    #define FF_MAX_LNN 255

    #define FF_LFN_Unicode 0

    #define FF_code_page 437

    fresult = f_open (&File_PNTR,"0:FILENAMEFILENAME.txt",fa_create_always | fa_write|fa_read);

    在这项功能中,  

    在第3593行 ,res= dir_register(&dj);它将作为“FILENA~1TXT”分配给 dj.dir。

    在第3657行 ,fp->dir_ptr = dj.dir;它正在分配给文件指针。

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

    嗨...我实际上解决了 f_disk()中的分区问题。

    问题出在 sdspi.c 文件, SDSPI_getNumSecors 函数中。

    可变 csize 应为 UINT32_t 或 该扇区所需的 typecast =(UINT32_t) csize <<<10;

    我使用的是8GB SD 卡,因为变量在这里溢出,所以它计算的卡扇区计数错误,因此分区大小错误。

    目前我正在处理 LFN 问题,如果您对此有更新,请告诉我。

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

    这是一项了不起的工作,Chandran。 感谢您报告部门规模问题。 我在下面对 sdspi.c 文件的更新是否正确?

    /*
     *  ======== SDSPI_getNumSectors ========
     */
    uint32_t SDSPI_getNumSectors(SDSPI_Handle handle)
    {
        uint8_t              n;
        uint8_t              csd[16];
        uint32_t             csize;
        uint32_t             sectors = 0;
    
        assertCS(handle->spiCsGpioIndex);
    
        /* Get number of sectors on the disk (uint32_t) */
        if ((sendCmd(handle->spiHandle, CMD9, 0) == 0) &&
            recvDataBlock(handle->spiHandle, csd, 16)) {
            /* SDC ver 2.00 */
            if ((csd[0] >> 6) == 1) {
                csize = csd[9] + (csd[8] << 8) + 1;
                sectors = (uint32_t)csize << 10;
            }
            /* MMC or SDC ver 1.XX */
            else {
                n = (csd[5] & 15) + ((csd[10] & 128) >> 7) +
                    ((csd[9] & 3) << 1) + 2;
    
                csize = (csd[8] >> 6) + ((uint16_t) csd[7] << 2) +
                    ((uint16_t) (csd[6] & 3) << 10) + 1;
                sectors = (uint32_t)csize << (n - 9);
            }
        }
    
        deassertCS(handle->spiCsGpioIndex);
    
    
        return (sectors);
    }
    

    我将类型更改为32位。 当我查看其他端口时,它们的 csize 都是16位的“SDC 版本2”。

    NIMA

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

    这些是我在下一个版本的内部 TI 响应中所做的更改。

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

    你好。是的,这是正确的。 谢谢。 还需要检查 LNN 问题。  

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

    昌德兰  

    好的,我已经将这些修复程序集成到了我的一侧,用于下一个 C2000Ware。 再次感谢调试此操作。 第三方图书馆总是需要几条 trys 才能使其完美。

    NIMA

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

    您好...有人能为 SD 卡中的文件创建长文件名吗? 如果是,请分享一个示例。

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

    昌德兰

    您可以共享代码以创建这些文件吗?

    NIMA

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

    我直接告诉了你

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

    好的,我将看一下。

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

    大家好,因为我无法解决问题,我对文件名进行了编码,并将其限制在8个字符的长度内,现在不使用 LFN。如果我得到了答案,我将在一个线程中发布。 谢谢你。

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

    谢谢你钱德兰。 如果我找到答案,我也会通知您。