4193|0

524

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

usb host程序枚举不了是怎么回事 [复制链接]


  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。


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






此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表