原子大大 关于 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; 也就是没有不一样的 。   ....那就怪了

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




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-20 16:43
我在fatfs实验的基础上,添加几行代码,帮你验证了,测试是没问题的。
首先在test.c添加这两个函数:
[mw_shl_code=c,true]u8 cpy_msg_show(u8* name,u8 pct,u8 mode)
{
        if(mode&0X01)printf(" copy file:%s ",name);
        if(mode&0X02)printf("file copyed:%d ",pct);
        return 0;
}

u8 mf_file_copy(u8* src,u8* dst)
{
        return exf_copy(cpy_msg_show,src,dst,0,0,0);       
}[/mw_shl_code]
如下图:
344.png
然后,将mf_file_copy函数,加入usmart控制。
然后下载这个代码。
然后,通过usmart,从sd卡,拷贝你的字库文件到nand,如下图:
344.png

然后,稍等一会即拷贝完成。
最后,下载usb读卡器实验。
从nand里面读取出来HZ4mm_B.fon,和sd卡的HZ4mm_B.fon对比,完全一模一样。
说明没有问题。
我的fatfs测试代码见附件: 实验42 FATFS实验_带文件拷贝.rar (3.25 MB, 下载次数: 247) 2017-3-29 13:05 上传 点击文件名下载附件


正点原子
2楼-- · 2019-07-20 19:07
 精彩回答 2  元偷偷看……
simms01
3楼-- · 2019-07-20 19:13
本帖最后由 simms01 于 2017-3-29 12:59 编辑
正点原子 发表于 2017-3-29 12:39
这个可以参考下我们综合实验的实现方式。
我们综合实验,是可以拷贝SD卡文件到nand的。
另外,你试试:

后来我查看 NAND 实验  

里面用FIL 来写 页面    但是写页面并没有对页面进行擦除就直接写了  是有地方擦除我没看到还是没擦除?


USB 读卡器中  对nand 盘进行格式化后 每次可用容量都不一样  是神马情况?
simms01
4楼-- · 2019-07-20 22:16
正点原子 发表于 2017-3-29 13:05
我在fatfs实验的基础上,添加几行代码,帮你验证了,测试是没问题的。
首先在test.c添加这两个函数:
[mw ...

谢谢原子大大  我等下吃好饭 验证下 。麻烦你了  先出去吃个快餐回来
hi我歌月徘徊
5楼-- · 2019-07-21 04:12
 精彩回答 2  元偷偷看……
13F
6楼-- · 2019-07-21 05:22
本帖最后由 13F 于 2017-5-5 13:34 编辑

请教 原子大大
我下载了实验42 FATFS实验_带文件拷贝.rar
但文件从SD卡 拷贝到NANDFLASH 后, 文件的容量都是0 byte..
再从NANDFLASH 拷贝到SD卡,文件的容量都是0 byte..
例如: mf_file_copy("0:/test.jpg","2:/test.jpg")
这可能是哪里的错误?  板子是STM32F767


一周热门 更多>