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:当与 DMA 一起使用时、USBHCPIPEWrite()发送空帧

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/679418/tm4c129xkczad-usbhcdpipewrite-sends-empty-frame-when-used-with-dma

器件型号:TM4C129XKCZAD

我仍在努力使 USB 主机应用程序正常运行。   我正在尝试将大量数据传输到我的全速器件。  

我正在设置一个管道、并以512字节的工作单元对其进行写入。

//用于发送数据的输出管道。
info.ui32BulkOutPipe = USBHCPipeAlloc (0、
USBHCD_PIPLE_BULK_OUT_DMA、psDevice、PipeCallback);

//配置管道以与端点4一起使用。
if (Info.ui32BulkOutPipe!= 0){
int ret = USBHCPDPipeConfig (Info.ui32BulkOutPipe、
64、// uint32_t ui32MaxPayload -在描述符中观察到。
0、// uint32_t ui32Interval
4 // uint32_t ui32TargetEndpoint
);
//确保它正常工作...
if (ret!= 0){
USBHCPepeFree (Info.ui32BulkOutPipe);
Info.ui32BulkOutPipe =-1;
}

我看到的是、在随机传输数之后、控制器会发送一个空帧。  这看起来像是到我的器件的传输结束、然后重置链路。

我知道控制器正在将单个帧放到地板上、因为我使用的是包含数据包编号的示例数据文件:

前6个字节是帧编号(ASCII)。  最后一次成功的传输是帧000165。   帧000166未发送。  下一个要输出的帧是000167。

以下是我目前为止能够演示的内容:

  • 如果没有 DMA、就不会发生此故障。  如果我没有配置管道、我可以进行一次大传输、而不会出现错误。
  • 我可以进行大量64k 的传输、而不会出现错误。
  • 故障与整个逻辑传输(512字节)不一致。
  • USBSpeedGet ()返回 USB_undef_speed

  • 我的器件的 A0版本上有 USB 勘误表。  我在 A2上运行。

这是发生故障后 USB 控制器的寄存器转储。  

端点1配置看起来正确-全速、批量模式(寄存器0x110-0x11F)

4005:0000 00 60 00 00 FF 00 FE 00 FF E1 01 00 00 .`… ~………………
4005:0010 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 06…
4005:0020 01 00 00 D1 00 00 00 2C 00 00 2C 00 00 00 00 00 00 00 00 ........ 一.一.
4005:0030 2C 00 00 2C 00 00 00 00 2C 00 00 00 2C 00 00 00 00 I..I...
4005:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
(笑声)
4005:0060 19 00 00 00 00 00 00 00 00 00 00 00 00 05 0C 00 00…
4005:0070 00 00 00 00 00 00 00 00 77 8A 5C 3C 80 77 72 00… w\<.w.
4005:0080 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
(笑声)

4005:0100 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 06…
4005:0110 40 00 03 80 40 00 00 E8 E0 1F A4 00 A1 00 00 77 @……@…h`…$…………
4005:0120 00 00 00 00 00 00 00 00 E0 1F 00 00 00 00 00 00 00 77… `… W
4005:0130 00 00 00 00 00 00 00 00 E0 1F 00 00 00 00 00 00 00 77… `… W
4005:0140 00 00 00 00 00 00 00 00 E0 1F 00 00 00 00 00 00 00 77… `… W
4005:0150 00 00 00 00 00 00 00 00 E0 1F 00 00 00 00 00 00 00 77… `… W
4005:0160 00 00 00 00 00 00 00 E0 1F 00 00 00 00 00 00 00 77… `… W
4005:0170 00 00 00 00 00 00 00 00 E0 1F 00 00 00 00 00 00 00 AA ........ `… *
4005:0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
(笑声)

4005:0330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4005:0340 00 00 00 74 40 E6 05 00 00 00 00 00 00 00 00 00 00 00 00 00……@f…
4005:0350 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
(笑声)

4005:0410 01 00 00 00 00 00 00 00 00 00 00 00 12 00 00 00
4005:0420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4005:0430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    澄清-传输更多64k 或数据将触发故障。 我还看到了无故障传输。 我从未尝试过超过256K 的产品。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    更多数据点:

    USBHCPDPipeWrite()发生故障并检测到 ePipeError。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    R Sexton、您好!

    我一直(现在仍在)出差、因此我很难将您的各种线程组合在一起。 您最近在前一晚发表的突破性文章是否解决了此问题? 相关帖子: e2e.ti.com/.../679752