原子大大 关于 F767开发板的 FATFS实验

2019-07-20 14:45发布

本帖最后由 simms01 于 2017-3-29 12:38 编辑

在开发板 FATFS实验里面

我将一个文件(是个字库)   从sd卡 复制到 NANDFLASH   ,但是发现复制完成后  部分数据是错误的(大约有一半的数据是错的 每次都不一样).
而且每次复制  读出错误的数据 位置都不一样 。  有时候 “广”字的数据了 再复制一次 “广”字对了  州字又错了
经过查找 发现从sd卡读出是正确的  写入nand后再读出是错误的。(错误的时候 读出来全部是0xff 以前一般只在坏块的情况才这样 )

在fatfs章节里面提到  

NAND FLASH 与文件系统的读写接口,就是采用上一章介绍的 FTL 层函数(FTL_ReadSectors
和 FTL_WriteSectors 函数)来实现的,有了 FTL 层,我们就可以像访问 SD 卡一样,访问 NAND
FLASH,而无需担心坏块和磨损均衡问题。

那应该不是坏块的问题。

我复制文件是直接采用了 fopen 后得到fsize ,然后读写到buf 然后用以下循环写入
        while(res==0)//开始复制
                        {
                                res=f_read(fsrc,fbuf,8192,(UINT*)&br);        //源头读出8192字节        
                        
                                if(res||br==0)break;
                                res=f_write(fdst,fbuf,(UINT)br,(UINT*)&bw);        //写入目的文件                                                                                    
                                if(res||bw<br)break;      
                        }


请原子大大看看是什么问题 调试2天多了 。
附件的是我复制的字库文件。以及工程

继续 调用例程 nandflash 实验  对key1 修改 对全盘nand进行FIL 读写校验测试  ,没有发现错误
for (i=0;i<512000000/512;i++)
                        {
                        
                            FTL_WriteSectors(backbuf,i,NAND_ECC_SECTOR_SIZE,1);
                                  FTL_ReadSectors(buf,i,NAND_ECC_SECTOR_SIZE,1);//读取扇区
                            for (a=0;a<NAND_ECC_SECTOR_SIZE;a++)
                                   {
                                           if (backbuf[a]!=buf[a])
                                                 {
                                                
                                                  errsum++;
                                                 }
                                         
                                         }
                                         LCD_ShowxNum(30,210,i,20,16,0);
                                         LCD_ShowxNum(30,410,errsum,20,16,0);
                                         
                                        // LCD_ShowString(30,210,200,16,16,i);
                        }
最后 errsum=0; 也就是没有不一样的 。   ....那就怪了

@正点原子   紧急请求支援啊




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。