我正在编写一个简单的虚拟串行端口设备来报告一个较旧的串行端口。至此,我能够枚举设备并发送/接收字符。
在从主机到设备的批量传输次数不同之后,端点似乎会放弃并停止传输数据。在PC端,我收到一个写错误,并且从USBlyzer轨迹判断音乐在停顿时停止(USBD_STATUS_STALL_PID)。但是,我的代码从未故意在该端点上发出停滞条件,也从未设置过已生成停滞条件的状态标志。
鉴于发出请求和停止之间经过的时间很短(<300µs),它看起来像是某种无效响应,而不是超时。在设备端,输出端点已经准备就绪,数据在缓冲区中,并且进行了适当的DATA0/1同步,但是再也不会发生任何事情。
请注意,在我开始发送“大量”数据之前,即使在很长一段时间内,设备看起来也工作得很好。据我所知,设备枚举/配置似乎也成功完成。哦,在此之后,批量输入端点仍然可以很好地工作。
顺便说一句,我使用的是标准的Windows usbser.sys驱动程序和XMega128A4UµP。我还发现多台Windows Vista和7机器上也有相同的行为。
你知道我做错了什么吗,或者我可能会运行哪些进一步的测试来缩小范围?
发布于 2012-11-25 06:31:56
对于记录,这最终被证明是一个振荡器问题。(显然,即使选择了1,000 Hz USB帧,FLL的参考频率也始终为1,024 Hz。轻微的时钟错误意味着,如果一个包碰巧在一行中包含了太多的1位,那么它偶尔会被拒绝。)
我想这个故事的寓意是,在假设你有更高级别的协议问题之前,先检查一下基础知识。此外,回想起来,硬件USB分析器将是一项值得的投资,当出现问题时,软件替代品似乎大多会发出通用错误代码或什么都不会。
发布于 2012-11-13 04:49:03
在主机端上的输出缓冲区溢出时,可能会发生停止外端点的情况。您确定设备确实会获取通过端点外接收的数据吗?如果是,它是否至少与数据发送到设备的速度一样快地获取数据?
请注意,在我开始发送“大量”数据之前,即使在很长一段时间内,设备似乎也工作得很好。
这似乎是输出缓冲区溢出的一个提示。
https://stackoverflow.com/questions/13342847
复制相似问题