工具/软件: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