这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请问NUC505USBHost如何判断U盘是否已经拔出?

共2条 1/1 1 跳转至

请问NUC505USBHost如何判断U盘是否已经拔出?

工程师
2024-10-07 17:36:35     打赏

使用NUC505 的U盘例子,可以识别U盘并读出扇区等,但不知道如何判断U盘已经拔出?
我做了下列尝试:

1. 使用下列断点办法判断USB设备拔出,但是没有效果:
   该断点却可以感应到USB设备插入
    for (;;)
    {
        if (USBH_ProcessHubEvents())
        {
            put_rc(f_mount( FatFs[0], "", 0));  //设置断点
        }
    }   

2. 观察NUC505的相关寄存器来判断USB设备拔出,也无效果
  寄存器:Host Controller Root Hub Port Status
  此寄存器有一个 CSC 标志位 Connect Status Change

3. ****USBH的中断,无效果
  在此设置断点 void USBH_IRQHandler(void)




关键词: NUC505     USB    

助工
2024-10-07 17:36:54     打赏
2楼

判断U盘是否已拔出的方法可以通过监测USB设备的连接状态来实现。在NUC505 USB Host中,可以使用USBH_HUB_GetDeviceStatus函数来获取USB设备的连接状态。该函数返回值为USBH_HUB_PORT_STATE枚举类型,其中有一个标志位USBH_HUB_PORT_CONNECT表示设备是否连接。

以下是一个示例代码段,用于判断U盘是否已拔出:

```c
for (;;) {
    if (USBH_ProcessHubEvents()) {
        USBH_HUB_PORT_STATE portState = USBH_HUB_GetDeviceStatus(USB_HOST_PORT_NUM);
      
        if (!(portState & USBH_HUB_PORT_CONNECT)) {
            // U盘已拔出
            break;
        }
      
        // U盘仍然连接着
        // 执行需要的操作
    }
}
```

注意:上述示例代码中的USB_HOST_PORT_NUM需要替换为实际使用的USB端口号,通常为0或1,具体取决于NUC505的硬件设计。

通过轮询USB设备的连接状态,可以判断出U盘是否已拔出。当USBH_HUB_GetDeviceStatus函数返回的状态中不包含USBH_HUB_PORT_CONNECT标志位时,即表示U盘已拔出。此时可以中断循环,并执行对应的处理逻辑。 


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]