主题中讨论的其他器件: TMS320F28375D、 MSP430F5529
大家好、我正在寻找有关如何调试 USB 大容量数据包问题的指导。
设置:
我有一个 TMS320F28375D 处理器用作 USB 主机、还有一个 MSP430F5528用作 USB 器件。 它们位于单独的定制板上、具有其他功能。 它们的 USB 信号直接相互连接、并且只相互连接、并且正在进行全速 USB 通信。 它们之间的电缆是一个用于 D+/D-的简单双绞线、而 TMS320板与 MSP430板之间提供了电源和接地。 由于提供3.3V 电压、我们不使用5V VBUS、从 USB 的角度来看、MSP430是"自供电"的。 我们在示波器和逻辑分析仪上查看了 D+/D-信号、信号看起来稳定且正确。
除了枚举之外、MSP430为所有流量提供了一个批量输入和批量输出端点、枚举通常在端点0上成功发生。 TMS320使用大量修改自键盘主机示例的代码、而 MSP430使用自定义版本的 PHDC 驱动程序。 TMS320能够从 MSP430发送(批量输出)和接收(批量输入)数据;MCU 在两端正确接收数据。
由于这是一个相对较高的数据吞吐量用例、TMS320通常向 MSP430发送一系列最大有效载荷大小的数据包(64字节)。 根据正常 USB 规范、在发送下一个数据包之前、每个数据包都必须被连接。 目前我们看到偶尔会有 NAK,因为 MSP430还没有准备好下一个数据包--这不是我们要解决的问题,因为我们预计 MSP430 MCU 代码的响应速度不够快。
问题:
~10%的时间、MSP430不会确认批量输出数据包。 这种缺乏确认的情况可能会发生在任何大小的数据包中(我们到目前为止已经尝试过)。 TMS320 USB 模块最多将重新发送3次数据包、并且在大多数情况下、其中一次重试成功并且传输继续。 我们正在发送足够的数据、最终连续3次重试失败、而 USB 模块"放弃"尝试发送数据包并引发 MCU 错误。
如果 TMS320在每次出现此错误时重新安排同一个数据包、最终会看到一个 ACK 并且程序继续进行。 虽然我们可以"逾越"这个问题、但我们担心 MSP430缺乏确认的严重原因、并且由于所有重发、总体带宽会降低。
我们已通过电气方式检查连接并尝试调整滤波、但到目前为止、没有任何改变。 这种行为不仅与我们的定制 MSP430板一致、而且与 TS430"ZIF 插座"开发套件和 MSP430F5529 Launchpad 开发套件一致。
问题:
在 MSP430方面、我看不到一种方法来告诉您为什么单个数据包没有被应答。 用户指南显示"如果在接收到数据包时发生 CRC 或位填充错误、则不会向主机返回任何握手。" CRC 在重新传输之间似乎没有变化、我不确定如何在示波器上识别"位填充错误"、但 EOP 转换的时序看起来是相同的。
我是否遗漏了任何东西或应该研究什么? 感谢您的帮助!
