gpt4 book ai didi

embedded - USB CDC 设备停止

转载 作者:行者123 更新时间:2023-12-02 22:23:27 28 4
gpt4 key购买 nike

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

在从主机到设备的不同数量的批量传输之后,端点似乎放弃并停止传输数据。在 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

最佳答案

郑重声明,这最终证明是振荡器问题。 (显然,即使选择了 1,000 Hz 的 USB 帧,FLL 的引用频率也始终为 1,024 Hz。轻微的时钟错误意味着如果数据包碰巧在一行中包含太多 1 位,它偶尔会被拒绝。)

我想这个故事的寓意是在假设您遇到更高级别协议(protocol)的问题之前检查基础知识。回想起来,硬件 USB 分析器也是一项值得的投资,软件替代品似乎大多会吐出一个通用错误代码,或者在出现问题时什么也不会吐出。

关于embedded - USB CDC 设备停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13342847/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com