有个U盘无法通过CMD_DISK_READY指令[求助]

我最近拿到一个U盘,发现CMD_DISK_READY指令无法通过,发出该指令后,等待中断获得的状态码为0x1f,前面我对U盘进行CMD_DISK_INIT指令时成功的,返回0x14。

你按照下面的例子程序来进行操作看可以不可以: 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 ); /* */ 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 ); /* */ Status = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( Status == USB_INT_SUCCESS ) break; /* 出现错误 */ CH375_WR_CMD_PORT( CMD_DISK_R_SENSE ); /* */ mDelaymS( 250 ); } } return( 0 ); /* U盘已经成功初始化 */ }


这个问题暂时没法解决了,U盘烧掉了>_


不明白为什么要获取USB存储容量?而且为什么不能获得这个值U盘就算初始化失败呢?


实际上之所以这样说实际是和U盘的协议和U盘制造厂商写的程序有关系的,U盘协议里面计算机都是先获取U盘厂商信息(12H命令),然后获取U盘容量(25H命令)在计算机上面显示U盘总容量(也就是你可以点击U盘属性看到的容量),完了之后发送DISK-READY(00H命令),然后才开始读取U盘的扇区。很多U盘厂商在做程序的时候如果前面的步骤不按照这样来做的话读取U盘物理扇区(或者写)是无法进行的,这就解释了你上面所说的问题。 如果自己做一个U盘的话你可以前面所有的都不做,只要你CH375发送读取U盘物理扇区的话你也可以给其返回。当然你在计算机上面要是需要工作的话还是需要按照上面所说的操作步骤来符合其流程。


哦,明白了。谢谢


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