diff --git a/usb/device/targets/TARGET_NORDIC/TARGET_MCU_NRF52840/USBPhy_Nordic.cpp b/usb/device/targets/TARGET_NORDIC/TARGET_MCU_NRF52840/USBPhy_Nordic.cpp index 6636e2a635..dcf1c0d6c4 100644 --- a/usb/device/targets/TARGET_NORDIC/TARGET_MCU_NRF52840/USBPhy_Nordic.cpp +++ b/usb/device/targets/TARGET_NORDIC/TARGET_MCU_NRF52840/USBPhy_Nordic.cpp @@ -308,12 +308,20 @@ void USBPhyHw::process() { // Process USB power-related events switch (usb_power_event) { case NRF_DRV_POWER_USB_EVT_DETECTED: + if(!nrf_drv_usbd_is_enabled()) + nrf_drv_usbd_enable(); events->power(true); break; case NRF_DRV_POWER_USB_EVT_REMOVED: events->power(false); + if(nrf_drv_usbd_is_started()) + nrf_drv_usbd_stop(); + if(nrf_drv_usbd_is_enabled()) + nrf_drv_usbd_disable(); break; case NRF_DRV_POWER_USB_EVT_READY: + if(!nrf_drv_usbd_is_started() && connect_enabled) + nrf_drv_usbd_start(true); break; default: ASSERT(false)