wm8978 录音时,打开sd卡很多时候都会出错,是什么情况 ?

2019-07-20 14:42发布

wm8978 录音时,打开sd卡很多时候都会出错,是什么情况 ?

出错界面如下:
rec-err.png

正常如下:
rec-ok.png



但是正常打开并写入的次数很少,

单独测试sd卡读写又完全没有问题,不知为何会这样啊 ??????????????








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
hpdell
2019-07-21 00:21
zuozhongkai 发表于 2017-5-6 17:29
都提示你“write error”了!检查什么情况下输出write error!然后调试代码

我单独测试读写sd卡都是没有问题的
  Fatfs_FileCopy((const TCHAR*)"0:music/020别再让我为你受折磨.mp3", (const TCHAR*)"0:_music/_020别再让我为你受折磨.mp3");

  Fatfs_FileCopy((const TCHAR*)"0:music/020别再让我为你受折磨.mp3", (const TCHAR*)"0:_music/_021别再让我为你受折磨.mp3");

  Fatfs_FileCopy((const TCHAR*)"0:music/020别再让我为你受折磨.mp3", (const TCHAR*)"0:_music/_022别再让我为你受折磨.mp3");



上述复制三个文件,最后使用电脑读取并播放,完全没有任何问题

复制函数如下:
FRESULT Fatfs_FileCopy(const char *Source_address, const char *Create_target_file)
{
#if   1     // 使用外部 sdram 作为 缓冲测试

        FATFS *fatfs_1, *fatfs_2;
       
        FIL *fsrc,*fdst;
        FRESULT res;                         // FatFs 函数公共结果代码
        UINT br, bw;                         // 文件读/写字节计数
       
  uint8_t  * RWbuf;

  fsrc = (FIL *)mymalloc(SRAMEX, sizeof(FIL));   // 使用外部 sdram 作为缓存
  fdst = (FIL *)mymalloc(SRAMEX, sizeof(FIL));

  fatfs_1 = (FATFS *)mymalloc(SRAMEX, sizeof(FATFS));
  fatfs_2 = (FATFS *)mymalloc(SRAMEX, sizeof(FATFS));  

  RWbuf   = (uint8_t *)mymalloc(SRAMEX, 4096);
       
        f_mount(fatfs_1, Source_address, 0);                                        // 注册工作区
        f_mount(fatfs_2, Create_target_file, 0);

        res = f_open(fsrc, Source_address, FA_OPEN_EXISTING | FA_READ);                //打开存在的源文件,如果没有则返回错误
        if(res)
                printf("打开源文件错误 = %d.. ... ? ", res);
       
        res = f_open(fdst, Create_target_file, FA_CREATE_ALWAYS | FA_WRITE);        //打开目标文件,如果没有则创建
        if(res)
                printf("打开目标文件错误 = %d.. ... ? ", res);       
       
        // 拷贝源文件到目标文件
        for (;;)
        {
                res = f_read(fsrc, &RWbuf[0], (4096), &br);
                if (res || br == 0) break;                 // 文件结束错误
               
                res = f_write(fdst, &RWbuf[0], br, &bw);
                if (res || bw < br) break;                 // 磁盘满错误
        }       
       
        // 关闭打开的文件
        res = f_close(fsrc);
        if(res)
                printf("关闭源文件错误 = %d.. ... ? ", res);
       
        res = f_close(fdst);
        if(res)
                printf("关闭目标文件错误 = %d.. ... ? ", res);
       
        f_mount(NULL, Source_address, 0);
        f_mount(NULL, Create_target_file, 0);          

        myfree(SRAMEX,fsrc);            //释放内存
        myfree(SRAMEX,fdst);            //释放内存  
  myfree(SRAMEX,fatfs_1);          //释放内存
        myfree(SRAMEX,fatfs_2);          //释放内存   
  myfree(SRAMEX,RWbuf);            //释放内存

}

一周热门 更多>