while(1) { AudioLED_ON();
USBstatus = CH376DiskConnect(); if(USBstatus==USB_INT_SUCCESS) //为什么不是USB_INT_CONNECT?u盘插入 { USART1_SendByte(0x51);//lin test mDelaymS(200); for ( i = 0; i < 100; i ++ ) { mDelaymS(50); USBstatus = CH376DiskMount(); USART1_SendByte(USBstatus);//lin test if(USBstatus==USB_INT_SUCCESS) break; //准备好 else if(USBstatus==ERR_DISK_DISCON)break; //断开 USART1_SendByte(CH376GetDiskStatus( ));//lin test if ((CH376GetDiskStatus( ) >= DEF_DISK_MOUNTED) && (i >= 5) ) break; // 有的U盘总是返回未准备好,不过可以忽略,只要其建立连接MOUNTED且尝试5*50mS } if ( USBstatus == ERR_DISK_DISCON ) // 检测到断开,重新检测并计时 continue;
if ( CH376GetDiskStatus( ) < DEF_DISK_MOUNTED ) // 未知USB设备,例如USB键盘、打印机等 goto UnknownUsbDevice;
//if(USBstatus==USB_INT_SUCCESS)//磁盘初始化 //{ strcpy( buf, "\CH376.TXT" ); USART1_SendByte(0x52);//lin test USBstatus = CH376FileOpen(buf); USART1_SendByte(USBstatus);//lin test if ( USBstatus == ERR_MISS_DIR || USBstatus == ERR_MISS_FILE ) // 没有找到目录或者没有找到文件 // 列出文件,完整枚举可以参考EXAM13全盘枚举 { if ( USBstatus == ERR_MISS_DIR ) strcpy( buf, "\\*" ); // C51子目录不存在则列出根目录下的文件 else strcpy( buf, "\\C51\\CH376*" ); // CH376HFT.C文件不存在则列出\C51子目录下的以CH376开头的文件 USBstatus = CH376FileOpenPath( buf ); // 枚举多级目录下的文件或者目录,输入缓冲区必须在RAM中 while ( USBstatus == USB_INT_DISK_READ ) // 枚举到匹配的文件 */ { CH376ReadBlock( buf ); // 读取枚举到的文件的FAT_DIR_INFO结构,返回长度总是sizeof( FAT_DIR_INFO ) pDir = (P_FAT_DIR_INFO)buf; // 当前文件目录信息 */ if ( pDir -> DIR_Name[0] != '.' ) // 不是本级或者上级目录名则继续,否则必须丢弃不处理 { if ( pDir -> DIR_Name[0] == 0x05 ) pDir -> DIR_Name[0] = 0xE5; // 特殊字符替换 pDir -> DIR_Attr = 0; // 强制文件名字符串结束以便打印输出 } xWriteCH376Cmd( CMD0H_FILE_ENUM_GO ); // 继续枚举文件和目录 xEndCH376Cmd( ); USBstatus = Wait376Interrupt( ); } USART1_SendByte(USBstatus);//lin test } else // 找到文件或者出错 { for(i=0;i<30;i++) buf[i]=0; CH376ByteRead( buf, 30, &RealCount ); for(i=0;i<30;i++) USART1_SendByte(buf[i]); } //}
UnknownUsbDevice: while ( CH376DiskConnect( ) == USB_INT_SUCCESS ) { /* 检查U盘是否连接,等待U盘拔出 */ mDelaymS( 1000 ); } } AudioLED_OFF(); mDelaymS(300); }
上面是代码,连接读卡器上电(有SD卡,电脑可以正确识别的),CH376DiskConnect()正确返回USB_INT_SUCCESS,但下面的for循环,CH376DiskMount()都是返回0x1f,CH376GetDiskStatus( )都是返回0x02,最后程序跳到UnknownUsbDevice,不能识别读卡器?