本帖最后由 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; 也就是没有不一样的 。 ....那就怪了
@正点原子 紧急请求支援啊
首先在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]
如下图:
然后,将mf_file_copy函数,加入usmart控制。
然后下载这个代码。
然后,通过usmart,从sd卡,拷贝你的字库文件到nand,如下图:
然后,稍等一会即拷贝完成。
最后,下载usb读卡器实验。
从nand里面读取出来HZ4mm_B.fon,和sd卡的HZ4mm_B.fon对比,完全一模一样。
说明没有问题。
我的fatfs测试代码见附件:
后来我查看 NAND 实验
里面用FIL 来写 页面 但是写页面并没有对页面进行擦除就直接写了 是有地方擦除我没看到还是没擦除?
USB 读卡器中 对nand 盘进行格式化后 每次可用容量都不一样 是神马情况?
谢谢原子大大 我等下吃好饭 验证下 。麻烦你了 先出去吃个快餐回来
请教 原子大大
我下载了实验42 FATFS实验_带文件拷贝.rar
但文件从SD卡 拷贝到NANDFLASH 后, 文件的容量都是0 byte..
再从NANDFLASH 拷贝到SD卡,文件的容量都是0 byte..
例如: mf_file_copy("0:/test.jpg","2:/test.jpg")
这可能是哪里的错误? 板子是STM32F767
一周热门 更多>