读U盘的问题

为什么我的U盘的0扇区的MBR的第一个分区表的启动代码是00而不是80, 可是U盘能用,CH375却读不出来? 谢谢! MBR的信息截图在附件里。20096320162149.jpg

(1)CH375能否读出数据,与启动代码是什么,没任何关系 (2)读不出来的具体现象是什么呢?U盘初始化通过了没?下载CH375EVT.ZIP,参考\CH375EVT\PUB\MCS51C\MISCELL


然后就是执行DISK_SIZE命令时总是出错, 跳过去后在读取U盘扇区数据时首先读取的输出数据块长度总是0,所以读不出任何东西。 这个程序读fat16的U盘是没问题的,读fat32的初始化U盘命令也通过了,就是有上面的错误。 帮帮忙啊~~


DISK_SIZE要有个重试。 失败后延时200MS,然后R_SENSE命令,然后在重新获取。一般2-3次都可以正确获取到了。


我重新R_SENSE后再DISK_SIZE,始终得到0x1F,即存储设备操作失败, 会不会是不支持这个U盘?kingston的4G的


不知道可以不可以把你初始化U盘的程序贴出来看下,还有就是MS级的延时需要准确点,这样我们的R_SENSE才有效果.


初始化程序对别的几款U盘都能用,不知道这个为什么不行。 这个的第一个分区表的启动代码是00而不是80,不知道有没有原因。 应该不是程序的问题,以为我3个u盘能读出来,这个不行,不过概率还是挺大的哦,这样的产品不敢拿出去啊。。。

CH375_WR_CMD( CMD_SET_USB_MODE ); DelayMs(1); CH375_WR_DAT( 6 ); /* 模式代码,自动检测USB设备连接 */ for ( i = 0xffff; i != 0; i -- ) /* 等待操作成功,通常需要等待10uS-20uS */ if ( CH375_RD_DAT( ) == CMD_RET_SUCCESS ) break; if ( i != 0 ) { return( 0 ); /* 操作成功 */ #if DEBUG_PRINTF sea_printf("USB initialize ok.\n"); #endif } else return( 0xff ); /* CH375初始化未成功,例如芯片型号错或者处于串口方式或者不支持 */

CH375_WR_CMD( CMD_GET_STATUS ); mIntStatus = CH375_RD_DAT( ); if ( mIntStatus == USB_INT_DISCONNECT ) return( mIntStatus ); /* USB设备断开 */ /* 初始化USB存储器 */ CH375_WR_CMD( CMD_DISK_INIT ); mIntStatus = mWaitInterrupt( ); if ( mIntStatus != USB_INT_SUCCESS ) /* 返回USB_INT_SUCCESS标识操作成功 */ return( mIntStatus ); /* 获取USB存储器的容量 */ SIZE: CH375_WR_CMD( CMD_DISK_SIZE ); mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( mIntStatus != USB_INT_SUCCESS ) /* 出错重试 */ { DelayMs( 200 ); CH375_WR_CMD( CMD_DISK_R_SENSE ); /* 获取USB存储器的容量 */ mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( mIntStatus == USB_INT_CONNECT ) goto SIZE ; /* 出现错误 */ }


你拿这个程序去测试下看可以不可以: UINT8 mInitDisk( void ) { /* 初始化磁盘 */ UINT8 Status,i,j=0; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */ Status = CH375_RD_DAT_PORT( ); if ( Status == USB_INT_DISCONNECT ) return( Status ); /* USB设备断开 */ CH375_WR_CMD_PORT( CMD_DISK_INIT ); /* 初始化USB存储器 */ Status = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( Status != USB_INT_SUCCESS ) return( Status ); /* 出现错误 */ while(1){j++; CH375_WR_CMD_PORT( CMD_DISK_SIZE ); /* 获取USB存储器的容量 */ Status = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( Status == USB_INT_SUCCESS ) break; /* 出现错误 */ /*这里需要加上这个之后才可以,正确的做法也是这样*/ CH375_WR_CMD_PORT( CMD_DISK_R_SENSE ); /* 获取USB存储器的容量 */ mDelaymS( 250 ); if(j==5) return(Status); } Status = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( Status == USB_INT_SUCCESS ){ /* 出现错误 */ for(i=0;i!=5;i++){ printf("Ready\n"); CH375_WR_CMD_PORT( CMD_DISK_READY ); /* 获取USB存储器的容量 */ Status = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( Status == USB_INT_SUCCESS ) break; /* 出现错误 */ CH375_WR_CMD_PORT( CMD_DISK_R_SENSE ); /* 获取USB存储器的容量 */ mDelaymS( 250 ); } } return( 0 ); /* U盘已经成功初始化 */ }


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