我用AVR 单片机mega32和CH375配合来读写U盘,使用U 盘文件级子程序库CH375HFB.A编程。读U盘用字节模式,写U盘用扇区模式。读U盘没有问题,而写U盘多数是成功的,但有一小半左右会失败,用电脑查看U盘创建的文件只有一个字节,日期固定是2004-1-1而不是我设定的日期。我每次写U盘的顺序都是先创建文件然后一个一个扇区写下去整个文件写完后,修改时间.日期.长度.关闭文件。请问各位高手,这种问题是不是文件没有写完,还是没有更新长度?(电源加强滤波也没解决问题。)
应该是你写进去了没有更新文件长度,你可以拿WINHEX这个软件来看下你的文件第一个扇区应该就是你写的数据进去的
问题应该是没有更新文件长度。可我试过几种办法结果都不理想, 增加语句:#define LIB_CFG_UPD_SIZE 0 , 加入延时1us , 程序如下: mCmdParam.Modify.mFileAttr = 0xff; /* 输入参数: 新的文件属性,为0FFH则不修改 */ mCmdParam.Modify.mFileTime = 0xffff; /* 输入参数: 新的文件时间,为0FFFFH则不修改,使用新建文件产生的默认时间 */ mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( 2008, 6, 6 ); /* 输入参数: 新的文件日期:2008.6.6 */ mDelay1uS( ); duan = duan + 0x000000 ; mDelay1uS( ); mCmdParam.Modify.mFileSize = duan*256; i = CH375FileModify( ); /* 修改当前文件的信息,修改日期和长度 */ mCmdParam.Close.mUpdateLen = 0; /* 不要自动计算文件长度,如果自动计算,那么该长度总是CH375vSectorSize的倍数 */ mDelay1uS( ); mDelay1uS( ); i = CH375FileClose( ); 是不是哪些地方延时还要长一些? 增加了 duan = duan + 0x000000 ;这个语句后,大于65K的文件才可以存储成功。
那你可以这样试下,在你关闭文件之后你在随便打开一个文件,然后在安全移除下文件应该就可以了.
hcn:你好!“那你可以这样试下,在你关闭文件之后你在随便打开一个文件,然后在安全移除下文件应该就可以了.”是什么原理哪? 增加了语句:mCmdParam.ByteWrite.mByteCount = 0; /* 如果为0 则更新文件长度 */ CH375ByteWrite( ); /* 以字节为单位向文件写入数据块 */ 感觉效果不错。
U盘内部有缓冲,这么作可以强制U盘把缓冲中数据写入Flash
刚开始接触,大侠讨论的问题看不明白,需要好好学习啊
刚开始接触,大侠讨论的问题看不明白,需要好好学习啊