[求助]375检测不到U盘的连接???

我做的是AVR单片机读写U盘的小模块,没有用贵公司的库文件,

CH375硬件连接跟贵公司提供的参考电路基本一致。 ----------------------------------

现在单片机工作是正常的,CH375的CMD_CHECK_EXIST命令返回的测试数据也是正确的。

设置模式6后,插入U盘前CMD_TEST_CONNECT返回数据是0X16也应该正常吧。

但就是当插入U盘的时候送CMD_DISK_INT命令,中断返回的数据却是0x20或是0X24或是0X28

或是0X2C。并且与#ACT相连的LED灯一直没有点亮,有时候偶尔用万用表点一下晶振两边

的电容引脚的时候那灯突然又亮了。 --------------------------------

我也看过以前的帖子,说返回0X20这类的状态可能是供电不足,检测U盘超时。

我供电用的是电脑的USB口给整个板子供电(包括一个AVR,一个LCD,一个CH375),

电压测量是4.8V。这应该可以吧?

还有没有插入U盘前产生的中断返回状态是0X20这算正常吗?

插入U盘后,U盘的指示灯有闪动,但CH375的#ACT脚接的LED灯不亮这算正常吗?(晶振

工作正常,CH375初始化正常)。

为什么插入U盘后老是返回不了0X15?????

附部分程序: /* *功能 : 初始化CH375并设置工作模式,如果初始化成功则返回1,否则返回0 */ Uint8 Ch375Init(void) { Uint8 Ui,Uk; for(Ui = 10; Ui > 0; Ui--) { Wch375Cmd(CMD_CHECK_EXIST); asm("nop");//延时 Wch375Dat(0x55); NOP(); Uk = Rch375Dat(); if(0xAA != Uk) { for(Uk = 3; Uk > 0; Uk--) { Wch375Cmd(CMD_RESET_ALL); delay_nms(50);//延时50ms //DisMsg(0,1,"CMD_RESET_ALL"); //delay_s(2); } } else break; } if(Ui == 0) { //DisMsg(0,0,"check failed!"); //delay_s(3); return 0; }

else { Wch375Cmd(CMD_SET_USB_MODE); Wch375Dat(6); /* 模式代码,自动检测USB设备连接 */ delay_nus(20); // Wch375Cmd(CMD_TEST_CONNECT); Ui = Rch375Dat(); DisChar(0,0,&Ui); //显示返回的状态 delay_s(3); return 1; } }

/* *功能 : 初始化U盘.成功时返回1,否则返回错误状态字 */ Uint8 UdiskInit(void) { Uint8 status; Wch375Cmd(CMD_GET_STATUS); //写入获取中断状态的命令字 delay_us();//是否要延时? status = Rch375Dat(); //获取状态 DisChar(9,1,&status); delay_s(3); Wch375Cmd(CMD_TEST_CONNECT); status = Rch375Dat(); DisChar(0,0,&status); delay_s(3); //if(status == USB_INT_DISCONNECT) return status;//USB设备断开*/ Wch375Cmd(CMD_DISK_INIT); //送入初始化命令 status = WaitInt(); //获取状态 DisMsg(0,0,"next time!!!!!"); delay_s(2); //if(status == USB_INT_BUF_OVER){DisMsg(0,1,"USB DISKERR");delay_s(5);} if(status != USB_INT_SUCCESS) {DisChar(10,1,&status); delay_s(1); Wch375Cmd(CMD_SET_USB_MODE); Wch375Dat(6); /* 模式代码,自动检测USB设备连接 */ //delay_nus(20); delay_s(3); DisMsg(0,1," set mode 6"); return status;////////这里返回到主程序,主程序检测到不是1就反复调用UdiskInit() } Wch375Cmd(CMD_DISK_SIZE); status = WaitInt(); if(status != USB_INT_SUCCESS) { delay_nms(250);//延时250毫秒具体查看375手册 DisMsg(0,0,"disk_size!!!!!"); delay_s(2); Wch375Cmd(CMD_DISK_SIZE); status = WaitInt(); } if(status != USB_INT_SUCCESS) return status; else DisMsg(0,0," RUN HERE"); delay_s(5); return 1;//U盘初始化成功 } -------------------------------------------------------

主程序检测到UdiskInit()返回的值不是1就反复调用UdiskInit()。

WCH工程师,

麻烦你了。。


在设置好模式之后,你应该判断375的中断引脚,看下可以不可以来中断,如果来中断的话,判断中断状态是否为0X15,如果是0X15的话,那就说明设备已经连接了,如果不是的话,那么说明设备还没有连接。那就一直在等待设备连接。


在U盘插上之后,再测一下U盘的供电电压是多少,有的U盘低于4.6V可能就不能正常工作了。还有就是在检测到U盘插上来之后,先延时一段时间再进行U盘的初始化。


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