求助:MEGA128+CH375 有些U盘用不了啊[原创]

目前的程序大部份牌子的U盘都能用,并且很稳定. 但是有些牌子的U盘在读取U盘大小时总出错,是不是在初始化U盘成功后还需要发些其它命令才能让这些U盘正常工作呢?

U盘接入后调用如下代码: BYTE CH375_InitDisk(void) { TP_DelayMS(200); //延时200ms让U盘准备好 CH375_WriteCMD(DISK_INIT); //初始化U盘 if(CH375_WaitInterrupt() != USB_INT_SUCCESS)return 0;//不成功则返回0

TP_DelayMS(400); CH375_WriteCMD(DISK_SIZE); //获取U盘大小 if(CH375_WaitInterrupt() != USB_INT_SUCCESS) { TP_DelayMS(400); CH375_WriteCMD(DISK_SIZE); if(CH375_WaitInterrupt() != USB_INT_SUCCESS) return 0;//总在这里出错!!! } return 1; //正常返回1 }[Emot]12[/Emot]

返回的错误码是:(0x1f) USB_INT_DISK_ERR


上面的问题已解决,把代码改成如下就OK了: BYTE CH375_InitDisk(void) { int i; TP_DelayMS(200); //延时500ms让U盘准备好 CH375_WriteCMD(DISK_INIT); //初始化U盘 if(CH375_WaitInterrupt() != USB_INT_SUCCESS)return 0;//不成功则返回0 TP_DelayMS(400); for(i=0;i<5;i++) { CH375_WriteCMD(DISK_SIZE); //获取U盘大小 if(CH375_WaitInterrupt() != USB_INT_SUCCESS) { TP_DelayMS(100); CH375_WriteCMD(DISK_R_SENSE); if(CH375_WaitInterrupt() != USB_INT_SUCCESS) return 0; } else return 1; TP_DelayMS(400); } return 0; //正常返回1 }

还有一个问题:我这里有一个U盘,写数据的时候函数调用都成功,但拿到电脑上面一看,文件里根本没写进去东西,就建成了一个文件名,里面是0字节??


1、写完数据后还需要更新目录项 2、读写U盘建议使用我们的子程序,自己写U盘兼容性问题很难保证


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