CH375V DISK_INIT初始化命令失败

不知道有没有遇到过类似问题, HOST方式下,在执行DISK_INIT命令后,返回0x20(超时错误码?) 可能是什么原因?

你用下面的一段程序试下: 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; /* 出现错误 */ mDelaymS( 250 ); if(j==5) return(Status); } CH375_WR_CMD_PORT( CMD_DISK_R_SENSE ); /* 获取USB存储器的容量 */ 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; /* 出现错误 */ } } return( 0 ); /* U盘已经成功初始化 */ }


同问一下: 谢了 我的也出现这问题:(在执行DISK_INIT命令后,返回0x20 超时错误码) 我用上面的程序也试了,还是。 mCH375Init( );375初始化通过,返回0x15 CH375_WR_CMD_PORT(CMD_SET_USB_MODE); CH375_DAT_PORT=0x06; RST#电平为高,RST为低,RSTI为低; CH375_WR_CMD_PORT(CMD_DISK_INIT);返回 0X20 CH375_WR_CMD_PORT(CMD_DISK_SIZE);返回 0X1F CH375_WR_CMD_PORT(CMD_DISK_RESET);返回 0X20


要是不行的话你换个U盘试下,因为这个只是一般意义上面对U盘的初始化,而在WINDOWS对U盘的初始化则比这个复杂很多,你可以调用我们库里面的DISK-READY这个函数看下U盘的初始化可以不可以过


还是不行 i = CH375LibInit( );返回0X15。 CH375_CMD_PORT=CMD_DISK_INIT; 返回0X2C CH375DiskReady( ) 返回0X2C 我换了一块CH375,刚才返回0X2C的语句,都返回0X24 (是不是都一样,超时错误,啥意思?) 可能是啥问题,电路板上的吗? 电源供电,和板子上的电容会不会影响他, 几个电容都好着,没被击穿。仿真器的KIIL C 应该没事吧 换了两个U盘都是了都不行,一个三星的U盘,一个恒嘉的MP3


找到了,是板子上的问题。 电阻太大,UD+,UD-上电流太小,U盘不工作 谢谢了! :)


不知道有没有遇到过类似问题,已启用HOST方式下,在执行DISK_INIT命令后,返回0x16。 可能是什么原因?


初始化时,发了读状态命令后,为什么INT会一直是低呢?


那你状态读出来了没有??


把375设定为方式6时,执行命令后产生中断,读取中断状态后,在INT的状态仍为低的情况下,375还能接收下一个命令吗?我这里就可以继续执行,但返回的状态是上一个命令的。 我现在的读中断状态的处理过程是这样的: i = 0; while(1) { if(IO0PIN&USB_INT) { i++; if(i>300000) return 0xfa; //超时 } else { Loop(5); //延时100ns //GET_STATUS if((IO0PIN&USB_INT)==0) { Write_Ord(0x22); dat = ReadUSBData(); i = 0; while((IO0PIN&USB_INT)==0) { Write_Ord(0x22); dat = ReadUSBData(); LoopNop(20); i++; if(i>3000) return 0xfb; //超时 } } return(dat); }


执行命令后如果产生了中断,那么发GET_STATUS命令后能否使INT的状态复位呢?


发获取状态的命令之后就会将INT脚拉高的


执行了DISK_INIT命令后,INT有时会一直为低,发获取状态命令也不会高起来的;但有时却又是正常的。是由于没有把命令发到,还是由于其它什么问题? 读取状态时,有时INT会有一个高的状态但是很短暂的,然后一直为低;但大多数时候是一直为低的,读到的状态是命令SET_USB_MODE执行后的状态14。


这个有可能你的GET-STATUS的命令没有发送到375,这样的话就有可能出现你说的这种情况


在INT为低时,继续发GET_STATUS命令,用视波器观察INT也有为高,但最终状态仍是低。所以命令是发到了,但为什么又会低下来呢?有没有可能375坏了。


Write_Ord()函数以及写数据和读数据的函数可以不可以看下?


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