Embedded USB CDC设备暂停

Embedded USB CDC设备暂停,embedded,usb,avr,cdc,Embedded,Usb,Avr,Cdc,我正在编写一个简单的虚拟串行端口设备来报告旧的串行端口。至此,我能够枚举设备和发送/接收字符 从主机到设备的批量输出传输次数发生变化后,端点似乎放弃并停止传输数据。在PC端,我收到一个写错误,从USBlyzer跟踪判断音乐停止在一个暂停(USBD_STATUS_stall_PID)。但是,我的代码从未有意在该端点上发出暂停条件,并且从未设置生成暂停条件的状态标志 由于经过的时间较短(),主机端的输出缓冲区溢出时可能会发生暂停out endpoint的情况。您是否确定设备确实提取了通过out en

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

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


由于经过的时间较短(),主机端的输出缓冲区溢出时可能会发生暂停out endpoint的情况。您是否确定设备确实提取了通过out endpoint接收到的数据?如果是这样,它提取数据的速度是否至少与发送到设备的数据一样快

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


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

对于记录,这最终证明是振荡器问题。(显然,即使选择了1000 Hz的USB帧,FLL的参考频率也始终为1024 Hz。轻微的时钟错误意味着,如果一个数据包碰巧在一行中包含一个过多的1位,它偶尔会被拒绝。)


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

哦,我认为这是值得的CDC设备有一个基于常规NACK的流量控制机制。知道速率是如何限制的吗?如果USBlyzer日志可信,那么设备最后一次获取数据是在失速前约30毫秒。