各位大侠帮我一下。
我用的CPU是NIOS,每次读0x04硬件信息位,值一直是0x01;
怎么一直在睡眠呢?
各位大侠帮我一下。
我用的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