求教USB host挂U盘,枚举成功后f_mount成功,但是f_open不成功。

2019-07-20 09:35发布

首先,公司使用的GD32,所以我直接用GD提供的库和DEMO。
在opne失败后我检查发现最终在
/*!
    rief      read sector(s)
    param[in]  drv: physical drive number (0)
    param[in]  buff: pointer to the data buffer to store read data
    param[in]  sector: start sector number (LBA)
    param[in]  count: sector count (1..255)
    param[out] none
    etval     status
*/
DRESULT disk_read (BYTE drv,
                   BYTE *buff,
                   DWORD sector,
                   BYTE count)
{
    BYTE status = USBH_MSC_OK;
    if (drv || !count) return RES_PARERR;
    if (stat & STA_NOINIT) return RES_NOTRDY;

    if (hcd_is_device_connected(&usb_core_dev)) {
        do {
            status = usbh_msc_read10(&usb_core_dev, buff,sector, 512 * count);

            usbh_msc_handle_botxfer(&usb_core_dev, &usb_host,  &usbh_state_core);

            if (!hcd_is_device_connected(&usb_core_dev)) {
                return RES_ERROR;
            }
        }
        while((USBH_MSC_BUSY == status));
    }
    if (USBH_MSC_OK == status) return RES_OK;
    return RES_ERROR;
}

这里会无线循环。也就是状态一直是BUSY,查看了usbh_msc_read10  和  usbh_msc_handle_botxfer 进去后没有执行什么。
后来网上说可能是有频繁中断造成的。故而在中断中加了下打印,发现一直会进入 USBFS_IRQHandler
/*!
    rief      this function handles USBD interrupt
    param[in]  none
    param[out] none
    etval     none
*/
void  USBFS_IRQHandler (void)
{
    printf(" USBFS_IRQHandler handler");
    usbh_isr (&usb_core_dev);
}



现在想请大神帮我解答几点
1.正常情况会无限进入 USBFS_IRQHandler  么?
2,如果正常情况不会进入。那么哪些事件会引发这个中断呢?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
正点原子
1楼-- · 2019-07-20 11:15
1,USB驱动就是通过中断来实现的,所以初始化正常工作的时候,一定是不停的有进入中断,处理各种事务的。
2,usb的各种事务
JImLu
2楼-- · 2019-07-20 13:07
 精彩回答 2  元偷偷看……

一周热门 更多>