具体就是我按照那个CH375HF手册5.2.6向亦有文件追加数据,通过串口看到所有操作都成功,但是读取不到数据,而且将U盘接到PC上看不到文件,但现实已用空间增多罗,不知什么原因 我的代码如下所示 *****stop_if_error函数***** //如果错误则显示错误代码并停机等待 void stop_if_error(char *operation_name,int return_code) { printf("%20s返回值:0x%x",operation_name,return_code);//使用%20s便于右端对齐,无其他作用 if (return_code==ERR_SUCCESS) { printf(",操作成功\n"); return; /*操作成功:返回*/ } else printf(",操作失败\n"); /*显示错误*/ while ( 1 ); } ******add_data_2_file函数****** void add_data_2_file(void) { int i=0,j=0; //打开文件 strcpy(mCmdParam.Open.mPathName,"/TEST.TXT"); stop_if_error("CH375FileOpen()",CH375FileOpen()); //移到文件末尾(2K=4扇区) mCmdParam.Locate.mSectorOffset=0xffffffff; stop_if_error("CH375FileLocate()",CH375FileLocate());
//新增3扇区 printf("新增3扇区\n"); for(i=0;i<3;i++) { for (j= 0;j<512;j++) { FILE_DATA_BUF[j]='x'; //实际应用中,数据可以来自外部ADC或者日志数据 } mCmdParam.Write.mSectorCount=1; stop_if_error("CH375FileWrite()",CH375FileWrite()); } //修改文件长度 mCmdParam.Modify.mFileSize=((4+3)*512); stop_if_error("CH375FileModify()",CH375FileModify());
//读取所有内容 mCmdParam.Read.mSectorCount=(4+3);//设置读取的扇区数 CH375vFileSize += CH375vSectorSize - 1; //默认情况下,以扇区方式读取数据时,无法读出文件尾部不足1个扇区的部分,所以必须临时加大文件长度以读取尾部零头 stop_if_error("CH375FileRead()",CH375FileRead()); CH375DirtyBuffer(); //因为文件读写缓冲区与磁盘数据缓冲区重叠,所以在CH375FileRead读文件后和在CH375FileWrite写文件前必须清除磁盘缓冲区 printf("文件内容为:\n%s",FILE_DATA_BUF); CH375vFileSize-=CH375vSectorSize-1; //恢复原文件长度
//关闭文件 stop_if_error("CH375FileClose()",CH375FileClose()); }
现在我感觉程序是没有问题的,貌似是CH375FileModify()操作后会导致windows无法识别U盘的格式了,因为U盘已用空间增大说明数据确实写入到U盘了