sd卡无法创建文件
res返回时013.提示FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */我用pc格式化了啊。怎么还不行呢。底层的驱动我都测试过,应该没问题啊!!!求讨论
int main(void)
{
unsigned char res;
unsigned int i=0;
FIL file;
FATFS fs;
UART0_INIT();
uart0_puts("start\r\n"); //debug
spi_init();
res=sd_init();
if(res) uart0_puts("sd_init_error");
else uart0_puts("sd_init_succeed"); //debug
res=f_mount(0,&fs);
if(res) uart0_puts("f_mount_error");
else uart0_puts("f_mount_succeed"); //deug
// res=f_mkfs(0,0,0);
//if(res) uart0_puts("f_mkfs_error");
// else uart0_puts("f_mkfs_succeed"); //debug
res=f_open(&file,"a.txt",FA_CREATE_ALWAYS|FA_WRITE);
if(res) uart0_puts("f_open_error");
else uart0_puts("f_open_succeed"); //debug
uart0_putc(res/100+'0');
uart0_putc(res/10%10+'0');
uart0_putc(res%10+'0'); //debug
res=f_close(&file);
if(res) uart0_puts("close_error");
else uart0_puts("close_succeed");
for(i=0;i<1024;i++){
buf1='M';
}
uart0_puts("\r\nend"); //debug
sd_power_off();
while(1);
return 0;
} 楼主问题搞定了吗,我也是类似的问题,底层操作都通过了,就是 无法创建 文件,提示没有有效的FAT 卷,查了很多资料没到合适的方法解决 是ads1.2的编译问题,我弄好了。
1.ads1.2环境编译fatfs存在bug,check_fs部分只是把语法变通一下才能有效果
我也花了好长时间才知道,你试一下吧,看看代码倒数几行和ff。c里面的格式不同,按下面的改过来/*-----------------------------------------------------------------------*/
/* Load a sector and check if it is an FAT Volume Boot Record */
/*-----------------------------------------------------------------------*/
static
BYTE check_fs ( /* 0:FAT-VBR, 1:Valid BR but not FAT, 2:Not a BR, 3:Disk error */
FATFS *fs, /* File system object */
DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */
)
{
DWORD temp;
if (disk_read(fs->drv, fs->win, sect, 1) != RES_OK) /* Load boot record */
return 3;
if (LD_WORD(&fs->win) != 0xAA55) /* Check record signature (always placed at offset 510 even if the sector size is >512) */
return 2;
temp = (LD_DWORD(&fs->win) & 0xFFFFFF);
if (temp == 0x544146) /* Check "FAT" string */
return 0;
temp = (LD_DWORD(&fs->win) & 0xFFFFFF);
if (temp == 0x544146)
return 0;
return 1;
}
页:
[1]