你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

SD卡写入文件 插电脑上 无法打开SD卡怎么回事

[复制链接]
wanghailong1314 提问时间:2018-8-21 15:01 /
我SD卡用的是 16G
写入程序如下
FRESULT fr;   //读文件返回值
FIL fsrc,fdst;    //创建文件
FATFS fs;      //
UINT br,bw;  //读写计数
FILINFO finfo;
DIR dir;
char buffer[512];               //从文件中读出数据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卡插入电脑 提示文件目录损坏无法读取 不知道是哪里出问题了?
收藏 评论9 发布时间:2018-8-21 15:01

举报

9个回答
风忆柔情 回答时间: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)


这个呢?

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

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);试试

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

andey 回答时间:2018-8-22 14:05:16
提示: 作者被禁止或删除 内容自动屏蔽
wanghailong1314 回答时间:2018-8-29 11:32:30
andeyqi 发表于 2018-8-22 14:05
建议检查下文件系统的mount read write 接口的返回值,如果mount失败了,格式化下。
...

我mount write 返回值都是OK  read时找不到文件 插电脑上提示文件系统损坏 也不知道怎么回事
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); //错误写成这样,软件没有报错 是因为我在调试的时候在前面定义过一个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蝴蝶豆 +4 收起 理由
zero99 + 4 结帖奖励

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版