- add control_pipe_status for usbh_device_info_t to reflect the status transfer of control pipe
- fix bug with hcd_port_reset + remove regs->portsc_bit.port_enable in the wait loop as device unplugged can cause this to always fails - correct the timeout for hcd_controll_stop/reset 16 uframes ~ 2 ms - potentially fix bugs device unplugged when new address is not assigned
This commit is contained in:
@@ -135,7 +135,8 @@ void hcd_port_reset(uint8_t hostid)
|
||||
|
||||
#ifndef _TEST_
|
||||
// NXP specific, port reset will automatically be 0 when reset sequence complete
|
||||
while( regs->portsc_bit.port_reset || !regs->portsc_bit.port_enable){} // FIXME trapped here once
|
||||
// there is chance device is unplugged while reset sequence is not complete
|
||||
while( regs->portsc_bit.port_reset /*&& regs->portsc_bit.current_connect_status*/ ) {}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -385,7 +386,7 @@ static tusb_error_t hcd_controller_stop(uint8_t hostid)
|
||||
|
||||
regs->usb_cmd_bit.run_stop = 0;
|
||||
|
||||
timeout_set(&timeout, 16); // USB Spec: controller has to stop within 16 uframe
|
||||
timeout_set(&timeout, 2); // USB Spec: controller has to stop within 16 uframe = 2 frames
|
||||
while( regs->usb_sts_bit.hc_halted == 0 && !timeout_expired(&timeout)) {}
|
||||
|
||||
return timeout_expired(&timeout) ? TUSB_ERROR_OSAL_TIMEOUT : TUSB_ERROR_NONE;
|
||||
@@ -404,7 +405,7 @@ tusb_error_t hcd_controller_reset(uint8_t hostid)
|
||||
|
||||
regs->usb_cmd_bit.reset = 1;
|
||||
|
||||
timeout_set(&timeout, 16); // should not take longer the time to stop controller
|
||||
timeout_set(&timeout, 2); // should not take longer the time to stop controller
|
||||
while( regs->usb_cmd_bit.reset && !timeout_expired(&timeout)) {}
|
||||
|
||||
return timeout_expired(&timeout) ? TUSB_ERROR_OSAL_TIMEOUT : TUSB_ERROR_NONE;
|
||||
|
||||
Reference in New Issue
Block a user