繁体   English   中英

USB CDC设备停顿

[英]USB CDC device stalling

我正在编写一个简单的虚拟串行端口设备来报告较旧的串行端口。 至此,我可以枚举设备并发送/接收字符了。

在从主机到设备的大量传输变化之后,端点似乎放弃并停止传输数据。 在PC端,我收到写入错误,并且从USBlyzer跟踪判断,音乐停止在档位(USBD_STATUS_STALL_PID)上。 但是,我的代码从未在该端点上有意发出STALL条件,并且从未设置过用于生成一个状态的状态标志。

考虑到发出请求和停止之间的时间很短(<300 µs),这似乎是某种形式的无效响应,而不是超时。 在设备端,输出端点已准备就绪,缓冲区中有数据,并且DATA0 / 1正确同步,但此后再也没有发生。

请注意,在我开始发送“大量”数据之前,该设备即使在很长一段时间内也可以正常工作。 据我所知,设备枚举/配置似乎也已成功完成。 哦,在此之后,大容量端点继续正常工作。

作为记录,我使用的是标准Windows usbser.sys驱动程序和XMega128A4U µP。 我还在多台Windows Vista和7台计算机上看到了相同的行为。

有什么想法我做错了什么或者我可能会进行哪些进一步的测试来缩小范围?

USBlyzer日志USB CDC堆栈测试项目

从记录来看,这最终成为一个振荡器问题。 (显然,即使选择了1,000 Hz USB帧,FLL的参考始终为1,024 Hz。轻微的时钟错误意味着,如果一个数据包连续包含太多1位,则该数据包有时会被拒绝。)

我想这个故事的寓意是在假设您对高级协议有问题之前,先检查一下基础知识。 同样回想起来,硬件USB分析仪本来是值得的投资,但是当出现问题时,软件替代品似乎大多会吐出通用错误代码或根本不吐出任何东西。

终止端点可能会在主机端的输出缓冲区溢出时发生。 您确定设备确实会提取通过端点接收到的数据吗?如果是,则是否至少与数据发送到设备一样快?

请注意,在我开始发送“大量”数据之前,该设备即使在很长一段时间内也可以正常工作。

这似乎暗示了输出缓冲区的溢出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM