帮忙看看!375A

用库375HFA的读写 写的文件在WIN下用chkdsk查错 Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp.

F:\Documents and Settings\gbc>chkdsk g:/f 文件系统的类型是 FAT。 卷序列号为 28A1-54EB 指定的磁盘似乎是非 Windows XP 磁盘。 要继续吗(Y/N)? y Windows 正在校验文件和文件夹... \CG001.GBC 项含有无效链接。 \CG001.GBC 项的大小无效。 已完成文件和文件夹校验。 在群集 126 处的丢失链的不正确链接得到更正。 在群集 254 处的丢失链的不正确链接得到更正。 是否将丢失的链转换成文件(Y/N)? n 添加了 5632 字节的可用磁盘空间。 Windows 已更正文件系统。

磁盘空间总数 32,411,648 字节。 1 个文件: 1,536 字节。 损坏扇区 8,704 字节。 可用磁盘空间: 32,401,408 字节。

每个分配单元中有 512 字节。 磁盘上共有 63,304 个分配单元。 磁盘上有 63,284 个可用的分配单元。

F:\Documents and Settings\gbc>chkdsk g:/f 文件系统的类型是 FAT。 卷序列号为 48AD-45AE 已纠正文件分配表(FAT)中的错误。 Windows 正在校验文件和文件夹... \CG021.GBC 项的大小无效。 \CG021.GBC 无法识别的扩展属性句柄。 已完成文件和文件夹校验。 在群集 42 处的丢失链的不正确链接得到更正。 在群集 94 处的丢失链的不正确链接得到更正。 在群集 106 处的丢失链的不正确链接得到更正。 在群集 126 处的丢失链的不正确链接得到更正。 是否将丢失的链转换成文件(Y/N)? n 添加了 2048 字节的可用磁盘空间。 Windows 已更正文件系统。

磁盘空间总数 32,444,416 字节。 2 个文件: 12,288 字节。 可用磁盘空间: 32,432,128 字节。

每个分配单元中有 512 字节。 磁盘上共有 63,368 个分配单元。 磁盘上有 63,344 个可用的分配单元。

F:\Documents and Settings\gbc>chkdsk g:/f 文件系统的类型是 FAT。 卷序列号为 48AD-45AE Windows 正在校验文件和文件夹... \CG001.GBC 项含有无效链接。 \CG001.GBC 项的大小无效。 \CG001.GBC 无法识别的扩展属性句柄。 \CG021.GBC 项的大小无效。 \CG021.GBC 无法识别的扩展属性句柄。 \CG021.GBC 项的大小无效。 文件夹 \ 中有一个以上的 CG021.GBC 项。 已重命名为 CG021.GB0。 文件夹 \ 中有一个以上的 CG021.GBC 项。 已重命名为 CG021.GB0。 已完成文件和文件夹校验。 丢失链在 30 群集产生交叉链接。孤立部分已被截断。 在群集 92 处的丢失链的不正确链接得到更正。 在群集 94 处的丢失链的不正确链接得到更正。 在群集 126 处的丢失链的不正确链接得到更正。 在群集 222 处的丢失链的不正确链接得到更正。 在群集 254 处的丢失链的不正确链接得到更正。 是否将丢失的链转换成文件(Y/N)? y 7 个恢复文件: 4096 字节。 Windows 已更正文件系统。

磁盘空间总数 32,444,416 字节。 1 个文件夹: 512 字节。 10 个文件: 20,992 字节。 可用磁盘空间: 32,422,912 字节。

每个分配单元中有 512 字节。 磁盘上共有 63,368 个分配单元。 磁盘上有 63,326 个可用的分配单元。

F:\Documents and Settings\gbc>chkdsk g:/f 文件系统的类型是 FAT。 卷序列号为 54B5-C988 已纠正文件分配表(FAT)中的错误。 Windows 正在校验文件和文件夹... \CG001.GBC 项含有无效链接。 \CG001.GBC 项的大小无效。 已完成文件和文件夹校验。 在群集 3 处的丢失链的不正确链接得到更正。 在群集 86 处的丢失链的不正确链接得到更正。 在群集 94 处的丢失链的不正确链接得到更正。 在群集 126 处的丢失链的不正确链接得到更正。 在群集 214 处的丢失链的不正确链接得到更正。 在群集 222 处的丢失链的不正确链接得到更正。 在群集 254 处的丢失链的不正确链接得到更正。 是否将丢失的链转换成文件(Y/N)? n 添加了 8704 字节的可用磁盘空间。 Windows 已更正文件系统。

磁盘空间总数 32,444,416 字节。 2 个文件: 6,656 字节。 可用磁盘空间: 32,437,760 字节。

每个分配单元中有 512 字节。 磁盘上共有 63,368 个分配单元。 磁盘上有 63,355 个可用的分配单元。

F:\Documents and Settings\gbc>chkdsk g:/f 文件系统的类型是 FAT。 卷序列号为 54B5-C988 指定的磁盘似乎是非 Windows XP 磁盘。 要继续吗(Y/N)? y Windows 正在校验文件和文件夹... \CG021.GBC 项含有无效链接。 \CG021.GBC 项的大小无效。 \CG002.GBC 项含有无效链接。 \CG002.GBC 项的大小无效。 已完成文件和文件夹校验。 丢失链在 8 群集产生交叉链接。孤立部分已被截断。 在群集 214 处的丢失链的不正确链接得到更正。 在群集 222 处的丢失链的不正确链接得到更正。 在群集 254 处的丢失链的不正确链接得到更正。 是否将丢失的链转换成文件(Y/N)? n 添加了 10240 字节的可用磁盘空间。 Windows 已更正文件系统。

磁盘空间总数 32,444,416 字节。 3 个文件: 4,096 字节。 可用磁盘空间: 32,440,320 字节。

每个分配单元中有 512 字节。 磁盘上共有 63,368 个分配单元。 磁盘上有 63,360 个可用的分配单元。

F:\Documents and Settings\gbc>chkdsk g:/f 文件系统的类型是 FAT。 卷序列号为 54B5-C988 Windows 正在校验文件和文件夹... 已完成文件和文件夹校验。 在群集 214 处的丢失链的不正确链接得到更正。 在群集 222 处的丢失链的不正确链接得到更正。 在群集 254 处的丢失链的不正确链接得到更正。 是否将丢失的链转换成文件(Y/N)? n 添加了 1536 字节的可用磁盘空间。 Windows 已更正文件系统。

磁盘空间总数 32,444,416 字节。 1 个文件: 6,144 字节。 可用磁盘空间: 32,438,272 字节。

每个分配单元中有 512 字节。 磁盘上共有 63,368 个分配单元。 磁盘上有 63,356 个可用的分配单元。

F:\Documents and Settings\gbc>chkdsk g:/f 文件系统的类型是 FAT。 卷序列号为 C881-02C9 Windows 正在校验文件和文件夹... 已完成文件和文件夹校验。 在群集 156 处的丢失链的不正确链接得到更正。 在群集 158 处的丢失链的不正确链接得到更正。 在群集 222 处的丢失链的不正确链接得到更正。 在群集 254 处的丢失链的不正确链接得到更正。 是否将丢失的链转换成文件(Y/N)? n 添加了 2048 字节的可用磁盘空间。 Windows 已更正文件系统。

磁盘空间总数 32,444,416 字节。 1 个文件: 6,144 字节。 可用磁盘空间: 32,438,272 字节。

每个分配单元中有 512 字节。 磁盘上共有 63,368 个分配单元。 磁盘上有 63,356 个可用的分配单元。

F:\Documents and Settings\gbc>

给个意见啊!折腾了几天了!都是这样


可以不可以将你的程序帖出来看下?


以下是主体部分!除了初始化都在这了

void mCopyCodeStringToXRAM( bit type1) small; //void mStopIfError( UINT8 iError ); //xdata uchar USB_Status;//状态 //xdata uchar USB_Error;//错误计数 /* 安全移除U盘, 返回USB_INT_SUCCESS说明可以安全移除,否则说明不能安全移除,只能强行移除 */ /* 在操作完U盘准备让用户拔出U盘前调用, 防止用户过早拔出U盘丢失数据 */ #define xWriteCH375Cmd( c ) { CH375_CMD_PORT = ( c ); _nop_( ); _nop_( ); _nop_( ); _nop_( ); } /* 写命令并延时2uS */ #define xWriteCH375Data( c ) { CH375_DAT_PORT = ( c ); _nop_( ); } /* 写数据并延时1uS */ uchar SafeRemoveDisk( void ) small { //uchar i; //for ( i = 0; i < 10; i ++ ) { /* 有的U盘总是返回未准备好,不过可以被忽略 */ // Delay( 100 ); // if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查询磁盘是否准备好 */ //} //Delay( 10 ); xWriteCH375Cmd( CMD_SET_CONFIG ); /* 设置USB配置 */ xWriteCH375Data( 0 ); /* 取消配置,会导致很多U盘的LED灯灭 */ xQueryInterrupt( ); /* 查询CH375中断并更新中断状态 */ Delay( 10 ); if ( /*i < 5 && */CH375IntStatus == USB_INT_SUCCESS ) return( USB_INT_SUCCESS ); /* 操作成功 */ else return( 0xFF ); /* 以下取消SOF包会导致绝大多数U盘的LED灯灭 */ /* 如果此处取消SOF, 那么与此对应, 在检测到U盘插入后应该再恢复为模式6即恢复SOF包 */ // xWriteCH375Cmd( CMD_SET_USB_MODE ); /* 设置USB工作模式 */ // xWriteCH375Data( 5 ); /* 停止发出SOF包,检测到U盘插入后必须用模式6恢复SOF包发出 */ // mDelaymS( 1 ); } /************************************************************************** UsbFD **************************************************************************/ void UsbFD_r_write(void) small { uint i; uchar xdata * data j; uchar xdata * data k; switch(USB_Status) { case 0://无usb设备 if( CH375DiskConnect( ) == ERR_SUCCESS ) { USB_Status=0x10; // 有设备连接则返回成功,CH375DiskConnect同时会更新全局变量CH375DiskStatus // USB_Error=0; } break; case 0x10: if( CH375DiskReady( ) == ERR_SUCCESS || USB_Error>5) USB_Status=0x20; // 查询磁盘是否准备好 // else USB_Error++; break; //case 0x12: //i = IsDiskWriteProtect( ); /* 检查U盘是否写保护, 返回USB_INT_SUCCESS说明可以写,返回0xFF说明只读/写保护,返回其它值说明是错误代码 */ // if ( IsDiskWriteProtect( )== USB_INT_SUCCESS)// && i != 0xFF ) { /* 操作失败 */ // USB_Status=0x20; // else USB_Error++; // break; case 0x20: key.fun = 'U'; //led_buf[0]=0x29; //led_buf[1]=0xeb; led_buf[2]=0xb0;//'U' led_buf[3]=0x25;//'S' led_buf[4]=0xa1;//'b' led_buf[5]=0xef;//'-' flash_bit =5 ; j= &mon_data[0][0];k=FILE_DATA_BUF_ADDR;//月数据 for(i=0;i<360;i++) {*k++=*j++;} j= &day_data[0][0][0];//k=FILE_DATA_BUF_ADDR; //日数据 0x168 for(i=0;i<4960;i++) {*k++=*j++;} j= &day_tmp.day[0];//0x14C8 for(i=0;i<80;i++) {*k++=*j++;} j= &mon_tmp.mon[0];//0x1518 for(i=0;i<30;i++) {*k++=*j++;} j= &ud_power[0].type; //0x1536 for(i=0;i<350;i++) {*k++=*j++;} USB_Status=0x30; break; case 0x30: mCopyCodeStringToXRAM( 1 );// mCmdParam.Open.mPathName, "\\CG001.GBC" ); // 文件名,该文件在C51子目录下 // //SBUF= CH375FileOpen( ); if(CH375FileOpen( ) != 0/*ERR_FOUND_NAME */)//没找到文件 { if( CH375FileCreate( )!=0){USB_Error++;break;} // 新建文件并打开,如果文件已经存在则先删除后再新建 // //mStopIfError( USB_Error ); } mCmdParam.Write.mSectorCount = 12;//SecCount; // 写入所有扇区的数据 // // current_buffer = & FILE_DATA_BUF[0]; 如果文件读写的数据的复制方式为"外部子程序",那么需要设置存放数据的缓冲区的起始地址 // Rst_WTD; if( CH375FileWrite( )!=0){USB_Error++;break;} // 向文件写入数据 // //Rst_WTD; //mStopIfError( USB_Error ); USB_Status=0x40 ; break; case 0x40: mCmdParam.Modify.mFileAttr = 0xff; // 输入参数: 新的文件属性,为0FFH则不修改 // mCmdParam.Modify.mFileTime = MAKE_FILE_TIME(bcdtohex(time.hour),bcdtohex(time.min),bcdtohex(time.sec));//0xffff; // 输入参数: 新的文件时间,为0FFFFH则不修改,使用新建文件产生的默认时间 // mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( (2000+date.year), bcdtohex(date.month), bcdtohex(date.day) ); // 输入参数: 新的文件日期: 2004.05.18 // mCmdParam.Modify.mFileSize = 0x1694;//NewSize; // 输入参数: 如果原文件较小,那么新的文件长度与原文件一样长,否则被RAM所限,如果文件长度大于64KB,那么NewSize必须为UINT32 // if( CH375FileModify( )!=0 ){USB_Error++;break;} // 修改当前文件的信息,修改日期和长度 // //mStopIfError( USB_Error ); mCmdParam.Close.mUpdateLen = 0; // 不要自动计算文件长度,如果自动计算,那么该长度总是512的倍数 // if( CH375FileClose( )!=0 ) {USB_Error++;break;} //mStopIfError( USB_Error ); USB_Status=0x45 ; break; case 0x45: if ( SafeRemoveDisk( ) != USB_INT_SUCCESS ) { /* 安全移除U盘 */ USB_Error++;break; } led_buf[2]=0xb0;//'U' led_buf[3]=0x29;//'E' led_buf[4]=0xe3;//'n' led_buf[5]=0xa2;//'d' USB_Status=0x50 ; break; case 0x50: //printf( "Take out\n" ); // while ( CH375DiskStatus != DISK_DISCONNECT ) xQueryInterrupt( ); // 查询CH375中断并更新中断状态,等待U盘拔出 // if ( CH375DiskStatus >= DISK_CONNECT ) // 查询CH375中断并更新中断状态,等待U盘拔出 // if( CH375DiskConnect( ) != ERR_SUCCESS ) {USB_Status=0x0;display_v();}//恢复状态等待U盘 break; /* case 0x60: mCopyCodeStringToXRAM( 0 );mCmdParam.Open.mPathName, "\\CG001.SBC" ); // 文件名,该文件在C51子目录下 // if(CH375FileOpen( )!=0){USB_Error++;break;} /* 打开文件 * / break; case 0x70: break; */ default:USB_Status=0x0; } if(USB_Error>30) {USB_Status=0x50;USB_Error=0;error_message();} } void mCopyCodeStringToXRAM( bit type1) small { uchar i, j ; uchar xdata * data iDestination=mCmdParam.Open.mPathName; *iDestination='\\';iDestination ++; *iDestination='C';iDestination ++; *iDestination='G';iDestination ++; i=node/100;j=node%100; if(i>9)i=0x30;else i+=0x30; *iDestination=i; iDestination ++; i=j/10;j=j%10; *iDestination=i+0x30;iDestination ++; *iDestination=j+0x30;iDestination ++; *iDestination='.' ;iDestination ++; *iDestination='G'; iDestination ++; *iDestination='B'; iDestination ++; if(type1==1) //CG001.GBC 读取数据文件 { *iDestination='C';iDestination ++; } else //CG001.GBS 设置数据文件 { *iDestination='S';iDestination ++; } *iDestination=0; }


你现在的问题是什么?是写进去的数据出错吗?


现在是文件有时能打开有时打不开,如果一个能打开,再写另一个文件的时候可能都大不开了,数据应该都是对的


那你用我们例子程序跑的时候也是这个样子吗??


时好时坏


那你就要好好的查下你的硬件有没有问题了


会不会是: 1、时钟信号不稳定、受干扰;PCB布线不好,共地性不好等。 2、USB 信号受干扰; 3、单片机并口线有干扰;


我换了hf6好多了,不过还会出现


还有没有什么建议啊!


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