From cfcef0558a5b8ab797408f998074fa0ba6703ece Mon Sep 17 00:00:00 2001 From: hathach Date: Thu, 19 Dec 2013 12:43:22 +0700 Subject: [PATCH] fix plug & unplug issue by reseting port immediately instead of waiting for usbh enumeration task to do so --- demos/host/src/tusb_config.h | 4 ++-- tinyusb/host/ohci/ohci.c | 1 + tinyusb/host/usbh.c | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/demos/host/src/tusb_config.h b/demos/host/src/tusb_config.h index 3527ddc3..d5ba0b6d 100644 --- a/demos/host/src/tusb_config.h +++ b/demos/host/src/tusb_config.h @@ -60,14 +60,14 @@ //--------------------------------------------------------------------+ // HOST CONFIGURATION //--------------------------------------------------------------------+ -#define TUSB_CFG_HOST_DEVICE_MAX 3 +#define TUSB_CFG_HOST_DEVICE_MAX 1 #define TUSB_CFG_CONFIGURATION_MAX 1 //------------- USBD -------------// #define TUSB_CFG_HOST_ENUM_BUFFER_SIZE 255 //------------- CLASS -------------// -#define TUSB_CFG_HOST_HUB 1 +#define TUSB_CFG_HOST_HUB 0 #define TUSB_CFG_HOST_HID_KEYBOARD 0 #define TUSB_CFG_HOST_HID_MOUSE 1 #define TUSB_CFG_HOST_HID_GENERIC 0 diff --git a/tinyusb/host/ohci/ohci.c b/tinyusb/host/ohci/ohci.c index b108dfe1..68954f83 100644 --- a/tinyusb/host/ohci/ohci.c +++ b/tinyusb/host/ohci/ohci.c @@ -666,6 +666,7 @@ void hcd_isr(uint8_t hostid) { if ( OHCI_REG->rhport_status_bit[0].current_connect_status ) { + OHCI_REG->rhport_status[0] = OHCI_RHPORT_PORT_RESET_STATUS_MASK; usbh_hcd_rhport_plugged_isr(0); }else { diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c index e701d260..7b358e2f 100644 --- a/tinyusb/host/usbh.c +++ b/tinyusb/host/usbh.c @@ -374,9 +374,9 @@ tusb_error_t enumeration_body_subtask(void) { // connected/disconnected directly with roothub if( hcd_port_connect_status(usbh_devices[0].core_id) ) { // connection event - osal_task_delay(200); // wait for device is stable - hcd_port_reset( usbh_devices[0].core_id ); // port must be reset to have correct speed operation - osal_task_delay(50); // TODO reset is recommended to last 50 ms (NXP EHCI passes this) + osal_task_delay(200); // wait for port reset is complete & device is stable +// hcd_port_reset( usbh_devices[0].core_id ); // port must be reset to have correct speed operation +// osal_task_delay(50); // TODO reset is recommended to last 50 ms (NXP EHCI passes this) usbh_devices[0].speed = hcd_port_speed_get( usbh_devices[0].core_id ); } else