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.

SD卡调用fopen后出错,回传值为FR_NO_FILESYSTEM的原因?



大家好,

在starteware下面调用SD例程来调试自己制作的开发板,使用例程hsMmcSdRw,调用fmount后,使用f_open后报错。

在文件ff.c中,针对f_open函数一路追踪下去,执行顺序如下:

f_open()->auto_mount()->check_fs()->disk_read()->MMCSDReadCmdSend(),执行完后fs->win[510]仍然为零(错误),

导致函数check_fs()中返回值为2.

if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55)                /* Check record signature (always offset 510) */        

 return 2;

正确的时候fs->win[510]的值为0x55AA.

 

现在我的问题是,出错的地方找到了,可不清楚错误数值产生的原因,所以请教一下诸位?

谢谢!

  • FR_NO_FILESYSTEM,应该没能正常识别出来你的文件系统,你要读的这个SD卡是啥格式的?FAT32?能正常在电脑上进行读写吗?

  • 谢谢提醒!

    问题找到了,不过还是得请教一下原因?

    在移植代码时 f_mount(driveNum, &g_sFatFs);中的变量g_sFatFs,在定义时漏掉了

    #if defined(__TMS470__)

     #pragma DATA_ALIGN(g_sFatFs, SOC_CACHELINE_SIZE);

    我将上面代码代码添加后,rebuilt,connect,load,再次追踪执行后发现fs->win[510]的值是0x55AA,执行正确。

     

    请问下 #pragma DATA_ALIGN(g_sFatFs, SOC_CACHELINE_SIZE);的作用是内存对齐, 和这个问题的具体关系是什么呢?

    谢谢!