STM32
直播中

李勇俊

7年用户 1492经验值
私信 关注
[问答]

STM32F105的USB_Host模式下驱动U盘卡在(case CMD_WAIT)是什么原因?

  情况是这样的,用STM32F105作host驱动U盘,用的STM32的MSC库,前面都没有问题 Enumeration completed  > USBH_USR_UserInput OK.  (我只在原库基础上加了串口中断输出调试)
一直卡在USBH_MSC_Handle 里的USBH_MSC_GETMaxLUN 里的USBH_CtlReq等,卡在(case CMD_WAIT)这了,谁知道是什么原因?如何解?
贴码如下:
USBH_Status USBH_CtlReq     (USB_OTG_CORE_HANDLE *pdev,
                             USBH_HOST           *phost,
                             uint8_t             *buff,
                             uint16_t            length)
{
  USBH_Status status;
  status = USBH_BUSY;
  
  switch (phost->RequestState)
  {
  case CMD_SEND:
    /* Start a SETUP transfer */
    USBH_SubmitSetupRequest(phost, buff, length);
    phost->RequestState = CMD_WAIT;
    status = USBH_BUSY;
    break;
   
  case CMD_WAIT:
     if (phost->Control.state == CTRL_COMPLETE )
    {
      /* Commands successfully sent and Response Received  */      
      phost->RequestState = CMD_SEND;
      phost->Control.state =CTRL_IDLE;  
      status = USBH_OK;      
    }
    else if  (phost->Control.state == CTRL_ERROR)
    {
      /* Failure Mode */
      phost->RequestState = CMD_SEND;
      status = USBH_FAIL;
    }   
     else if  (phost->Control.state == CTRL_STALLED )
    {
      /* Commands successfully sent and Response Received  */      
      phost->RequestState = CMD_SEND;
      status = USBH_NOT_SUPPORTED;
    }
    break;
   
  default:
    break;
  }
  return status;
}

回帖(1)

温暖镜头

2024-5-14 16:56:45
从您提供的信息来看,STM32F105在USB Host模式下驱动U盘时,卡在了USBH_MSC_GETMaxLUN函数中的USBH_CtlReq函数的CMD_WAIT状态。这可能是由于以下原因导致的:

1. USB设备未正确响应控制请求:U盘可能没有正确响应USB Host发送的控制请求,导致CMD_WAIT状态持续。

2. USB Host与U盘之间的通信问题:可能是由于USB Host与U盘之间的通信存在问题,导致控制请求无法正常完成。

3. USB Host驱动配置问题:STM32F105的USB Host驱动配置可能存在问题,导致无法正确处理控制请求。

为了解决这个问题,您可以尝试以下方法:

1. 检查U盘:确保U盘是好的,并且支持USB Host模式。您可以尝试使用其他U盘进行测试,以排除U盘本身的问题。

2. 检查USB连接:确保USB连接线和接口没有问题,连接稳定。

3. 检查USB Host驱动配置:检查STM32F105的USB Host驱动配置,确保配置正确。您可以参考STM32F105的官方文档和示例代码,确保驱动配置正确。

4. 调试和日志输出:在USBH_CtlReq函数中添加调试和日志输出,以便更好地了解控制请求的处理过程。这可以帮助您确定问题所在。

5. 更新固件和库:检查是否有适用于STM32F105的固件或库更新,这些更新可能包含了针对此类问题的修复。

6. 寻求社区帮助:如果您无法解决问题,可以在STM32和USB相关的开发者社区寻求帮助。其他开发者可能遇到过类似的问题,并能提供解决方案。

希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分