CH374 host 获取设备描述符失败,有的键盘又可以。怎么会这样呢?

Init374Host();// 初始化USB主机
 
 while(1)
 {
  SetHostLeisure();//设定USB主机空闲
  while(1)
  {
   if (Query374Interrupt()) HostDetectInterrupt();  // 如果有USB主机中断则处理
   if (Query374DeviceIn()) break;                   // 有USB设备
    OSTimeDly(5); //100ms
  }
  
  OSTimeDly(14); //延时14*20ms = 280ms      // 由于USB设备刚插入尚未稳定,故等待USB设备数百毫秒,消除插拔抖动
  if(Query374Interrupt()) HostDetectInterrupt(); // 如果有USB主机中断则处理
   
  HostSetReset();// USB总线复位
  
  for(i=0;i<100;i++ )// 等待USB设备复位后重新连接
    {
   if(Query374DeviceIn())  break; // 有USB设备
   delay_us(1000);
  }
  
  if(Query374Interrupt()) HostDetectInterrupt( ); // 如果有USB主机中断则处理
  
  if(Query374DeviceIn())// 有USB设备
    { 
   if(Query374DevFullSpeed())
      {
    HostSetFullSpeed();// 检测到全速USB设备
    printf( "Start Full-Speed Device\r\n" );
   }
   else
      {
    HostSetLowSpeed();// 检测到低速USB设备
     printf( "Start Low-Speed Device\r\n" );
   }
  }
  else
    {
   continue;// 设备已经断开,继续等待
  }
  OSTimeDly(3); //延时3*20ms = 60ms
  
  close_bit_flag=0;//设备是否拔出
  
//1、获取设备描述符  
  s = GetDeviceDescr(DeviceDescribe_buf); // 获取设备描述符
  if(s != USB_INT_SUCCESS )
    {
   printf("GetDeviceDescr Error\r\n");
   goto WaitDeviceOut;// 终止操作,等待USB设备拔出
  }
  
  printf("DeviceDescr:");
  for(i=0;i <((PUSB_SETUP_REQ)SetupGetDevDescr ) -> wLengthL;i++ )
    printf("%02X ",DeviceDescribe_buf[i]);//输出描述符
  printf( "\r\n" );


=======================================

串口输出信息:

键盘1:

Start Low-Speed Device
GetDeviceDescr Error
Wait Device Out


键盘2:

Start Low-Speed Device
DeviceDescr:12 01 10 01 00 00 00 08 D5 05 89 06 03 01 00 01 00 01
SetUsbAddress:0X02 Success
GetConfigDescr:
09 02 3B 00 02 01 00 A0 32 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 41 00 07 05 81 03 08 00 0A 09 04 01 00 01 03 00 00 00 09 21 10 01 00 01 22 32 00 07 05 82 03 05 00 0A
hid_des_leng=41
endp_in_addr=01
endp_out_addr=00
GetConfigDescr Success
SetUsbConfig success


GetDeviceDescr出错的返回值多少?


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