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:USB CDC 数据发送故障

Guru**** 2609895 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/654573/ccs-ccstudio-usb-cdc-data-transmit-fault

器件型号:CCStudio

工具/软件:Code Composer Studio

你(们)好。

我在 C5517目标和主机 PC 之间使用 USB CDC 通信。

我使用 CSL 示例开发了我的应用、修改了"CSL_USB_CdcExample_Out"中的源代码。

由于硬件限制、我需要使用全速 USB 配置。

一切似乎都可以正常工作:枚举、虚拟 COM 配置、数据 TX/Rx 从 C5517目标正确传输并在 TeraTerm 终端主机端进行可视化。

作为测试、我发送一个64字节长的数据包(固定大小和固定 ASCII 可打印有效载荷)。

我开始以低周期(1个数据包/秒)发送这个64字节长的数据包、一切都很好:我在 TeraTerm 终端上看到数据包经过正确打印、在数据速率较低(100个数据包/秒)之前、数据包一直运行良好。

有一个关键速率可让运输停止:如果我发送64字节数据包@ 600Hz (307200位/秒、远低于12Mbit/s 全速限制)、我只能看到前64个数据包、然后通信停止。 使用 USB 监视器、我能够看到65个数据包已正确发送、但随后发送了128字节数据包、通信停止。 下面是一个日志:

发生错误后、即使软件正在运行、也不会发送数据包(即使在 USB 监控器下也不会捕获数据包)。  

在这种情况下、PERI_TXCSR 置位以下位:FIFONOTEMPY、UNDERRUN、TXPKTRDY

这 是系统地发生的。

如果以相同的速率发送18字节长的数据包、则通信仍会在通信开始后停止。

其他详细信息:

SYSCLK:175MHz

CSL 库:3.04

CCS5

/**缓冲区大小*/
#define CSL_USB_CDC_DATA_BUF_SIZE 512

静态 UINT16 usbDataBufferRx[CSL_USB_CDC_DATA_BUF_SIZE];
静态 UINT16 usbDataBufferTx[CSL_USB_CDC_DATA_BUF_SIZE];
静态 uint16 usbDataBufferTxWork[CSL_USB_CDC_DATA_BUF_SIZE/2];
静态 uint16 usbDataBufferRxWork[CSL_USB_CDC_DATA_BUF_SIZE/2];

对于所描述的测试、应用程序只发送 USB 数据包、不执行任何其他操作、并且使用了"CDC_putData" CSL 函数。

我是否需要控制欠运转/FIFONOTEMPY 位?

为什么即使低于12Mbit/s、也会发生这种情况?

谢谢你

此致

Stefano

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

    我已通知 RTOS 团队。 他们将直接在此处发布反馈。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Stefano、
    我想您必须有1500字节的数据包才能达到所需的12Mbps。 请尝试使用此方法、看看吞吐量是否增加。
    64字节数据包开销太大、无法达到您所需的速度。

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Lali、感谢您的建议。
    我使用全速 USB 配置运行:USB 协议将最大数据包大小限制为64字节。 实际上、如果我尝试发送一个65字节(或更大)的数据包、则会发生通信故障。 我看到 CSL 函数不管理多包(即发送一个512字节的数据包、管理8个64字节长数据包的碎片)、对吧?

    谢谢
    Stefano