CH375写时优盘数据出错,求高手指点

本人正在做项目,用到贵公司的CH375做优盘存储数据 硬件:MEGA128+CH375+金士顿8G优盘 测试:连接,U盘准备,创建文件,关闭文件,都正常 我循环打开文件,移动指针到文件结尾,字节形式写入 "12345678900987654321\r\n" ,关闭文件,延时。 重复以上1000次。执行时返回值都为0x00操作正确 但打开文件时会有6处写入错误。 错误如下: 12345678900987654321 123456789009876543209812345678900987654321 12345678900987654321

12345678900987654321 123456789009876900987612345678900987654321 12345678900987654321

12345678900987654321 123312345678900987654312345678900987654321 12345678900987654321

出错率一般在0.6%左右。

希望高手指点。测试成功才能用到实际项目中,希望贵公司帮忙解答。[Emot]1[/Emot]

你采用的是什么接口和CH375芯片连接?你可以这样测试,只写数据不关闭文件看是否可以?


这个目前还不好确定问题在说明地方,建议你做一下测试: 1:打开文件,移动文件指针,循环写1000次,关闭文件,看现象是否一样。 2:换个U盘测试一下。 3:把读写时序降低一些,当然这个可能没有关系,如果是写的速度快(MAGEG和CH375之间的速度)则数据本身也可能出现问题,现在只是数据丢失。


感谢大家,我是用的是并行接口也CH375连接,将CH375当做外部存储空间。 在只是写数据不关闭时做过测试,也会出现上诉错误,但错误率小一点,0.2%左右。 U盘我也换过,也会出现这些错误大约也在0.2%左右比这个U盘好一点, 对于速度我使用的是8M晶振,主频也就是8M,并且在每次读写前都要先设置读写外部数据的寄存器读写后关闭, 速度应该已经降低了些。 最近测试时有时还会出现一些奇怪的字符,并且我发现会连续几次测试时都会出现相同的字符, 换个U盘奇怪的字符就没了。但可能会出现新的奇怪字符。


这个估计可能和你的硬件还是有关系的。你把你写命令,写数据以及读数据三个函数贴出来看下。


while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); status = CH375DiskConnect( );//判断连接 USART_Transmit(status);//串口返回状态 DelayMs(3000); status = CH375DiskReady();//盘准备好 USART_Transmit(status);//串口返回状态 DelayMs(3000); for(j=0;j<50;j++)//写20K数据 { strcpy(mCmdParam.Open.mPathName,"\\HANHAN.TXT");//设置文件路径 status = CH375FileOpen();//盘打开 USART_Transmit(status); //串口返回状态 mCmdParam.ByteLocate.mByteOffset=0xFFFFFFFF; status = CH375ByteLocate();//移动文件指针 USART_Transmit(status); //串口返回状态 for(i=0;i<20;i++) { strcpy(mCmdParam.ByteWrite.mByteBuffer,"12345678900987654321\r\n"); mCmdParam.ByteWrite.mByteCount=strlen("12345678900987654321\r\n"); status = CH375ByteWrite();//串口返回状态 if(status!=0x00)SendStr("WRITE ERROR IN\n",Strlen("WRITE ERROR IN\n")); //串口返回写出错 DelayMs(10); } status = CH375FileClose (); USART_Transmit(status); //串口返回状态 DelayMs(2000); }


还有一个问题可能和你出现的现象有关,就是strcpy这个函数不建议你使用,你可以直接采用memcpy函数复制。51单片机使用KEIL编译的时候strcpy函数好像就有问题。


只有登录才能回复,可以选择微信账号登录