我有一些项目与 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 研究、但我找不到任何有关原因的提示。 此外、虽然这种情况很少发生并且很难重现、但这对于数据记录应用至关重要;如果没有进一步的合理性检查(应始终执行该检查、但需要更详细地了解以捕获这些错误)、单个损坏的测量可能会破坏整个计算。