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.

[参考译文] TM4C123FE6PM:USB 主机 TivaWare TM4C123FE6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/683126/tm4c123fe6pm-usb-host-tivaware-tm4c123fe6pm

器件型号:TM4C123FE6PM

您好!

我将 TM4C123FE6PM 与最新版本的 TivaWare 搭配使用、在该设计中、它充当 USB 主机、并与其中包含 FTDI 芯片的器件进行通信。  (板/产品一是 Tiva 作为 USB 主机、而板/产品二是 FTDI USB 器件)。

我有几个问题:

1.当数据包较大(大约900字节)时,我遇到锁定问题。  是否有报告?

2.我似乎也在 460.8k 时体验到这一点。  他人是否经历过这种情况

3.是否有带有 CDC 或 HID 的 DMA 示例?

谢谢、

Dustin

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

    Dustin、您好!

    是的、已经报告过这一点、并且也有一个解决方案: https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/679752/2503431

    我知道的唯一具有 DMA 的主机示例来自 DK 电路板、使用 MSC、而不是 CDC 或 HID。 有 HID 示例、但我认为其中没有任何示例使用 DMA。 因此、抱歉、我不相信我们有一个符合该确切标准的示例。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    拉尔夫
    感谢您的回复。 在搜索论坛时、我确实看到列出了此问题、但这与我的问题不完全相同。
    我应该已经指定了、它位于主机的接收端、而不是提供的链路的发送端。 发生的情况是、主机从器件请求数据、发送一个小请求数据包、器件进行响应、如果该数据很小、例如环形缓冲器上的一个或两个环(62或可能124字节)、则460.8k 时没有问题、但数据更大(例如900字节) 导致它锁定、我无法恢复它。 此故障发生后、不会立即接收到任何数据。
    Dustin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dustin、您好!

    您使用的是全速还是高速 USB?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph、
    它配置为全速。

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

    Dustin、您好!

    您是否会碰巧知道数据包是以64字节或更少的事务传入? 我的意思是、900字节数据包是否通过多个事务发送、每个事务的大小不超过64字节?

    您还提到了 DMA、是在 DMA 处于活动状态时发生故障、还是在 DMA 未被使用的情况下发生故障?

    我提出这些问题是因为在 USB 主机接收到 USB 高速相关问题之前、我曾遇到过、但我不确定是否曾经在全速情况下发生过、并且正在尝试测量它是否会影响您的情况。

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

    您好、Ralph、

    输入的数据由 FTDI 芯片以由传入 UART 波特率决定的频率发出。  我不控制时序或发送的字节。  

    关于 DMA、这没有 DMA、这就是为什么我要寻找一个更接近我们的应用的示例、例如 CDC 或 HID。

    谢谢、
    Dustin  

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

    Dustin、您好!

    我看到、如果这仍然适用、这不是积极的、但我认为这是值得研究的。 如果 TM4C 是主机、它应该规定它可以接收的最大数据包大小、因此我认为不应该发生这种情况、除非它被配置为一次处理64个以上的字节...

    不管怎样、这个问题出现在一些需要交换大于64字节的数据包的高速标准中、而 TivaWare API 中的一个编码使得这个问题成为不可能、因为它将数据包限制在最大64字节

    在 USBHCPDPipeRead 函数中、从 Web 下载的 TivaWare API 具有以下内容:

    if (bUseDMA == false)
    {
    //
    //在端点上禁用 uDMA
    //
    MAP_USBEndpointDMADisable (USB0_BASE、ui32Endpoint、USB_EP_HOST_IN);
    
    //
    //为下一个事务设置。
    //
    G_sUSBHCD.psUSBINPipes[ui32PipeIdx].pui8ReadPtr = pui8Data;
    G_sUSBHCD.psUSBINPipes[ui32PipeIdx].ui32ReadSize =
    (ui32RemainingBytes <64)? ui32 RemainingBytes:64;
    } 

    解决方法是使用以下方法:

    //
    //如果无法使用 DMA,则准备好在没有 DMA 的情况下进行传输。
    //
    if (bUseDMA == false)
    {
    //
    //在端点上禁用 uDMA
    //
    MAP_USBEndpointDMADisable (USB0_BASE、ui32Endpoint、USB_EP_HOST_IN);
    
    //
    //为下一个事务设置。
    //
    G_sUSBHCD.psUSBINPipes[ui32PipeIdx].pui8ReadPtr = pui8Data;
    G_sUSBHCD.psUSBINPipes[ui32PipeIdx].ui32ReadSize =
    (ui32RemainingBytes < g_sUSBHCD.psDMAInstance->pui32MaxPacketSize[ui32PipeIdx])? ui32RemainingBytes:g_sUSBHCD.psDMAInstance->pui32MaxPacketSize[ui32PipeIdx];
    }