做了一块pcb 功能是51单片机通过ch375读写u盘 扩展的ram是62256 读的过程没有问题 多次连续读写大数据量刷新外部ram
调试写u盘程序时遇到奇怪问题:
部分程序如下(参考的例程改的):
LED_WR_ACT( ); /* 写操作 */
mCopyCodeStringToIRAM( mCmdParam.Open.mPathName, "/NEWFILE2.TXT" ); /* 新文件名,在根目录下 */
i = CH375FileOpen( ); /* 打开文件 */
mCmdParam.Locate.mSectorOffset =0xffffffff; CH375FileLocate( ); mCmdParam.WriteX.mSectorCount = 2; /* 写入所有扇区的数据 */ mCmdParam.WriteX.mDataBuffer = &FILE_DATA_BUF[0]; i = CH375FileWriteX( ); /* 向文件写入数据 */ mStopIfError( i );
mCmdParam.Modify.mFileAttr = 0xff; /* 输入参数: 新的文件属性,为0FFH则不修改 */ mCmdParam.Modify.mFileTime = 0xffff; /* 输入参数: 新的文件时间,为0FFFFH则不修改,使用新建文件产生的默认时间 */ mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( 2004, 5, 18 ); /* 输入参数: 新的文件日期: 2004.05.18 */ mCmdParam.Modify.mFileSize = NewSize; /* 输入参数: 如果原文件较小,那么新的文件长度与原文件一样长,否则被RAM所限,如果文件长度大于64KB,那么NewSize必须为UINT32 */ i = CH375FileModify( ); /* 修改当前文件的信息,修改日期和长度 */ mStopIfError( i );
mCmdParam.Close.mUpdateLen = 0; /* 不要自动计算文件长度,如果自动计算,那么该长度总是CH375vSectorSize的倍数 */ i = CH375FileClose( ); mStopIfError( i ); LED_WR_INACT( );
程序的问题是:外部ram里已经有数据了(从u盘的一个文件读出来的),我想达到的功能是在u盘的NEWFILE2.TXT文件里把外部ram中的部分数据添加进去,就是想从向已有文件追加数据,现在问题是这段程序执行后CH375FileLocate( )函数没有起到作用,指定mCmdParam.WriteX.mSectorCount = 2也没有用,结果是ram里的所有数据都顺序写到了NEWFILE2.TXT文件中,并覆盖了原数据,与下面一段程序结果一样,这是什么原因呢?应该怎么调试?
LED_WR_ACT( ); /* 写操作 */
mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "/NEWFILE3.TXT" ); /* 新文件名,在根目录下 */ i = CH375FileCreate( ); /* 新建文件并打开,如果文件已经存在则先删除后再新建 */
mStopIfError( i );
mCmdParam.Write.mSectorCount =2; /* 写入所有扇区的数据 */
i = CH375FileWrite( ); /* 向文件写入数据 */ mStopIfError( i );
mCmdParam.Modify.mFileAttr = 0xff; /* 输入参数: 新的文件属性,为0FFH则不修改 */ mCmdParam.Modify.mFileTime = 0xffff; /* 输入参数: 新的文件时间,为0FFFFH则不修改,使用新建文件产生的默认时间 */ mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( 2004, 5, 18 ); /* 输入参数: 新的文件日期: 2004.05.18 */ mCmdParam.Modify.mFileSize = NewSize; /* 输入参数: 如果原文件较小,那么新的文件长度与原文件一样长,否则被RAM所限,如果文件长度大于64KB,那么NewSize必须为UINT32 */ i = CH375FileModify( ); /* 修改当前文件的信息,修改日期和长度 */ mStopIfError( i );
mCmdParam.Close.mUpdateLen = 0; /* 不要自动计算文件长度,如果自动计算,那么该长度总是CH375vSectorSize的倍数 */ i = CH375FileClose( ); mStopIfError( i ); LED_WR_INACT( );