usb高速模式+ucosii无法枚举

2019-07-20 12:02发布

本帖最后由 yuer19900712 于 2017-9-11 14:09 编辑

usb高速host模式,结合ucosii系统,dma模式,在插入u盘后无法与u盘进行正常通信,在枚举第一步,获取设备描述符就通不过,下面第二段程序第10行那一步。[mw_shl_code=c,true]  case HOST_ENUMERATION:     
    /* Check for enumeration status */  
    if ( USBH_HandleEnum(pdev , phost) == USBH_OK)
    {
      /* The function shall return USBH_OK when full enumeration is complete */
      
      /* user callback for end of device basic enumeration */
      phost->usr_cb->EnumerationDone();
      
      phost->gState  = HOST_USR_INPUT;   
    }
    break;[/mw_shl_code]


[mw_shl_code=c,true]static USBH_Status USBH_HandleEnum(USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost)
{
  USBH_Status Status = USBH_BUSY;  
  uint8_t Local_Buffer[64];
  
  switch (phost->EnumState)
  {
  case ENUM_IDLE:  
    /* Get Device Desc for only 1st 8 bytes : To get EP0 MaxPacketSize */
    if ( USBH_Get_DevDesc(pdev , phost, 8) == USBH_OK)
    {
      phost->Control.ep0size = phost->device_prop.Dev_Desc.bMaxPacketSize;
      
      /* Issue Reset  */
      HCD_ResetPort(pdev);
      phost->EnumState = ENUM_GET_FULL_DEV_DESC;[/mw_shl_code]
通过usb的抓包软件发现,没有发出获取描述符的setup包,

另外改动一个 地方可以通过就是usb的延时函数
[mw_shl_code=c,true]void USB_OTG_BSP_mDelay (const uint32_t msec)
{  
        delay_ms(msec);
}[/mw_shl_code]
把这个延时函数换成之前的那种
[mw_shl_code=applescript,true]void USB_OTG_BSP_mDelay (const uint32_t msec)
{

    USB_OTG_BSP_uDelay(msec * 1000);   

}[/mw_shl_code]


说白了也就是这个延时USB_OTG_BSP_uDelay不会引起任务切换。
还有一点是,用delay_ms(msec);这个函数在全速模式下是可以正常与u盘通信的
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。