[讨论] usb host程序枚举不了是怎么回事

770781327   2014-11-26 11:00 楼主

  1.   case HOST_ENUMERATION:
  2.     /* Check for enumeration status */  
  3.     if ( USBH_HandleEnum(pdev , phost) == USBH_OK)
  4.     {
  5.       /* The function shall return USBH_OK when full enumeration is complete */
  6.       
  7.       /* user callback for end of device basic enumeration */
  8.       phost->usr_cb->EnumerationDone();
  9.       
  10.       phost->gState  = HOST_USR_INPUT;
  11.     }
  12.     break;
  1.   case ENUM_IDLE:  
  2.     /* Get Device Desc for only 1st 8 bytes : To get EP0 MaxPacketSize */
  3.     if ( USBH_Get_DevDesc(pdev , phost, 8) == USBH_OK)
  4.     {
  5.       phost->Control.ep0size = phost->device_prop.Dev_Desc.bMaxPacketSize;
  6.       
  7.       /* Issue Reset  */
  8.       HCD_ResetPort(pdev);
  9.       phost->EnumState = ENUM_GET_FULL_DEV_DESC;
  10.       
  11.       /* modify control channels configuration for MaxPacket size */
  12.       USBH_Modify_Channel (pdev,
  13.                            phost->Control.hc_num_out,
  14.                            0,
  15.                            0,
  16.                            0,
  17.                            phost->Control.ep0size);
  18.       
  19.       USBH_Modify_Channel (pdev,
  20.                            phost->Control.hc_num_in,
  21.                            0,
  22.                            0,
  23.                            0,
  24.                            phost->Control.ep0size);      
  25.     }
  26.     break;
  1. USBH_Status USBH_Get_DevDesc(USB_OTG_CORE_HANDLE *pdev,
  2.                              USBH_HOST *phost,
  3.                              uint8_t length)
  4. {
  5.   
  6.   USBH_Status status;
  7.   
  8.   if((status = USBH_GetDescriptor(pdev,
  9.                                   phost,
  10.                                   USB_REQ_RECIPIENT_DEVICE | USB_REQ_TYPE_STANDARD,                          
  11.                                   USB_DESC_DEVICE,
  12.                                   pdev->host.Rx_Buffer,
  13.                                   length)) == USBH_OK)
  14.   {
  15.     /* Commands successfully sent and Response Received */      
  16.     USBH_ParseDevDesc(&phost->device_prop.Dev_Desc, pdev->host.Rx_Buffer, length);
  17.   }
  18.   return status;      
  19. }
  1. typedef enum {
  2.   USBH_OK   = 0,
  3.   USBH_BUSY,
  4.   USBH_FAIL,
  5.   USBH_NOT_SUPPORTED,
  6.   USBH_UNRECOVERED_ERROR,
  7.   USBH_ERROR_SPEED_UNKNOWN,
  8.   USBH_APPLY_DEINIT
  9. }USBH_Status;


在USBH_Process函数中发现主要是枚举的这个if条件满足不了,一步步仿真切入分析,发现主要是这个if进不了,status为1,即始终是USBH_BUSY。


请问谁知道这是怎么回事?






回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复