This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5529:USB (HID)传输错误、但低级 CRC 成功

Guru**** 2563960 points
Other Parts Discussed in Thread: MSP430F5529

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/605628/msp430f5529-usb-hid-transmission-errors-but-low-level-crc-succeeds

器件型号:MSP430F5529

我有一些项目与 MSP430F5529和 USB 一起运行。 第一个模块于2012年启动、使用当时的 TI-USB 框架。 较新的项目是使用较新版本的 TI-USB 框架创建的。 由于我们不希望客户安装其他驱动程序、因此我们使所有驱动程序都成为 HID。

到目前为止一切都进展顺利。 但在极少数情况下、USB 通信似乎存在一些问题。 MSP 似乎会在一段时间内向 PC 发送损坏的数据。 我 尝试 找到原因、 并插入 了一个常数字节模式、MSP 应将该模式发送到 PC。 查看结果、似乎有些位被移位。 第一个字节正确。 当我通过 API 代码(hidSendDataInBackground 或最近的 usbhid_sendData)跟踪字节的路径时、我找不到任何可能出错的地方。 由于 不同的框架版本会发生这种情况、我怀疑这是一个代码问题。 由于即使布局较差也可以进行高速数据传输(请 参阅 https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/346138/1215821 或 http://forum.43oh.com/topic/2775-msp430-usb-benchmark/)、因此我认为这也不是布局问题。

EMI 肯定会导致传输错误、但任何 USB 传输中都包含的低电平 CRC 涵盖了这一点。 CRC 成功、因此传输的数据被认为是正确的。 但是、正如我提到过的、PC 接收到的数据已损坏。

我为最近的项目做了权变措施。 我在软件(MSP 和 PC)两端执行了另一个 CRC、该校验有效、不再存在"损坏"的传输。 如果存在任何"移位"位、则软件 CRC 会失败。 但这对我来说似乎有点过分、因为 USB 通信中已经有一个 CRC、通常应该可以防止传输错误。 此外、我将丢失2个字节的传输容量、因为我需要这些字节用于校验和。 但最糟糕的是、我无法再依赖 API 自动拆分超过64字节的数据包。 相反、我必须在代码中执行一些操作(MSP 和 PC)、以拆分较大的数据包并将它们重新拼接在一起。 这似乎也是一个不必要的开销。

您的任何人之前是否曾遇到过这种情况? 是否有人遇到过这种问题? 我浏览过这些论坛、并进行了大量的 Google 研究、但我找不到任何有关原因的提示。 此外、虽然这种情况很少发生并且很难重现、但这对于数据记录应用至关重要;如果没有进一步的合理性检查(应始终执行该检查、但需要更详细地了解以捕获这些错误)、单个损坏的测量可能会破坏整个计算。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这听起来类似于勘误表 USB12。 (如果错误是在 USB 模块构造数据包时出现的、则会对错误的数据计算 USB CRC。)

    移位了多少位? 在数据包中的哪个位置?