[求助] 急求啊! U盘初始化一直不来中断

我用的贵公司CH375V片子。使用过程中发现执行命令CMD_DISK_INIT做U盘初始化时CH375的P1(INT)脚一直不来中断。操作步骤如下: 1。发命令CMD_CHECK_EXIST检查工作状态,返回数据确实已经按位取反 2。发命令CMD_RESET_ALL硬件复位 3。发命令CMD_SET_USB_MODE设置工作模式6 4。检测U盘连接,返回15H 5。发命令CMD_DISK_INIT始U盘初始化, 此时CH375的P1(INT)脚一直不来中断,因此程序一直在while循环里等中断。奇怪的是这时程序只要暂停一下,中断就来了,继续运行用CMD_GET_STATUS命令读回中断状态字是14H,这就正常初始化了。

我用CMD_GET_STATUS命令检查U盘出错状况,结果返回中断状态字1F,表示USB 存储设备操作失败。用CMD_DISK_READ命令检查U盘是否准备好也返回1F

请问各位高手版主们啊,这时什么问题??? 谢谢谢谢!! 已经折磨我很久了...... 代码如下:

cmd(CMD_CHECK_EXIST); // 检查375工作与否 wrd(0xee); // 向375写数据 stat_Check=re(); cmd(CMD_RESET_ALL); //硬件复位 delay(40); cmd(CMD_SET_USB_MODE); //375初始化,设置模式 wrd(0x06); _NOP(); while(WaitINT_USBConct()!=USB_INT_CONNECT); // u盘插上与否,WaitINT_USBConct()函数读中断,返回15H delay(400); cmd( CMD_DISK_INIT ); // u盘初始化 stat_Disk=WaitINT_DiskInit();// 这里出错,一直在while等中断,中断不停不来:((

这个首先你的U盘电压稳定不稳定在5V左右,其次就是自己初始化的话,那么你可以参考下面的流程来做下看可以不可以: 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; /* 出现错误 */ else { mDelaymS( 250 ); CH375_WR_CMD_PORT( CMD_DISK_R_SENSE ); /* 获取USB存储器的容量 */ Status = mWaitInterrupt( ); /* 等待中断并获取状态 */ if ( Status == USB_INT_SUCCESS ) /* 出现错误 */ continue; else return (Status); } if(j==5) return(Status); } 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盘已经成功初始化 */ }


这里的Status = mWaitInterrupt( )是不是库函数,怎么写?


1.不是库函数 unsigned char mWaitInterrupt() { /* 主机端等待操作完成, 返回操作状态 */ while( CH375_INT_WIRE ); /* 查询等待CH375操作完成中断(INT#低电平) */ CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */ return( CH375_RD_DAT_PORT( ) ); }


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