USB CDC设备停止运行

时间:2012-11-12 11:25:14

标签: embedded usb avr cdc

我正在编写一个简单的虚拟串行端口设备来报告旧的串行端口。到此为止,我能够枚举设备并发送/接收字符。

在从主机到设备的不同数量的批量传输传输之后,端点似乎放弃并停止传输数据。在PC端,我收到写入错误,并且从USBlyzer跟踪判断音乐在停止时停止(USBD_STATUS_STALL_PID)。但是,我的代码从不故意在该端点上发出STALL条件,并且生成的状态标志永远不会被设置。

鉴于在发出请求和STALL之间经过了很短的时间(<300μs),它似乎是某种无效的响应,而不是超时。在设备端,输出端点准备就绪,缓冲区中的数据和正确的DATA0 / 1同步,但没有任何进一步发生。

请注意,在我开始发送“大量”数据之前,设备即使长时间也能正常工作。尽管我可以告诉设备枚举/配置也似乎成功完成。哦,在此之后,批量输入端点继续正常工作。

对于记录我使用的是标准Windows usbser.sys驱动程序和XMega128A4UμP。我也在多台Windows Vista和7台机器上看到了相同的行为。

我有什么想法,或者我可能会采取哪些进一步的测试来缩小范围?

USBlyzer logUSB CDC stacktest project

2 个答案:

答案 0 :(得分:3)

为了记录这最终证明是一个振荡器问题。 (显然,即使选择1,000 Hz的USB帧,FLL的参考值也始终为1,024 Hz。轻微的时钟误差意味着如果一个数据包偶然包含一个1位过多的数据,偶尔会被拒绝。)

我想这个故事的寓意是在假设您遇到更高级协议的问题之前检查基础知识。此外,回想起硬件USB分析仪本来是一项值得投资的事情,软件替代品似乎主要是吐出一般的错误代码,或者在出现问题时什么都没有。

答案 1 :(得分:2)

在主机端的输出缓冲区溢出时,可能会发生外部端点的停顿。您确定该设备是否通过外部端点获取它接收的数据 - 如果是这样,它至少以数据发送到设备的速度获取数据?

  

请注意,即使长时间使用,设备也能正常工作   直到我开始发送“大量”数据的时间。

这似乎是输出缓冲区溢出的提示。