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.

[参考译文] TMS320F28379D:如何从 SD 卡读取数据

Guru**** 2540720 points
Other Parts Discussed in Thread: LAUNCHXL-F28379D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1357510/tms320f28379d-how-to-read-data-from-a-sd-card

器件型号:TMS320F28379D
主题中讨论的其他器件:LAUNCHXL-F28379DC2000WARE

大家好、我使用的是 LAUNCHXL-F28379D、具体而言、我想使用 SPI 读取 micro SD 卡中的文本文件中的数据。  

我听说之前版本的 C2000Ware 中有一个相关示例、我的版本(C2000Ware 5_01_00_00)中没有这个示例。 我尝试自己创建一个类似的项目、但遇到以下问题:

1、以前一版本的例子来看,我看到库中有操作文本文件的函数,位于"弃用"文件夹内的"fatfs"文件夹内,在我的版本中是不存在的;  

2.我尝试将 "fatfs"文件夹的路径包含  在版本5_01_00_00 (...\c2000Ware_5\C2000Ware_5_01_00_00\utilities\thire_party\f2837xd\fatfs)的 Properties-->C2000 Compiler-->Include Options (包含选项)中,然后在我的项目中添加文件夹"C2000Ware_5_fatfloatfs\thire\c2000Ware\f_thire\c2000Ware\f2800\f5\fatfs\f2800\utilities\c2000Ware\fotfs)中添加文件夹。  这样、当我尝试构建项目时会出现一些错误;

3.我也尝试从 C2000Ware 的4_02_00_00版本导入文件夹"已弃用"并将其包含在编译器路径中、但编译操作后会出现一些错误。  

请提供解决此问题的指导。  

提前感谢您。  

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

    您好!  

    这些示例适用于以下路径中的所有较新器件:

    C2000Ware_5_01_00_00\driverlib\f2838x\examples\C28x\sdspi

    这些示例尚不适用于 F28379D、但我会进行移植并在5月6日星期五之前分享这些示例。  

    同时、您可以查看 C2000ware 中的可用示例(如上所述)、并开始开发应用程序。  

    谢谢。  

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

    感谢您的建议。  

    按照您所示路径中的示例、通过使用附带的库并与我的电路板(F28379D)相关的库适当修改 f2838x 的示例代码、我已成功实现了电路板和 SD 卡读取器之间的通信。  

    然而,随着我在该项目中取得进展,出现了其他问题:  

    1.我需要从 SD 卡上的一个文本文件中读取一定数量的值。 使用 f_read 函数、会将文件的所有内容放入单个数组中、占用大量内存、并导致以下警告:"#10210-D 创建默认大小为0x400的".sysmem"段;使用-heap 选项更改默认大小"。 在本例中、在 main 函数中、我调用在另一个.c 文件中定义的函数、在该文件中读取文本文件、但保存文本的数组不会保留在函数调用的末尾。  



    2.为了节省内存,我尝试使用 f_gets 函数来一次处理一行文本,进行分析,然后用下一行的文本覆盖阵列。 但是、在这种情况下、编译时会发生以下错误:"#10234-D unresolved symbols remain"。 这表明 f_gets 符号未定义、尽管它与在同一代码中使用的其他函数位于同一库中、并且它们不会产生相同的错误(例如 f_open)。 下面我报告用于最后一个问题的代码。 在本例中、我在同一.c 文件中读取文本文件并对其进行分析、但同样为此、目标是在主文件中调用的函数中分析文本文件。  

    //包含的文件
    //
    #include "driverlib.h"
    #include "device.h"
    #include "board.h"
    #包含
    #包含

    #包含
    #包含


    uint16_t SDFatFS_CONFIG_COUNT = 1;
    SDFatFS_Object sdfatfsObject;

    SDSPI_Object SDspiObject ={
    .spiHandle = mySDCardSPI_BASE、
    .spiCsGpioIndex = mySDCardCS
    };

    SDFatFS_Object* SDFatFS_CONFIG []={&sdfatfsObject};

    SDSPI_Handle sdspiHandle =&sdspiObject;

    /*字符串转换宏*/
    #define STR_(n)#n
    #define STR (n) STR_(n)

    /*用于 FatFs 的驱动器编号*/
    #define DRIVE_NUM 0

    const char inputfile[]= STR (DRIVE_NUM)":input.txt";
    const char outputfile[]= STR (DRIVE_NUM)":output.txt";

    FIL src;
    FIL dst;

    unsigned int filesize;
    FRESULT 结果;
    //
    //主菜单
    //
    空 main (void)
    {
    //
    //初始化设备时钟和外设
    //
    device_init();

    //
    //禁用引脚锁定并启用内部上拉。
    //
    device_initGPIO();

    //
    //初始化 PIE 和清除 PIE 寄存器。 禁用 CPU 中断。
    //
    interrupt_initModule();

    //
    //使用指向 shell 中断的指针初始化 PIE 矢量表
    //服务例程(ISR)。
    //
    interrupt_initVectorTable();

    //
    //板初始化
    //
    Board_init();

    SDFatFS_init();
    SDFatFS_Handle SDFatFS_Handle = SDFatFS_open (sdspiHandle、drive_NUM);
    如果(Fatsdfs_Handle == NULL)
    {
    while (1);


    /*为文件副本创建一个新的文件对象*/
    fresult = f_open (&FET src、inputfile、fa_read);

    if (fresult != FR_OK){
    while (1);

    char buf[20];
    f_gets (buf、20、src);

    /*关闭输出文件[]*/
    fresult = f_close (src);
    if (fresult != FR_OK){
    while (1);

    EINT;
    ERTM;

    SDFatFS_Close (SDFatFS_Handle);

    while (1)
    {


    int32_t fatfs_getFatTime (void)
    {
    返回0;

    //
    //结束文件
    //



    再次提前感谢您提供的帮助。  

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

    您好!  

    为了使用 f_gets 函数、需要设置一个特定的宏。 操作步骤如下:

    1.从以下路径将以下工程导入 CCS -> c2000_fatfs_f2837xd:C2000Ware_5_02_00_00\libraries\fatfs\ccs  

    2.访问 ffconf.h 并在第28行进行以下更改

    #define FF_USE_STRFUNC	1

    3.编译工程并确保将生成的 fatfs.lib 链接到当前正在使用的工程中。  

    谢谢。