U盘接在CH376模块上,几秒钟数据追加一次,而且不停的追加,是哪的问题,在线等。程序如下,不应该出现不停的追加数据的。
UINT8 Txt[64]={"王水寒\n 1987\r学院\t 硬件工程师\r 11 1987-2011 男 婚姻状况\n"};// UINT8 TxtIndex; void TakeOutDisk() { printf("Take out\n"); while(CH376DiskConnect()==USB_INT_SUCCESS) { /* 检查U盘是否连接,等待U盘拔出 */ mDelaymS(100); } mDelaymS(100); }
void WaitDiskIn() { printf("Wait Udisk/SD\n"); while(CH376DiskConnect()!=USB_INT_SUCCESS) { /* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */ mDelaymS(100); /* 没必要频繁查询 */ } mDelaymS(200); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */ /* 对于检测到USB设备的,最多等待100*50mS,主要针对有些MP3太慢,对于检测到USB设备并且连接DISK_MOUNTED的,最多等待5*50mS,主要针对DiskReady不过的 */ for(i=0;i<100;i++) { /* 最长等待时间,100*50mS */ mDelaymS(50); s=CH376DiskMount(); /* 初始化磁盘并测试磁盘是否就绪 */ if(s==USB_INT_SUCCESS)break ; /* 准备好 */ else if(s==ERR_DISK_DISCON)break ; /* 检测到断开,重新检测并计时 */ if(CH376GetDiskStatus()>=DEF_DISK_MOUNTED&&i>=5)break ; /* 有的U盘总是返回未准备好,不过可以忽略,只要其建立连接MOUNTED且尝试5*50mS */ } if(s==ERR_DISK_DISCON) { TakeOutDisk(); } if(CH376GetDiskStatus() { TakeOutDisk(); } // i=CH376ReadBlock(buf); //如果需要,可以读取数据块CH376_CMD_DATA.DiskMountInq,返回长度 // if(i==sizeof(INQUIRY_DATA)) // { /* U盘的厂商和产品信息 */ // buf[i]=0 ; // printf("UdiskInfo: %s\n",((P_INQUIRY_DATA)buf)->VendorIdStr); // } }
void WriteTxtFile() { /* 如果MY_ADC.TXT文件已经存在则添加数据到尾部,如果不存在则新建文件 */ s=CH376FileOpen("/XP.XLS"); /* 打开文件,该文件在根目录下 */ if(s==USB_INT_SUCCESS) {
s=CH376ByteLocate(0xFFFFFFFF); /* 移到文件的尾部 */ mStopIfError(s); } else if(s==ERR_MISS_FILE) { s=CH376FileCreate(NULL); /* 新建文件并打开,如果文件已经存在则先删除后再新建,不必再提供文件名,刚才已经提供给CH376FileOpen */ mStopIfError(s); } else mStopIfError(s); /* 打开文件时出错 */ s=sprintf(buf,Txt); /* 注意字符串长度不能溢出buf,否则加大缓冲区或者分多次写入 把Txt写入到缓冲区 */ s=CH376ByteWrite(buf,s,100); /* 以字节为单位向文件写入数据 */ mStopIfError(s);
s=CH376FileClose(TRUE); /* 关闭文件,自动计算文件长度,以字节为单位写文件,建议让程序库关闭文件以便自动更新文件长度 */ mStopIfError(s); }
main() { mDelaymS(100);
s=mInitCH376Host(); /* 初始化CH376 */ mStopIfError(s); while(1) { WaitDiskIn(); WriteTxtFile(); TakeOutDisk(); } }