CH375初始化,用DISK_INIT命令,返回中断0x15,这是为什么?
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盘已经成功初始化 */ } 你用上面的这段初始化函数试下看还会不会出现你说的问题
我用的是这段函数,和你的差不多
unsigned char InitDisk(void) { unsigned char stat; unsigned char *buff; unsigned char i; buff = DataBuff; WriteCmd(CMD_GET_STATUS); stat = ReadData(); if(stat == USB_INT_DISCONNECT) return(stat); //USB设备断开 WriteCmd(CMD_DISK_INIT); //初始化USB存储器 stat = GetInt(); if(stat != USB_INT_SUCCESS) //!!我调试的时候,发现程序是在这里返回的!! return(stat); WriteCmd(CMD_DISK_SIZE); //获取USB存储器容量 stat = GetInt(); if(stat != USB_INT_SUCCESS) { delay_ms(250); WriteCmd(CMD_DISK_SIZE); //再次尝试 stat = GetInt(); } if(stat != USB_INT_SUCCESS) return(stat); WriteCmd(CMD_RD_USB_DATA); i = ReadData(); for(; i > 0; i--) *buff++ = ReadData(); //容量数据,参看数据手册5-6 return(0); //初始化成功 }
如果有USB设备插着,返回0X15是正确的
有USB设备插着,返回0X15是正确的,但如果发送命令了DISK_INIT,返回中断还会是0x15么?
应该返回的是0X14。
试了一下,还是不行 我用的是mega8,串口方式的 前面的版本号查询。测试工作状态,都可以完成 U盘插上,也返回中断0x15 就是初始化DISK_INIT,返回仍旧是0x15,换了其他U盘,仍是无果 ......