ch374u不能够获取U盘等全速设备的设备描述符,返回代码为0x20,即USB设备没有收到setup数据包,控制传输应该没有问题,因为,能够获取键盘鼠标等低速设备的设备描述符,难道全速设备和低速设备操作上有什么地方不同,除了设置ch374u全速速率相关寄存器以外,还有哪些地方需要注意,希望遇到过该问题而且解决了的给我说一下,还有就是怎么解决的,谢谢。
全速设备和低速设备在操作上面基本上是一样的,在初始化的时候有点补一样,主要在检测到设备之后,判断是全速设备还是低速设备,如果是低速设备则需要切换到速度设备主机,如果是全速则切换到速度设备主机。其他就是在发送获取设备描述符之前有一个50MS的延时,建议加大为200MS
加大了延时仍然不行
如果你有示波器的话,那么建议你去量下USB口上面有没有信号?
UINT8 GetDeviceDescr( PUINT8 buf ) //get device describtion {/*获取设备描述符*/ UINT8 s, len; UINT8 tempbuf[8]; memcpy(tempbuf,SetupGetDevDescr,8); //UsbDevEndpSize = DEFAULT_ENDP0_SIZE; s = HostCtrlTransfer374( tempbuf, buf, &len ); if ( s == USB_INT_SUCCESS ) { //UsbDevEndpSize = ( (PUSB_DEV_DESCR)buf ) -> bMaxPacketSize0; if ( len < ( (PUSB_SETUP_REQ)tempbuf ) -> wLengthL ) s = USB_INT_BUF_OVER; //describ length error } return( s ); } 我直接调用这个函数不能够获取到设备描述符,但是,我在这个调用这个函数处设置一个断点,进入这个函数后就能够获取到设备描述符,请问是怎么回事
你使用的是什么单片机?还有和我们芯片的接口是什么接口?是否有其他的跟踪方式,例如串口之类的,来判断问题出现的哪个函数出现问题。因为HostCtrlTransfer374函数里面包含了很多子函数,需要跟踪下哪个子函数返回了0X20的状态。
使用的是pic单片机,在HostTransact374这个函数处就返回了,发送setup数据包时设备没有应答
我是感觉这种普通低速设备比如键盘很容易调,而全速的设备不容易获取比如U盘
HostTransact374()这个函数里面有一个mDelayuS( 200 )函数,这个延时的时间足够吗?
是启动传输后的,等待传输完成中断置位之前的延时吗
HostCtrlTransfer374()这个函数里面 mDelayuS( 100 );延时
Write374Byte( REG_USB_LENGTH, 8 ); 就是这个后面的延时吧,还是不对
全速设备的枚举应该更简单,你参考HOST.C,特别是延时函数,复位部分,对比一下你的工程修改了那些地方,或者直接移植HOST.C。这样来的更容易一些。