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.

[参考译文] TM4C129XNCZAD:将文件写入同一 SDCard 上的两个不同卷

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1190418/tm4c129xnczad-write-files-to-two-different-volumes-on-the-same-sdcard

器件型号:TM4C129XNCZAD

我有一个带有 SDCard 的 tm4c129xnczad 微控制器、它通过 SPI3连接到它  

1 GB 大小的 SDCard 有2个卷,每个卷大约500 MB

我想将数据写入每个可以访问第一个卷的文件中、但无法通过我所用的代码访问第二个卷、我所执行的步骤就是这样

首先,我开始安装这两卷  

    EIO_vmturnSDCardPowerON();
    UTIL_vNonOSDelayMiliSeconds(200);/* this delay is gurantee the proper rest for the SD card */
    /* Mount and register the FSHELL Card */
    SDSPI_Params_init(&objstrsdspiParameters);
    objsdspiHandle = SDSPI_open(Board_SDSPI0, DRIVE_NUM, &objstrsdspiParameters);
    if(objsdspiHandle == STD_NULL)
    {
        FSHELL_vmLogError0(&objstrFSHELLModuleInfoType, "Can't mount SD card");
    }
    else
    {
        FSHELL_vmLogActivity1(&objstrFSHELLModuleInfoType, "SD card is mounted Drive:%u", DRIVE_NUM);
        bSdMountState = STD_TRUE;
    }
    objsdspiHandle = SDSPI_open(1, 1, &objstrsdspiParameters);
    if(objsdspiHandle == STD_NULL)
    {
        FSHELL_vmLogError0(&objstrFSHELLModuleInfoType, "Can't mount SD card");
    }
    else
    {
        FSHELL_vmLogActivity1(&objstrFSHELLModuleInfoType, "SD card is mounted Drive:%u", 1);
        bSdMountState = STD_TRUE;
    }

然后,我使用 了 studio.h   (fopen、fclose、fwrite)函数中 的标准文件 API,这样

#include <stdio.h>

function (){
...
INT8S *ps8ProgFilePath = "fat:0:/ProgBlocks/Blocks.txt";
INT8S *ps8ProgFilePath_1 = "fat:1:/ProgBlocks/Blocks.txt";
FRESULT objFRESULT = FR_DISK_ERR;
FILE *pSourceFile;
...

objFRESULT = f_mkdir("/ProgBlocks");
if((objFRESULT == FR_OK)||(objFRESULT == FR_EXIST)) /* if folder is created or alredy existed */
{
pSourceFile = fopen((const INT8S*)ps8ProgFilePath, "a");
if(pSourceFile == STD_NULL)
{
SCFGM_vmLogError1(&objstrSCFGMModuleInfoType, "\"%s\" could not be created", (INT32U)ps8ProgFilePath);
}
else
{
u32NumBytesWritten = fwrite((INT8S*)ps8Data,1,(MAX_BLOCK_ID_STRING+(u32BlockLen*3)),pSourceFile);
if (u32NumBytesWritten != (MAX_BLOCK_ID_STRING+(u32BlockLen*3)))
{
SCFGM_vmLogError1(&objstrSCFGMModuleInfoType, "\"%s\"Err wrt Blk", (INT32U)ps8ProgFilePath);
}
}
if(fclose(pSourceFile) != 0)
{
SCFGM_vmLogError1(&objstrSCFGMModuleInfoType, "\"%s\" could not be Close", (INT32U)ps8ProgFilePath);
}
}
....
}

因此,我可以访问第一个卷“fat:0:”,但无法以相同的方式写入或甚至访问第二个卷“fat:1:”

那么、问题是、我甚至可以访问同一 SD 卡中的2个卷、如何访问?  

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

    Hazem、您好!

    TivaWare 随附的 SD 卡库不是 TI 开发的、它们是第三方库。 我们无法支持这一问题、因为我们缺乏 FATFS 库的开发知识。 您需要联系该第三方库的开发人员、了解 是否可以访问多个卷。

    此致、

    Ralph Jacobi