[求助]为什么我的CH374读出一直是睡眠状态?

各位大侠帮我一下。

我用的CPU是NIOS,每次读0x04硬件信息位,值一直是0x01;

怎么一直在睡眠呢?

首先,上电之后是否有加50MS以上的延时 其次,CPU和CH374芯片之间的硬件连线是否有问题?读取默认寄存器是否正确? 再次,CH374芯片工作在主机模式还是设备模式?


现在读取寄存器正常了,我现在想把CH374配置成主机模式,与另外的USB设备通讯,有没有参考的流程,比如应该初始化什么,然后如何配置之类的资料?


请到此网页去下载例子程序,里面有一个HOST.C就是CH374做主机枚举USB设备: http://wch.cn/download/list.asp?id=89


程序已经跑起来了,但是连接设备后出现错误,错误代码如下:

GetDeviceDescr: ERROR = FA

我应该怎么解决这个问题。


MCU和CH374通讯成功了没?对CH374的寄存器操作可以成功吗? 你看一下代码,0XFA是什么意思。是等待中断超时。你把waitinterrupt里的超时修改为死循环实验一下


寄存器的操作已经正常了!0xFA是其他错误的意思。

现在我发现芯片晶振没有起振,我的usb线直接连接到芯片上,没有加保护,会不会是插拔时有静电把芯片击穿? 之前,都是好的,中断也有,现在中断没有了,读出来的系统状态是正在复位!


现在出错状态为0x2B

GetDeviceDescr:ERROR = 2B

这个是什么原因呢?


源代码中hostFS.c和host.c有什么区别?


HOSTFS.c文件中,发现代码中有一处bug,

在HostTransact374函数中

------------------------------------------------------------------ switch ( pid ) { case DEF_USB_PID_SETUP: case DEF_USB_PID_OUT: if ( r == DEF_USB_PID_ACK ) return( USB_INT_SUCCESS ); else if ( r == DEF_USB_PID_STALL || r == DEF_USB_PID_NAK ) return( r | 0x20 ); else if ( ! M_IS_HOST_TIMEOUT( s ) ) return( r | 0x20 ); // 不是超时/出错,意外应答 break; case DEF_USB_PID_IN: if ( M_IS_HOST_IN_DATA( s ) ) { // DEF_USB_PID_DATA0 or DEF_USB_PID_DATA1 if ( s & BIT_STAT_TOG_MATCH ) return( USB_INT_SUCCESS ); // 不同步则需丢弃后重试 } else if ( r == DEF_USB_PID_STALL || r == DEF_USB_PID_NAK ) return( r | 0x20 ); else if ( ! M_IS_HOST_TIMEOUT( s ) ) return( r | 0x20 ); // 不是超时/出错,意外应答 break; default: return( ERR_USB_UNKNOWN ); // 不可能的情况 break; } ------------------------------------------------------------------

DEF_USB_PID_SETUP这个没有break;这个地方应该怎么样处理?请各位帮忙!


DEF_USB_PID_SETUP: 可以认为是OUT包。就是主机发送给设备的。这个代码已经很成熟了。不是BUG


我现在用的是中断方式的,我把main函数中的Query374Interrupt( )换成了我的中断标志判断(CH374_INTRRUPT_FLAG == TRUE)

其他的地方还有需要更改的吗?


你仔细看一下代码,然后在决定怎么修改。0XFA就是等中断超时。5楼已经建议你修改为死循环。按照我们的建议来做,我们给你建议,你做实验然后给我们一个反馈,这样解决问题快。不要一直表述自己的实验的错误现象。


我已经改为死循环了,结果是这样的。

Start CH374 Host Successful register CH374 ISR! Wait Device In Reset Device Start Full-Speed Device GetDeviceDescr: ERROR = 2B Wait Device Out //拔出后再插入 Wait Device In Reset Device Start Full-Speed Device GetDeviceDescr:

//这里是死循环,一直没有


你看下获取设备描述符这个函数,去跟踪下哪个函数返回0X2B的错误。还有你用的是什么单片机?


if ( r == DEF_USB_PID_ACK ) return( USB_INT_SUCCESS ); else if ( r == DEF_USB_PID_STALL || r == DEF_USB_PID_NAK )return( r | 0x20 ); else if ( ! M_IS_HOST_TIMEOUT( s ) ) return( r | 0x20 ); // 不是超时/出错,意外应答 break;

错误是在第三个地方出现的,我跟踪过了,也看了ch374的手册是意外应答。这就难办了。

我用的是nios


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