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:MSP430F5529 USB、在端点发送前、长时间延迟。

Guru**** 2550050 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/590287/msp430f5529-msp430f5529-usb-long-delays-until-endpoint-transmit

器件型号:MSP430F5529

您好!

我正在尝试在 MSP430F5529电路板上解决问题。

这种情况是、我们检查输入端点是否为 EMPyy:

//检查 NACK 位
if (((pEndpoint ->bEPBCTX & EPBCNT_NAK)=EPBCNT_NAK)
{
//在成功的 USB 输入//
该端点的传输结束时,NAK 状态位被 UBM 置位,以指示缓冲区中的 EP-n 为空
u8Return=0uu




};否则为0u1u} 

您可以从以下事务中看到、一旦我们先前的数据包被发送、调试信号的下降沿就会指示 IN EP 为空:

主机已应答输入传输。

如果在 EP 中为空、我们加载端点缓冲器、由我们的测试输出的上升沿指示:

但我们发现、USB 设备实际传输下一个数据包需要100ms (确切地为92.42ms)的时间。

EP 中的器件已加载、长度正确且准备就绪。 它位于 USB 控制器中、等待~90 SOF 令牌后再进行传输。

是否有人会猜测 USB 设备传输所需的时间太长?

谢谢

Stomp

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

    只有当主机请求输入数据包时、才会发送输入数据包。

    在此延迟期间、器件是否有任何令牌通过 STALL 或 NAK 握手进行应答?

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

    在经过相当多的调试后、我发现了这个问题。 您让我进入了正确的"当主机要求时"的轨道。

    我只想说、这个硬件/软件配置在几个月前就运行良好、在 Windows 7上运行完美、在 Windows 8上是间歇性的、在 Windows 10上失败。 我在使用 USB 逻辑分析仪时遇到类似的问题、该分析仪作为 i7 Surface Pro 上的唯一设备运行。 因此、在 Windows 更新中可能会发生更改、而不是 MCU 上的任何更改。

    在此处发布以帮助社区。

    我使用的是 WinUSB 驱动程序和.NET 应用程序。 我在一个线程中具有 WinUSB_ReadPipe 函数。 在 IN 端点有数据可用之前、它应该进行阻止、它会将数据返回到应用程序、我需要尽快再次调用它。 从技术上讲、如果您需要全带宽、则需要以1ms 的间隔完成此操作。

    使用总线分析器可以看到、我的端点的 PID 输入令牌有时需要花费大于80ms 的时间才能在总线上重新出现、这意味着我在80个 SOF 令牌之间看不到输入令牌。 尽管我使用高频计时器记录了该线程、但却没有看到这样的时间窗口、实际上我可以从读取管道被调用并正在等待的消息中看出这一点。

    当然、当调用 WinUSB_ReadPipe 从总线读取64字节时也是如此。 将 ReadPipe 更改为读时为1024字节会强制窗口的内部持续无延迟地发出 IN 令牌、汇编多个 IN 事务并返回到整个缓冲区的用户级别。

    我不知道具有较小缓冲区的 Windows 中延迟的确切性质。

    希望这对任何有类似问题的人都有所帮助。

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

    要允许流水线处理多个读取请求、必须在 管道上设置 RAW_IO 策略。

    对于多个活动请求、您可能希望使用重叠的呼叫;请参阅 PIC24和 WinUSB_ReadPipe -罕见的延迟发生 示例。

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

    [引用 user="cingp"]
    当然、当调用 WinUSB_ReadPipe 从总线读取64字节时也是如此。 将 ReadPipe 更改为读时为1024字节会强制窗口的内部持续无延迟地发出 IN 令牌、汇编多个 IN 事务并返回到整个缓冲区的用户级别。

    我不知道具有较小缓冲区的 Windows 中延迟的确切性质。
    [/报价]

    我在 Win XP 上针对 CDC (usbser.sys / winusb.sys)完成了一些基准测试、其中涉及传输大小/速率。

    http://forum.43oh.com/topic/2775-msp430-usb-benchmark/