[求助]CH375 命令操作失败

我用的STC12c5a60s2单片机。用的io模拟总线。现在的情况是CMD_CHECK_EXIST 命令测试成功,并且初始化函数能正常通过。但是,在中断获取状态的时候 P1=0x04; xWriteCH375Cmd( CMD_GET_STATUS ); /* 获取当前中断状态,发出命令后至少延时2uS */ xDelay100uS( ); P1=0x40; CH375IntStatus = xReadCH375Data( ); /* 获取中断状态 */ xReadCH375Data( )的返回值是命令操作失败。求助怎么回事儿

获取到的中断状态是什么中断状态?


就是xWriteCH375Cmd( CMD_GET_STATUS ),之后CH375IntStatus = xReadCH375Data( ); /* 获取中断状态 */ CH375IntStatus 就是0x5f,头文件里说是命令操作失败的意思。


获取中断状态需要在INT引脚拉低后获取,你看一下你的中断配置,有没有等到中断。


现在用查询法返回正确的值了,但是 /* 检查U盘是否准备好,有些U盘不需要这一步,但是某些U盘必须要执行这一步才能工作 */ for ( i=5;i>0 ;i-- ) { /* 有的U盘总是返回未准备好,不过可以被忽略 */ mDelay100mS( );mDelay100mS( );mDelay100mS( ); printf( "Ready ?\n" ); P1_6 = 0; if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查询磁盘是否准备好 */ } P1_6= 1; 这部分就一直卡在这个循环里面,出不来,是不是CH375DiskReady( ) 返回值错了??


for循环执行5次就跳出了,你监控一下返回值是多少?另外,延时没必要这么久,你把mDelay100mS去掉两个。


关键就是他没有跳出来,一到这一步,P1_6的led灯就一直亮着,如果他已经跳出循环了,那个灯应该就灭了啊。


我们CH375DiskReady就算没通过也会有返回值的,然后循环5次跳出。


现在我发现问题可能出现在延时函数上了。我在调整延时函数为(我用的STC12c5a60s2,11.0592M的晶振) void mDelay100mS( ) { UINT8 i, j,c; for ( i = 100; i > 0; i -- ) for ( j = 600; j > 0; j -- ) c +=3; } 五次CH375DiskReady 的返回值都是没有准备好


我监测了一下返回值,是0x82,为啥会出现磁盘断开连接?


额,我在看贵公司的论坛资料时,发现有这样一句,“2:若要使用3.3V电压对CH375供电,要求VCC和V3引脚接3.3V,与CH375相连的处理器的电压也要是3.3V,除USB口的D+、D- 外,任何与CH375相连的引脚都必须是3.3V的。” 我的CH375确实是3.3v供电的,但是我单片机是5v供电的,这个影响很大么?


我们CH375支持3.3V供电。首先确保USB口供电5V,UD+为3.3V。其次,你DiskReady那边延时去了试一下?


usb口供电是5v,VD+我测了一下,是3.0v左右。我把DiskReady的延时全部去掉了,但是五次都返回的没有准备好。跳出循环之后,打开文件,返回值是0x82。我想知道的是,DiskReady那儿的延时要多久才合适


并且我用中断监测xWriteCH375Cmd( CMD_GET_STATUS ); CH375IntStatus = xReadCH375Data( ); /* 获取中断状态 */,就发现CH375IntStatus不太稳定,会是这样的0x16,0x15,0x16,0x15,就是中间磁盘连接状态会有跳变。这个会不会有影响


你USB口那边不稳定,0x15是检测到连接、0x16检测不到连接,这样就导致后面diskready返回0x82。检查一下你的硬件电路。


那是接口有虚焊还是什么?因为模块儿是我买的,硬件电路我也没动过


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