我正在写一个简单的虚拟串行端口设备来报告一个较旧的串行端口。通过这一点,我可以枚举设备并发送/接收字符。USB CDC设备失速
经过从主机到设备的大量数据传输后,终端似乎放弃并停止传输数据。在PC端,我收到一个写入错误,并根据USBlyzer曲线判断音乐停在一个档位(USBD_STATUS_STALL_PID)。然而,我的代码永远不会故意在该端点上发出STALL条件,而生成的状态标志永远不会被设置。
由于在发出请求和STALL之间经过的时间很短(< 300μs),它似乎是某种无效响应,而不是超时。在设备端,输出端点已准备就绪,缓冲区中的数据和正确的DATA0/1同步,但没有任何进一步发生。
请注意,设备即使长时间工作也能正常工作,直到我开始发送“大量”数据为止。就在我可以告诉设备枚举/配置也似乎完成成功。哦,并且在此之后,大容量端点继续正常工作。
为了记录我正在使用标准的Windows usbser.sys驱动程序和一个XMega128A4UμP。我也在多台Windows Vista和7台机器上看到相同的行为。
任何想法我做错了什么或进一步的测试我可能会运行缩小的东西?
USBlyzer log, USB CDC stack, test project
哦,我虽然有一个基于常规NACK的CDC设备流量控制机制。任何想法如何限制速度呢?如果USBlyzer日志被认为是可信的,那么设备在失速前大约30ms获取数据。 – doynax