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.

[参考译文] CCS/CCStudio:使用 CDC 的 USB CPPI DMA

Guru**** 2609955 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/652588/ccs-ccstudio-usb-cppi-dma-using-cdc

器件型号:CCStudio

工具/软件:Code Composer Studio

你(们)好。

通过修改 CSL_USB_CdcExample、我一直在专有电路板上使用 CDC 正确处理 USB、使用 CSL 库和 C5517器件。

由于应用的速度限制、我决定使用 USB 控制器随附的 CPPI DMA。

首先、我现在的目标是正确枚举主机上的 CDC 连接并从目标连续发送4字节有效载荷(0xABCD1234)。 周期为1秒。 为此、我不使用主机应用程序:我只需打开一个终端(TeraTerm)、即可监控从器件传输的数据包。  

在"CSL_USB_DMA_example"之后、我初始化 USB DMA 调用  

USB_initQueueManager (&hpdtx、linking_ram0);
usb_initdma();

操作模式仅作为 DMA Tx:

USBConfig.opMode  = CSL_USB_OPMODE_DMA_TXONLY;

我在主机上正确地看到 CDC 枚举和 COM、但当我尝试从目标发送数据包时、我在终端(TeraTerm)上看不到它、并且使用 USB 流量监控器时也不会捕获数据包。

我正在配置 DMA 一次、就在"USB_connectDev"之后

/*连接 USB 设备*/
状态= USB_connectDev (gUsbDevHandle);
if (status!= CSL_Sok)

printf ("USB 连接失败\n");
返回(结果);

// DMA 初始化。
usb_initdma();
USB_initQueueManager (&hpdtx、linking_ram0);
EP3上的// DMA Tx 配置。
USB_confDmaTx (CSL_USB_EP3、&hpdtx、USB_INLITY_num_Bytes_test、usbDataBuffer3、false);

变量定义如下(buffer2和 buffer3根据示例在命令文件上定义、因此它位于 SARAM 上):

CSL_UsbHostPtcr Deshpdtx;
uint16 usb_income num_Bytes_test = 4;

#define CSL_USB_DATA_SIZE 64
#pragma DATA_SECTION (usbDataBuffer3、".buffer3")
uint16 usbDataBuffer3[CSL_USB_DATA_SIZE];

#define CSL_USB_LRAM_SIZE (256)
#pragma DATA_SECTION (linking_ram0、".buffer2")
uint32 linking_ram0[CSL_USB_LRAM_SIZE];

为了传输数据包、我执行以下函数:

while (1)

USB_dmaTxStart (CSL_USB_EP3);

等待1秒...

我使用的是全速 USB、由于硬件限制、我无法配置高速连接。

为什么您认为这不起作用?

我从"CSL_USB_DMA_example"中看到配置了多个 EP:使用 CDC 将目标 到主机的数据传输到通信 EP3。 我是否可以仅为 DMA Tx 配置 EP3?

CSL 函数"CDC_OpenFullspeed"会强制 每个 EP 的 USBConfig.opMode 为"CSL_USB_OPMODE_Polled"、原因是什么?

谢谢你

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

    我们需要对此进行研究并返回给您。 请注意、由于假期、我们的回复会延迟。 感谢您的耐心。

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

    由于 USB CPPI DMA 的限制、数据必须为4、8、12等字节。 您已经在做的事情。

    建议采用 CSL_USB_DmaExample 并根据您的 CDC 需求进行修改:

    -确保在 TeraTerm 上使用可播放的 ASCII 字符填充 usbDataBuffer3。
    -以及默认值 USB_INVITY_num_Bytes_EP3应设置为4。

    USB_confDmaTx (CSL_USB_EP3、&hpdtx、USB_INLITY_num_Bytes_EP3、usbDataBuffer3、false);

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

    Lali、

    感谢您的回答。

    为了正确确定 CPPI DMA、在 EP3上传输4个字节、必须执行哪些基本步骤? 为了使用 Cppi DMA 传输数据、我应该如何修改 USB CDC 示例?

    谢谢你

    Stefano

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

    有几件事。

    -数据包大小必须被4除。 CPPI DMA 的限制。
    -由于设置大小、CPPI DMA 对于小块尺寸而言非常昂贵。 在每次 CDMA 传输之前和之后都需要设置队列。 因此、对于每包4个字节的小数据包而言、这种效率很低。

    这些步骤在 USB DMA 示例中进行了说明。 检查 USB ISR、了解完整队列进程的发生位置。 很抱歉、我没有更多关于您尝试实现的定制的详细说明。

    Lali