wanghailong1314 发表于 2018-8-21 15:01:37

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卡插入电脑 提示文件目录损坏无法读取 不知道是哪里出问题了?

风忆柔情 发表于 2018-8-21 15:09:41

帮你顶顶吧

butterflyspring 发表于 2018-8-21 16:00:19

/*##-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)


这个呢?

wanghailong1314 发表于 2018-8-21 17:15:13

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卡首次创建文件时必须有这条语句才行?我看网上其他人的例程都没有这条语句

feixiang20 发表于 2018-8-22 00:32:46

把代码逐行推敲,怀疑的地方修改成注释,重新尝试

huangyanga 发表于 2018-8-22 09:19:16

while(1)前加f_mount(NULL, "0:", 1);试试

andeyqi 发表于 2018-8-22 14:05:16

建议检查下文件系统的mount read write 接口的返回值,如果mount失败了,格式化下。

wanghailong1314 发表于 2018-8-29 11:32:30

andeyqi 发表于 2018-8-22 14:05
建议检查下文件系统的mount read write 接口的返回值,如果mount失败了,格式化下。
...

我mount write 返回值都是OKread时找不到文件 插电脑上提示文件系统损坏 也不知道怎么回事

wanghailong1314 发表于 2018-8-29 11:35:46

feixiang20 发表于 2018-8-22 00:32
把代码逐行推敲,怀疑的地方修改成注释,重新尝试

我创建了工作区,在工作区创建txt文件返回值都是OK 插电脑上看不到创建的文件 提示文件损坏,不知道什么原因








wanghailong1314 发表于 2018-8-29 17:25:40

费了老大劲 终于找出问题所在 原来在移植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]
查看完整版本: SD卡写入文件 插电脑上 无法打开SD卡怎么回事