大家好,
在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.
现在我的问题是,出错的地方找到了,可不清楚错误数值产生的原因,所以请教一下诸位?
谢谢!
Steven Liu1:
FR_NO_FILESYSTEM,应该没能正常识别出来你的文件系统,你要读的这个SD卡是啥格式的?FAT32?能正常在电脑上进行读写吗?
STONE:
回复 Steven Liu1:
谢谢提醒!
问题找到了,不过还是得请教一下原因?
在移植代码时 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);的作用是内存对齐, 和这个问题的具体关系是什么呢?
谢谢!