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.

[参考译文] TM4C129XKCZAD:USBHCPIPEWrite()针对不带 DMA 的大写入中断

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/679752/tm4c129xkczad-usbhcdpipewrite-broken-for-large-writes-without-dma

器件型号:TM4C129XKCZAD

我将继续发布这篇文章、因为 TI 不再维护 USB 库或修复其中的错误、 我花了一段时间才知道如何修复错误。   有提示、但没有实际的解决方法。

如果 一次写入64个字节以上、USBHDPipeWrite()将被断开。   根本原因是库代码中存在错误。

这是随附的 TI 代码。

if (bUseDMA == false)
{
//
//如果不使用 DMA,一次只发送64个字节。
//
if (ui32ByteToSend > 64)
{
ui32ByteToSend = 64;
}
其他
{
//
//发送请求的字节数。
//
ui32ByteToSend = ui32RemainingBytes;
}

解决方法:

if (bUseDMA == false)
{
//
//如果不使用 DMA,一次只发送64个字节。
//
if (ui32RemainingBytes > 64)
{
ui32ByteToSend = 64;
}
其他
{
//
//发送请求的字节数。
//
ui32ByteToSend = ui32RemainingBytes;
}

我已经测试了该代码、并确认它可以正常工作。

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

    R Sexton、您好!

    这是一个已知的 TivaWare 错误、已记录下来、并已在论坛上多次出现。 我没有像您最初发布时那样提出这个问题、您没有明确表示您正在传输大于64字节的数据、尽管仔细阅读、现在我确实识别了有关大于32字节的注释。 老实说、我从 Get Go 开始就考虑了这种修复、但重点讨论了"我看到的是、短写入(32字节)永远不会向总线发送数据。 "、并且认为大于64字节的修复并不相关。 很抱歉,当时没有与你进一步讨论这种想法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有这些已知错误的列表? 每次我去一次、都会浪费大量的工程时间。 我有交付成果和时间表。 我不能浪费时间调试其他人的代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    R Sexton、您好!

    我们没有发布这样的列表、TI 通常不会使用我们的任何库来发布列表。 话虽如此、我将了解是否有任何其他与 USB 相关的内容、您可能会从中受益。 尽管除非您更愿意确定优先级、否则我将在明天深入研究您的其他2个未解决的 USB 问题后寻求提供此类信息。