本帖最后由 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盘通信的
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2、全速为何没出现这个问题呢
一周热门 更多>