CH376,USB写文件不稳定

文件创建在根目录下,调用沁恒给的驱动往文件里面写数据,并关闭文件。加入写文件代码后,定时自动检测USB连接状态的函总是检测到USB设备自动断开连接的现象。而且打开文件,里面也没有数据。

ps:论坛上看见一个仁兄说每次新创建一个文件过后,文件里总是有一个字节的数据,我这里也有这个情况

附上代码


if(Get_Status(UsbConnect)==1&&Get_Status(UsbMount)==1&&Get_Status(UsbRdy)==0)//磁盘信息正确

       {

       


         //CH376DirCreatePath("/CHARGE");

         

          if(CH376FileOpen("HOST.TXT")== ERR_MISS_FILE)

          {

            if(CH376FileCreate("HOST.TXT")==USB_INT_SUCCESS){Set_Status(FileCreate,1);}

            else{Set_Status(FileOpen,0);Set_Status(FileCreate,0);}

          }  

          else

          {

             CH376ByteLocate( 0xFFFFFFFF );

             Set_Status(FileOpen,1);

          }

          if(Get_Status(FileCreate)==1||Get_Status(FileOpen)==1)

          {

            Set_Status(UsbRdy,1);

          }

        // s=CH376GetFileSize( );

        // Set_Status(FileSize,s);

      strcpy( Buf, "SHENMEGUI" );  /* 注意字符串长度不能溢出buf,否则加大缓冲区或者分多次写入 */

    s = CH376ByteWrite( Buf, s, NULL );  /* 以字节为单位向文件写入数据 */ //这个函数存在时,判断USB拔出的while循环会被直接跳过

         CLOSEFILE:

         if(Get_Status(FileOpen)==1||Get_Status(FileCreate)==1)

         {

            if(CH376FileClose(TRUE)==USB_INT_SUCCESS)

            {

              Set_Status(FileOpen,0);Set_Status(FileCreate,0);

            } 

            else

            {

             goto CLOSEFILE;

            }                                                  

         }

         LED=0xE7;

         Ch376TaskCnt++;

        } 

       

if(Get_Status(UsbRdy)==1)

       {

         if(CheckUsbConnect()!=USB_INT_SUCCESS)           

         {

           

          Set_Status(UsbConnect,0);

          Set_Status(UsbMount,0);

          Set_Status(UsbRdy,0);

          }


        } 


把写文件函数屏蔽过后,就不会出现在没拔出U盘的情况下自动检测到U盘断开连接的现象了


 while(1)

   {

      if(Get_Status(UsbConnect)==1&&Get_Status(UsbMount)==1&&Get_Status(UsbRdy)==0)//磁盘信息正确

       {


         CH376DirCreatePath("/CHARGE");

          if(CH376FileOpen("HOST.TXT")== USB_INT_SUCCESS){

             CH376ByteLocate( 0xFFFFFFFF );

             Set_Status(FileOpen,1);

             }

          else{

            if(CH376FileCreate("HOST.TXT")==USB_INT_SUCCESS){Set_Status(FileCreate,1);}

            else{Set_Status(FileOpen,0);Set_Status(FileCreate,0);}

          }

          

         s = CH376ByteWrite( "shenmegui", strlen( "shenmegui" ), NULL );

         if(Get_Status(FileCreate)==1||Get_Status(FileOpen)==1){

            Set_Status(UsbRdy,1);

         }

         CLOSEFILE:

         if(Get_Status(FileOpen)==1||Get_Status(FileCreate)==1){

          if(CH376FileClose(TRUE)==USB_INT_SUCCESS){Set_Status(FileOpen,0);Set_Status(FileCreate,0);} 

          else{

             goto CLOSEFILE;

             }                                                  

         }

         while(CH376DiskConnect()==USB_INT_SUCCESS){

         BUZZ=1;

         }

         BUZZ=0;

         Set_Status(UsbConnect,0);

         Set_Status(UsbMount,0);

         Set_Status(UsbRdy,0);

         LED=0xE7;

         Ch376TaskCnt++;



         //DelayMs(1000);       

       } 

       

       else if(!(Get_Status(UsbConnect)==1&&Get_Status(UsbMount)==1))

       {

         Set_Status(UsbRdy,0);

         while(CheckUsbConnect()!=USB_INT_SUCCESS);//在这里等待USB插入

         Set_Status(UsbConnect,1);

         UsualDelay1ms(20);

         for(i=0;i<5;i++)

         {

           if(CH376DiskMount()==USB_INT_SUCCESS)

            {

               Set_Status(UsbMount,1);

               break;

            }

         }

 

           

         LED=0xE7;

         Ch376TaskCnt++;

         //DelayMs(1000);

       }else if(Get_Status(UsbRdy)==1){

         if(CheckUsbConnect()!=USB_INT_SUCCESS)           

         {

           

          Set_Status(UsbConnect,0);

          Set_Status(UsbMount,0);

          Set_Status(UsbRdy,0);

          }

          

          //DelayMs(100);

        } else{

   

           BUZZ=1;

           DelayMs(100);

           BUZZ=0;  

        }

        

       /*if(Flag_TakeOut){

         Flag_TakeOut=0;

     // s = CH376ByteWrite( "shenmegui", strlen( "shenmegui" ), NULL );  //这个函数存在时,判断USB拔出的while循环会被直接跳过

         CLOSEFILE:

         if(Get_Status(FileOpen)==1||Get_Status(FileCreate)==1){

          if(CH376FileClose(TRUE)==USB_INT_SUCCESS){Set_Status(FileOpen,0);Set_Status(FileCreate,0);} 

          else{

             goto CLOSEFILE;

             }                                                  

         }

         while(CH376DiskConnect()==USB_INT_SUCCESS){

         BUZZ=1;

         }

         BUZZ=0;

         Set_Status(UsbConnect,0);

         Set_Status(UsbMount,0);

         Set_Status(UsbRdy,0);

        }*/

        

        

       DelayMs(80); 

       

   }

 

程序已更改,写文件的函数之前有点问题。但是现在还是写不进去数据。

不加入些文档这段函数,程序能够在执行完创建文件命令后等待拔出。

但是加入写字节函数过后,不动U盘就自动检测到U盘被拔出了



大神  在吗?? 我也在做这个  最近遇到一些问题  想请教你   我的QQ  994099840   希望大神可以叫我 帮我解决一下


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