[求助]ch374调用HostTransact374返回0x20

我调用GetDeviceDescr读取低速usb设备的设备描述符成功返回0x14,但读取高速usb设备如激光鼠标时返回0x20,调试发现调用HostTransact374返回0x20,请高手和技术人员帮助解决一下

技术人员看到请回复一下


真的是很急,如有高手知道请回复一下,谢谢


是不是说反了?读取非低速设备是成功的,而读取低速设备是返回0X20。 你在移植程序的时候,要修改延时函数。我们提供的DEMO是普通的51MCU,24MHZ


没有说反啊,修改了延时函数,用的是24MHz,我读取普通光电usb鼠标时没有问题,能够读取,调试其为低速usb,但我读取激光鼠标时,调试其为全速sub调用函数HostSetFullSpeed(),但获取设备描述符时: _int8State = GetDeviceDescr( bytebuf ); // 获取设备描述符 返回int8State == 0x20,继续调试得知HOST.C中函数HostTransact374返回0x20,进入调试 s = Read374Byte( REG_USB_STATUS ); // USB状态 r = s & BIT_STAT_DEV_RESP; // USB设备应答状态 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; r == 0x08,没有进入任何条件,break,然后HostTransact374结束返回0x20


我查找了以前的帖子,根据他们的说法我修改了主函数里面检测到高速设备后的延时DelayMS(50)改为DelayMs(200),但还是一样没有得到设备描述符,仍然返回0x20失败,请问可能是什么原因造成的呢


是不是我HOST.C里面的HostSetFullSpeed()有问题呢 我文件里面的函数如下: void HostSetFullSpeed( void ) // 设定全速USB设备运行环境 { Write374Byte( REG_USB_SETUP, BIT_SETP_HOST_MODE | BIT_SETP_AUTO_SOF ); // 全速且发SOF Write374Byte( REG_HUB_SETUP, BIT_HUB0_EN ); // 使能HUB0端口 } 如果有问题能不能帮我修改一下,谢谢


是这样的,不同的平台,延时肯定误差较大。你修改底层的延时函数实验一下。


恩,好的,我试一下


还是不行啊,仍然返回0x20,全速usb和低速usb为什么差别这么大呢?获取他们的设备描述符的函数有什么区别吗?我都是用的同样的程序,难道就仅仅是有延时的区别吗?在什么地方延时有区别?能具体告知一下吗?谢谢


你给我发个邮件,我给你发个程序测试一下


好,行,谢谢哈


我已经发送了邮件


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