【现象】
MASTER版本USB HOST批量传输时如数据长度正好是64的倍数导致HCD_PIPE_EVENT_ERROR_XFER错误,并且导致之后所有调用hcd_urb_enqueue失败,跟踪到函数hcd_urb_enqueue中,失败原因为下述判断前两个子条件失败
HCD_CHECK_FROM_CRIT(pipe->port->state == HCD_PORT_STATE_ENABLED // The pipe's port must be in the correct state
&& pipe->state == HCD_PIPE_STATE_AC
tiVE //The pipe must be in the correct state
&& !pipe->cs_flags.pipe_cmd_processing //Pipe cannot currently be processing a pipe command
&& !pipe->cs_flags.reset_lock, //Pipe cannot be persisting through a port reset
ESP_ERR_INVALID_STATE);
同样的代码,只要发送长度不是64倍数的Bulk传输均能成功。
【代码】
申请URB时,针对长度正好是64倍数的Bulk传输已经设置如下标志
// Bulk Out对于正好MPS长度倍数的传输需要添加一个0长度包
if ((len % USB_EP_BULK_MAX_MPS) == 0) // USB_EP_BULK_MAX_MPS为64
transfer_dummy->flags |= USB_TRANSFER_FLAG_ZERO_PACK;
请问是URB哪里还需要设置吗?
@ESP_ICY
0