您好!
我将 TM4C123FE6PM 与最新版本的 TivaWare 搭配使用、在该设计中、它充当 USB 主机、并与其中包含 FTDI 芯片的器件进行通信。 (板/产品一是 Tiva 作为 USB 主机、而板/产品二是 FTDI USB 器件)。
我有几个问题:
1.当数据包较大(大约900字节)时,我遇到锁定问题。 是否有报告?
2.我似乎也在 460.8k 时体验到这一点。 他人是否经历过这种情况
3.是否有带有 CDC 或 HID 的 DMA 示例?
谢谢、
Dustin
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 与最新版本的 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。 因此、抱歉、我不相信我们有一个符合该确切标准的示例。
Dustin、您好!
您是否会碰巧知道数据包是以64字节或更少的事务传入? 我的意思是、900字节数据包是否通过多个事务发送、每个事务的大小不超过64字节?
您还提到了 DMA、是在 DMA 处于活动状态时发生故障、还是在 DMA 未被使用的情况下发生故障?
我提出这些问题是因为在 USB 主机接收到 USB 高速相关问题之前、我曾遇到过、但我不确定是否曾经在全速情况下发生过、并且正在尝试测量它是否会影响您的情况。
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]; }