SD卡写入文件 插电脑上 无法打开SD卡怎么回事
我SD卡用的是 16G写入程序如下
FRESULT fr; //读文件返回值
FIL fsrc,fdst; //创建文件
FATFS fs; //
UINT br,bw;//读写计数
FILINFO finfo;
DIR dir;
char buffer; //从文件中读出数据BUFF
const BYTE textFileBuffer[]="123456";
int main(void)
{
bsp_init();//串口初始化
while(SD_Init())
{
printf("error\r\n");
}//SD卡初始化
fr=f_mount(&fs,"0:",1);//创建工作区
fr=f_open(&fdst,"0:/456.txt",FA_CREATE_NEW|FA_WRITE);//建立一个TXT文件
if(fr==FR_OK)
{
fr=f_write(&fdst,textFileBuffer,sizeof(textFileBuffer)-1,&bw);//往文件写入123456
}
else if (fr==FR_EXIST)
{
printf("1");
}
fr=f_close(&fdst);//关闭文件
fr=f_open(&fdst,"0:/456.txt",FA_READ);//以只读的方式打开文件单步运行时前面fr的返回值都时FR_OK ,运行完这步FR=FR_NO_file(0x04)
br=1;//¶Á¼ÆÊý
while(1)
{
fr=f_read(&fdst,buffer,sizeof(buffer),&br);
if(fr||br==0)break;
}
f_close(&fdst);
while (1)
{
}
}
把SD卡插入电脑 提示文件目录损坏无法读取 不知道是哪里出问题了?
帮你顶顶吧 /*##-3- Create a FAT file system (format) on the logical drive #########*/
/* WARNING: Formatting the uSD card will delete all content on the device */
if(f_mkfs((TCHAR const*)SDPath, FM_ANY, 0, buffer, sizeof(buffer)) != FR_OK)
这个呢? butterflyspring 发表于 2018-8-21 16:00
/*##-3- Create a FAT file system (format) on the logical drive #########*/
/* WARNING: Formatt ...
我在创建工作区之后运行这个格式化命令f_mkfs("0:",FM_ANY,0,buffer,sizeof(buffer)) ,也就是新的SD卡首次创建文件时必须有这条语句才行?我看网上其他人的例程都没有这条语句
把代码逐行推敲,怀疑的地方修改成注释,重新尝试 while(1)前加f_mount(NULL, "0:", 1);试试 建议检查下文件系统的mount read write 接口的返回值,如果mount失败了,格式化下。
andeyqi 发表于 2018-8-22 14:05
建议检查下文件系统的mount read write 接口的返回值,如果mount失败了,格式化下。
...
我mount write 返回值都是OKread时找不到文件 插电脑上提示文件系统损坏 也不知道怎么回事 feixiang20 发表于 2018-8-22 00:32
把代码逐行推敲,怀疑的地方修改成注释,重新尝试
我创建了工作区,在工作区创建txt文件返回值都是OK 插电脑上看不到创建的文件 提示文件损坏,不知道什么原因
费了老大劲 终于找出问题所在 原来在移植disko.c文件中的disk_write()函数时,由于粗心大意掉了一个字母所导致,哎 ....以后写程序可得小心。。。
if _USE_WRITE
DRESULT disk_write (
BYTE pdrv, /* Physical drive nmuber to identify the drive */
const BYTE *buff, /* Data to be written */
DWORD sector, /* Start sector in LBA */
UINT count /* Number of sectors to write */
)
{
u8 res=0;
if (!count)return RES_PARERR;
switch (pdrv)
{
case SD_CARD :
res=SD_WriteDisk((u8*)buff,sector,count); //本应该这样
//res=SD_WriteDisk((u8*)buf,sector,count); //错误写成这样,软件没有报错 是因为我在调试的时候在前面定义过一:Q个buf【512】数组
while(res)
{
SD_Init();
res=SD_WriteDisk((u8*)buff,sector,count);
}
break;
default:
res=1;
}
if(res==0x00) return RES_OK;
else return RES_ERROR;
}
#endif
页:
[1]