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.

[参考译文] msp430F5329连接到16GB SD 卡

Guru**** 2500605 points
Other Parts Discussed in Thread: MSP430F5329

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/735265/msp430f5329-is-interfaced-to-16gb-sd-card

主题中讨论的其他器件:MSP430F5329MSP-EXP430F5529MSP430WARE

大家好、

16 SD 卡是 msp430f5329控制器的接口、能够使用 SPI 读取和写入数据、并且测试了 FAT32文件系统写入、能够在 SD 卡上创建文本文件、数据能够在单个文本文件中写入、而不是在数据包中写入。

现在、我的问题是重新打开文本文件、而不是进行写入、不了解哪里出错了。   

我正在使用 来自 ti\MSP430Ware_3_50_00_04\examples\boards\MSP-EXP430F5529\MSP-EXP430F5529_UE_Demo_Software\Firmware\Source\FatFS 示例的 FAT 文件系统示例。

在 ff.c 的 F_WRITE()函数中 添加了一个条件、 即要写入大于零的数据包的 NO..   

if (disk_write (fp->fs->drv、wbuff、sect、(byte) cc)!= Res_OK)
abort(FP->FS、FR_disk_ERR);
if (bytes>0)
sect +=1; 

主程序为:

 

WDTCTL = WDTPW + WDTCNTCL + WDTIS_3;//内部参考时钟为时钟源

initGpio();
initClock();
initScia0();
initScia1();
initspib1();
initTimerA0();
initlcd();
initkey();
#ifdef SD_Card
P6OUT |= BIT3;//RS 485使能引脚为高
电平 SCI1_msg ("SD 卡测试..... \n\n");
status=disk_status();
if (status =0)//SD 卡插入
do{
status1=disk_initialize ();
watchdogReset();
while (status1!=0x00);
SCI1_msg ("Diskinitialization Success.....) \n\n");
P6OUT &=~BIT3;

//检查 FTA32文件系统
f_mount (0、&FatFs);
//Data_WRITE_TO_SD_CARD();
if (f_open (&fil、"newfile.txt"、fa_write | fa_create_always)=FR_OK ();f_open (&fil、"newfile.txt"、fwbs"、f_write"、f1


、fwbw、f1、f1、f1、f1、fil、f1、f1、f1、f1、f1、fil、f1、f1、f1、f1

f_close (&fil);

}

//再次将数据写入同一文件中的 SD 卡,现在写入100次

,前提是(f_open (&fil,"newfile.txt",fa_open_existing |fa_write)== FR_OK){//创建文件/

for (i=0;i<100;i++){f_open_existing |fbwbw,

"512)
,fwbw (&1),"fwbw,t1,t1,fwbw 数据存储库


//循环 f_close
(&Fil)的末尾;
}

#endif 

每次仅在 SD 卡上提供第二次数据时、第一次数据不可用、认为第一次数据是写入第二次数据时、

如果我一次性写入、SD 卡上的数据可用。

在发送 f_close (&fil)后思考;它正在写入起始存储器位置意味着、在 f_write()函数 中、创建新的群集链可能会造成问题?   

请帮助我解决问题。

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

    因此、如果我理解正确、您可以向 SD 卡写入一次、数据可用。 但是、如果您再次尝试写入、则无法写入。 我的理解是否正确?
    请清楚说明您在应用中看到的场景、并说明这些场景的结果。

    除此之外、您是否已经调试了代码? 您是否有指示、当您再次尝试写入时会发生什么情况?
    请帮助我了解您的实际问题在详细说明中、以便我可以帮助您解决根本原因。

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

    您能否测试它如何与未修改的 ff.c 一起工作?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Brita Ruelander 和 Tomasz Kocon、感谢您的快速重播。

    Ruelander、
    我的问题是,在发送 f_close()后,使用 FAT32文件系统在 SD 卡中写入数据,下次在同一文本文件中写入数据时,数据将覆盖以前的数据。
    Tomasz kocon、
    使用未修改的 ff.c 文件进行了测试、它还会覆盖先前的数据。

    我的问题得到了解决、

    实际上,在 f_open()函数中,第一次和第二次也使用相同的参数"FA_write| FA_create_alway"
    更改了第二次"fa_open_existing|fa_write"

    在 f_open()函数 fp->fs 始终指定为零(FP->FS =0 )中,第二次调用 f_open()函数时不会激励 fp->fs =0

    f_open()函数 fp->fs = dj.fs;fp->id = dj.fs->id,首次使用 dj.fs 值覆盖 FS 值,

    同时传递 leave FF (dj.fs、res);此处也覆盖 fp->fs 值。

    因此,上述第二次调用 f_open()函数的 AM 不会执行。