完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
【现象】
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_ACtiVE //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哪里还需要设置吗? |
|
相关推荐
1个回答
|
|
p; HCD_CHECK_FROM_CRIT(hcd_urb_enqueue, pipe->device != NULL); // The pipe must be associated with a device
【原因】经过分析,这个问题可能是由于USB控制器或驱动程序在处理64字节倍数的数据时出现了问题。这可能是由于硬件设计或固件实现的问题。 【解决方案】以下是一些建议来解决这个问题: 1. **检查USB设备和控制器的规格**:确保您的USB设备和控制器支持批量传输,并且遵循USB规范。 2. **更新固件和驱动程序**:检查是否有适用于您的USB控制器或设备的固件或驱动程序更新。这些更新可能包含修复此类问题的错误。 3. **调整数据包大小**:尝试将数据包大小调整为非64字节倍数,以查看是否解决了问题。这可以通过修改应用程序或驱动程序中的传输参数来实现。 4. **使用其他传输类型**:如果可能,尝试使用其他类型的传输(如控制传输或等时传输),以查看是否解决了问题。 5. **调试和日志记录**:增加调试信息和日志记录,以便更好地了解问题发生的原因。这可以帮助您确定问题是否与特定的数据包大小或传输类型有关。 |
|
|
|
只有小组成员才能发言,加入小组>>
1108 浏览 1 评论
574浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
460浏览 5评论
461浏览 4评论
435浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 13:03 , Processed in 0.666087 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号