diff --git a/components/drivers/usb/usbdevice/class/mstorage.c b/components/drivers/usb/usbdevice/class/mstorage.c index eeff755e2e244db88f97724e7bf7e0939ed05086..d4caf44166699ca777e677076d053ab5300c3926 100644 --- a/components/drivers/usb/usbdevice/class/mstorage.c +++ b/components/drivers/usb/usbdevice/class/mstorage.c @@ -954,7 +954,6 @@ static rt_err_t _function_enable(ufunction_t func) { struct mstorage *data; RT_ASSERT(func != RT_NULL); - RT_DEBUG_LOG(RT_DEBUG_USB, ("Mass storage function enabled\n")); data = (struct mstorage*)func->user_data; @@ -1027,7 +1026,12 @@ static rt_err_t _function_disable(ufunction_t func) rt_free(data->ep_out->buffer); data->ep_out->buffer = RT_NULL; } - + if(data->disk != RT_NULL) + { + rt_device_close(data->disk); + data->disk = RT_NULL; + } + data->status = STAT_CBW; return RT_EOK; diff --git a/components/drivers/usb/usbdevice/core/core.c b/components/drivers/usb/usbdevice/core/core.c index 15ab31e9f739b5ddbcadff22325c8f9ee5cf0c18..1b7f03b00699d6e4ce11a891494664e2d1f1ab8a 100644 --- a/components/drivers/usb/usbdevice/core/core.c +++ b/components/drivers/usb/usbdevice/core/core.c @@ -2144,8 +2144,9 @@ static void rt_usbd_thread_entry(void* parameter) break; case USB_MSG_RESET: RT_DEBUG_LOG(RT_DEBUG_USB, ("reset %d\n", device->state)); - if (device->state == USB_STATE_ADDRESS) + if (device->state == USB_STATE_ADDRESS || device->state == USB_STATE_CONFIGURED) _stop_notify(device); + device->state = USB_STATE_NOTATTACHED; break; case USB_MSG_PLUG_IN: device->state = USB_STATE_ATTACHED;