依据正点原子的FATFS 例程编写
能挂载但是无法写入
double imu=-32.12;
char tb[20];
sprintf(tb,"%lf",imu);
f_mount(fs[0],"0:",1); //挂载SD卡
while(res = f_mount(fs[0],"0:",1)) //挂载SD卡失败
{
printf("\r\nMount SD Card Error!");
delay_ms(500);
}
while(exf_getfree("0:",&total,&free)) //得到SD卡的总容量和剩余容量
{
printf("\r\nSD Card Fatfs Error!\r\n");
delay_ms(200);
LED0_Toggle;//DS0闪烁
}
mf_scan_files("0:");
FIL fil; //文件对象
UINT br; //f_read函数返回已读出的字节数
int size;
//打开一个只读的文件
f_open(&fil,"0:/imu1.txt",FA_WRITE);
f_write(&fil,tb,sizeof(tb),&bw);
f_close(&fil);
f_open(&fil,"0:/imu1.txt",FA_READ);
//移动打开的文件对象的文件读/写指针 0:指向文件开头
f_lseek(&fil,0);
size = f_size(&fil);
printf("%d\n",size);
char buff[size];
//从SD卡中读出数据
f_read(&fil,buff,size,&br);
//关闭文件
f_close(&fil);
printf("%s\n",buff);
printf("test");
////
//
//
结果如下
202 3-03-2218:54:17.829]
RX:BE中统志口LCDID:ffff
KAND ID:0xdc909556
total block num:4096
goodblocknum:4096
yalid block num:3809
NAND ID:0xdc909556
total blocknum:4096
good blocknum:4096
yalid block mum:3809
的0:/imul.txt
Otest
参考GPT:从你提供的代码和结果来看,问题可能出在写文件的部分。以下是我在代码中发现的问题和一些建议:
1 在打开文件的时候,你使用了 FA_WRITE 属性,这意味着你要以写模式打开文件。但是,你在调用 f_read() 之前并没有往文件中写入任何数据,因此文件的大小为零,读取到的数据也就是空的。建议你将属性改为 FA_READ,以只读模式打开文件。
2 当你在使用 f_read() 读取文件时,你传递了一个名为 tb 的缓冲区作为输入参数。但是,在之前的代码中,你并没有定义或初始化这个缓冲区。建议你将缓冲区的定义和初始化放到文件读取操作的前面,如下所示:
#define TB_SIZE 1024
char tb[TB_SIZE] = {0};
3 在调用 f_read() 时,你传递了一个名为 bw 的变量作为输入参数。但是,你没有定义或初始化这个变量。建议你将 bw 的定义和初始化放到文件读取操作的前面,如下所示:
UINT bw = 0;
4 最后,如果你要在文件中写入数据,你应该使用 f_write() 函数而不是 f_read()。例如,如果你要写入一个名为 buff 的缓冲区,可以使用以下代码:
f_open(&fil, "0:/imu1.txt", FA_WRITE | FA_OPEN_ALWAYS);
f_write(&fil, buff, strlen(buff), &bw);
f_close(&fil);
你可以将 strlen(buff) 替换为你要写入的字节数,或者使用 sizeof(buff) 来写入整个缓冲区的内容。
希望这些建议可以帮助你解决问题。