首页 文章

传输大小超过最大数据包大小时,WinUSB批量传输失败

提问于
浏览
0

我在Windows主机端使用WinUSB与我的WINUSB USB设备进行通信 . 我的USB设备是全速设备 . 我能够获得设备句柄并执行OUT和IN数据传输 .

我面临着FS WinUSB设备上的Bulk IN传输问题 . 当我从PC到设备和PC返回数据时,从1到64的大小正常工作 . 当我传输65个字节时,前64个字节能够在PC中读回 . 但最后一个字节丢失了 .

任何人都可以面对同样的问题或建议一些解决方案吗?

此致,Nisheedh

1 回答

  • 0

    首先你应该读出MAXIMUM_TRANSFER_SIZE . 发送时,WinUSB "divides the buffer into appropriately sized chunks, if necessary"(source) .

    另请查看WinUsb_ReadPipe的评论:

    如果设备返回的数据大于最大传输长度,WinUSB会将请求分成较小的最大传输长度请求,并按顺序提交 . 如果传输长度不是 endpoints 的最大数据包大小的倍数(可通过WINUSB_PIPE_INFORMATION结构的MaximumPacketSize成员检索),则WinUSB会将传输的大小增加到MaximumPacketSize的下一个倍数 . USB数据包大小不会影响读取请求的传输 . 如果设备使用对于客户端缓冲区而言过大的数据包进行响应,则读取请求的行为对应于管道上设置的策略类型 . 如果管道的策略类型为ALLOW_PARTIAL_READS,则WinUSB会将剩余数据添加到下一次传输的开头 . 如果未设置ALLOW_PARTIAL_READS,则读取请求失败 . 有关策略类型的详细信息,请参阅管道策略修改的WinUSB函数 .

    检查您的设置以及是否通过第二次传输发送最后一个字节 . 您还应该测试实际写入/读取的字节数 .

相关问题