CH376文件定位出问题,之前就是成功的

现象如下: CH376芯片读写测试…… 固件版本号为:0x3 测试工作状态:成功

USB设备连接事件……U盘已插入 初始化USB存储设备……成功 获取USB存储设备的磁盘物理容量……成功 总扇区数为:1034494 每个扇区字节数为:512 总存储量为:505MB 获取USB存储设备的磁盘空间信息……成功 逻辑盘扇区数为:1032400(504MB) 剩余扇区数为:1008144(492MB) 文件系统类型:FAT32

创建一个TXT文件……成功! 需要写入TXT的数据量为:24 TXT文本数据写入成功! TXT文本创建并写入完成!

2011-01-01 12:0:2 0.322266V 文件打开成功! 文件定位失败--180 不知道为什么?

打开文件后,你读一下数据看是否可以正确的读出来。


这个定位也是时而好,时而不好。现在的问题是,我动态每次写入三十个数,用的是循环,但是之后就是只显示最新的一行,前面的居然全冲掉了。不知道为什么?


文件大小是否更新了?如果文件大小没有变化,你怎么写数据都只是看到最后一行。 你测试一下,循环写30次数据,每次写30个,然后关闭文件,要传递TURE,自动更新文件长度,看看数据是否写进去了


我试了一下,文件还是没有更新。 以下是主程序代码,还请指教! while(1) { if(timer_flag == 500) //每秒采集一次AD数据,并通过CH376将数据写入TXT文本中 { printf("2011-01-01 12:%d:%d %d%d%d\n",second/60,second%60,uart_rx_temp[0],uart_rx_temp[1],uart_rx_temp[2]);//uart_rx_temp[0]得到的值为77

write_command_to_usb(SET_FILE_NAME);//送“设置文件名”命令 send_string_to_usb("/ED.TXT\0",11); //送文件名“AD.TXT”

write_command_to_usb(FILE_OPEN); //送“打开文件或目录,枚举文件和目录”命令 while(ch375_intflag != 1); //等待中断产生 ch375_intflag = 0; //清除CH376中断标志位 if(ch375_status == USB_INT_SUCCESS) //请求继续写入 { printf("文件打开成功!\n"); } else { printf("文件打开失败--%d\n",ch375_status); while(1); }

write_command_to_usb(BYTE_LOCATE); //送“以字节为单位移动当前文件指针”命令 write_data_to_usb(0xff); //其后四个字节0xffffffff表示移动文件指针到文件末尾 write_data_to_usb(0xff); write_data_to_usb(0xff); write_data_to_usb(0xff); while(ch375_intflag != 1); //等待中断产生 ch375_intflag = 0; //清除CH376中断标志位 if(ch375_status == USB_INT_SUCCESS) //请求继续写入 { printf("文件定位成功!\n"); } else { printf("文件定位失败--%d\n",ch375_status); while(1); } //往已有文件添加一串数据 write_command_to_usb(BYTE_WRITE); //以字节为单位从当前位置写入数据块 write_data_to_usb(34); //头两个字节是以低字节在前的16bit指示后续写入的数据个数 write_data_to_usb(0); ch375_intflag = 0; //清除CH375中断标志位 while(ch375_intflag != 1); //等待中断产生 ch375_intflag = 0; //清除CH375中断标志位 if(ch375_status == USB_INT_DISK_WRITE) //请求继续写入 { write_command_to_usb(WR_REQ_DATA); //向内部指定缓冲区写入请求的数据块 read_data_from_usb(); printf("需要写入TXT的数据量为:%d\n",read_data_from_usb()); } else { printf("\nTXT文本数据写入失败--%d\n",ch375_status); while(1); }

for(i=0;i<30;i++) { write_data_to_usb(uart_rx_temp[i]); } send_string_to_usb("\r\n",4); //回车换行

write_command_to_usb(BYTE_WR_GO); //继续字节写 while(ch375_intflag != 1); //等待中断产生 ch375_intflag = 0; //清除CH375中断标志位 if(ch375_status == USB_INT_SUCCESS) //请求继续写入 { printf("TXT文本数据写入成功!\n"); } else { printf("TXT文本数据写入失败--%d\n",ch375_status); while(1); }

write_command_to_usb(FILE_CLOSE); //关闭当前已经打开的文件或目录 write_data_to_usb(1); //允许自动更新文件长度 printf("TXT文本创建并写入完成!\n");

while(timer_flag == 500); //防止每秒多次执行该文本写入操作 } } return 0; }


请求写入34个字节,为什么只写入30个字节?也没有检查允许写入的字节数。 请下载CH376EVT.ZIP,参考FILE_SYS.C


我实际要求实际写入的是34个字节!也确实写入了34个字节。主要问题是用while(1)循环写入,可是只是写入的最后的34个字节,前面写入的都没有,应该是被冲掉了。不知道为什么?这里关闭了文件也允许更新文件长度了呀,而且每次也都重新定位了的,怎么会不成功呢?最近一直在想,还请指教呀!


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