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盘通信的
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
yuer19900712
1楼-- · 2019-07-20 12:23
1、任务切换为什么会引起通信不正常
2、全速为何没出现这个问题呢
yuer19900712
2楼-- · 2019-07-20 18:10
 精彩回答 2  元偷偷看……
yuer19900712
3楼-- · 2019-07-20 18:21
自顶一下
yuer19900712
4楼-- · 2019-07-20 20:49
没人理
正点原子
5楼-- · 2019-07-20 23:22
 精彩回答 2  元偷偷看……
zsl666888
6楼-- · 2019-07-21 04:35
帮顶!!!

一周热门 更多>