RS232与USB CDC的服务质量/消息是否应包含校验和?


13

对于在我的USB-CDC设备和USB主机之间发送的数据,USB是否具有服务质量保证?

我知道在嘈杂的情况下(例如汽车诊断端口)使用传统的RS232时,经常发生不良位,以至于校验和对协议很重要。如果我要使这样的协议适合纯USB应用程序,我可以安全地省略校验和和相关的错误处理例程吗?

作为参考,我将AT91SAM7S256与Atmel提供的USB-CDC框架一起使用。

更新:

我在这个问题上使用了Google-Fu更长的时间,发现这篇文章描述了以太网仿真的CDC子​​类并指出:

通过USB电缆,封装的以太网帧从目标MAC地址开始,一直到帧校验和之前结束。(由于USB是可靠的传输方式,因此不需要帧校验和。)

它们可能意味着USB-CDC是可靠的传输,而不是一般的USB,因为如果程序无法足够快地轮询数据,则某些用于高吞吐量突发数据的设备类(网络摄像头?)可能不希望填充缓冲区。

我仍然希望对此进一步确认。

Answers:


12

这取决于您的设备使用哪种端点类型

简要总结一下USB的摘要:

中断传输

  • 保证的延迟
  • 流管-单向
  • 错误检测和下一次重试。

同步传输

  • 同步传输可确保对USB带宽的访问。
  • 有限的延迟。
  • 流管-单向
  • 通过CRC进行错误检测,但不重试或保证交付。
  • 仅全速和高速模式。
  • 没有数据切换。

批量转移

  • 用于传输大量突发数据。
  • 通过CRC进行错误检测,并保证交付。
  • 无法保证带宽或最小延迟。
  • 流管-仅单向全速和高速模式。

为了正确回答您的问题,您将需要找出在下面使用哪些传输模式来实现CDC设备。CDC设备类规范可能是一个起点。如果您拥有设备的源代码,那将更好。我不熟悉CDC类,因此无法评论它的实现标准,但是乍一看一些文档和Google,似乎实现起来有些灵活性。

编辑

阅读您链接的Atmel文档后,似乎由您决定!

抽象控制模型需要两个接口,一个通信类接口和一个数据类接口。它们每个必须具有两个关联的端点。前者应具有一个专用于设备管理的端点(默认的控制端点0)和一个用于事件通知的端点(附加的中断IN端点)。

数据类接口需要两个端点,通过它们可以在主机之间传送数据。根据应用程序的不同,这些端点可以是批量的或同步的。在USB到串行转换器的情况下,使用Bulk端点可能更合适,因为传输的可靠性很重要,数据传输的时间也不是关键。

因此,在实现中,请确保在数据类接口上使用批量传输,以确保可靠的传输。


好答案。端点类型的摘要非常有用。链接的pdf中描述的CDC串行项目的Atmel代码已设置为充当USB到串行适配器的接口,因此已经将其配置为使用批量端点。优秀!
Steven T. Snyder

3

USB可能是一个相对可靠的协议,但是并非所有使用CDC的设备和驱动程序都是可靠的。我见过几个不同的设备,它们有一个很烦人的习惯,那就是跳过PC发送的字节数据。观察示波器上的数据表明问题不在于接收设备被溢出-只是丢失了一些字节的数据(我能够捕获示波器上的整个数据包;标头和页脚都存在,但是有些它们之间的字节数丢失)。我不确定导致该行为的确切原因是什么,但是尝试过快地发送数据似乎是一个促成因素。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.