[求助]CH375写文件, 总是部份数据丢...找不到原因

从NANDFLASH读数据写到U盘上, 总会有一些数据没写进文件里 看看我这段代码有没问题

UINT32 i; UINT32 PageAddr; unsigned char pBuf0[528] = {0};

PageAddr=0; i = CH375FileCreate( ); mStopIfError(i); while( PageAddr < 32768 ) { //共32768页 P10OUT ^= BIT5; PageRead(0, PageAddr, pBuf0); //从NANDFLASH读一页数据, 一页有528字节 delay_us(50); PageAddr+=1; i = 0; for(n=0;n<528;n++) { //serial_put_char(pBuf0[n]); mCmdParam.ByteWrite.mByteBuffer[i] = pBuf0[n]; i+=1; if (i == 24) //一次写入24个字节, 528/24=22次 { mCmdParam.ByteWrite.mByteCount = (UINT8)i; i = 0; CH375ByteWrite( ); // 向文件写入数据 P10OUT ^= BIT6; } } }

会丢失哪一部分数据? 文件长度是否更新正确? 描述一下丢失的详细的情况。


丢失情况很奇怪, 文件长度正常, 但写入的内容却变成了FF...

专门跟踪调试 从FLASH读取的PageRead函数, 从FLASH读到正确的数据是正确, 所以怀疑写入文件的函数,

单片机用的是 MSP430F5438, 库文件用的是MSP430\FILELIBF_L41

发现更改MAX_PATH_LEN的大小无效,

例如我更改为529长度, MAX_BYTE_IO自然更改了 if ( TotalCount > MAX_BYTE_IO ) c = MAX_BYTE_IO; sizeof( mCmdParam.ByteRead.mByteBuffer ) else c = TotalCount; mCmdParam.ByteRead.mByteCount = c; //执行到这步赋值后, mByteCount 就变成了0x10. 尝试将变量类型改为UINT32, 无效. i = CH375ByteRead( ); 或者MAX_PATH_LEN更改为265,跑过了这读取的函数之后 mByteCount 会变成数据类型的最大值.


MAX_BYTE_IO是8位的,不可以这样更改。这样会丢失数据的。后续数据肯定是写不进去的


数据类型太小了, 想改大点都不行, 这样读写次数就多了, 这MAX_Byte_IO最大不外乎255节节

现在一次不敢写太多, 也就写24个字节, 单片机跑了几个小时, 才把一个16MByte文件操作完. 把中间的读写操作过程注释掉, 就这样跑都1小时左右...


你可以改用扇区模式读写。这样速度比较快。


请问楼上的大哥,我有一些关于扇区模式读写的问题,不知能不能请教您! 是关于xdata和ch375hf6.h的问题,可以的话请给我一个QQ什么的。谢谢


你可以发邮件或者打电话给我。我都会技术给你回复的。


邮件我已经发给您了! 请帮我看看,这问题我都头痛近半个月了! 谢谢!


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