客户尝试实施 USB HID 并在 USB HID 帧上传输数据。 数据包长度是可变的、 实现可以随时发送或接收数据(当然在 USB HID 限制范围内)。 数据包还包括一个序列号、允许主机和/或设备注意数据包是否被丢弃。 使用 TM4C1233E6PM、他们 使用 TivaWare USB 库来处理 USB 层。 他们注意到、在两个方向上传输了大量数据、我们偶尔会收到重复的数据包。 使用调试器进行故障排除后 、他们注意到以下情况:
‘使用 USB 分析仪,我们注意到会出现随机的“分类错误”故障。 USB 分析仪将‘Classification Error’(分类错误)定义为‘An error occurred during class-level analysing’(分类级别解析期间发生错误) 此消息将始终具有0字节有效载荷
-
此‘分类错误’数据包将始终在有输入报告和输出报告的帧之后出现1-2帧。
-
在‘时,他们注意到,在‘分类错误’数据包之后,调用时返回‘0’的 USBDHIDReportWrite’函数(根据函数标头,这意味着失败)。
-
‘返回‘0’的 USBDHIDReportWrite’(USBDHIDReportWrite)函数(根据函数标头,这意味着失败) 时,将看到重复的数据包被发送到主机
-
设置代码时,如果‘USBDHIDReportWrite’返回‘0’, 它们就不会将缓冲区前移至下一个 USB HID 数据包,因为 它们将故障解释为需要 再次将其重新加载到 USB HID 驱动程序中。
-
‘观察结果,他们决定修改代码,使缓冲区前进,而不管从“USBDHIDReportWrite”函数返回的值如何
-
‘调试器运行一个快速测试,他们能够在‘USBDHIDReportWrite’返回‘0’的情况下进行捕获,并注意到没有重复的数据包(classification error’failure was still present)
-
根据这些结果、他们决定隔夜运行测试以查看性能
-
在该软件配置中 ,他们验证了发送和/或接收的大约500万条消息包含正确的序列号,因此不会被分析为丢失和/或重复
-
他们 认为 他们找到了重复消息的权变措施、但根据函数头、 他们 不能确认他们 以正确的方式使用库。 他们认为‘分类错误’数据包是可以接受的,因为它将被丢弃,但 不会将其视为‘预期的’。
‘担心的是,如果他们做了不正确的操作,导致“USBDHIDReportWrite”函数报告失败,但仍会发出消息。