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.

[参考译文] MSP430F5529:UART 转 USB CDC 桥接器

Guru**** 2589280 points
Other Parts Discussed in Thread: MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1178590/msp430f5529-uart-to-usb-cdc-bridge

器件型号:MSP430F5529

对你们所有人来说都是美好的一天!

我正在尝试制作一个工具、用于通过定制板上的 msp430f5529进行日志重定向。

Log 以115200波特率进入 UART0。 它是一个相当多的文本块、精确到135KB。

想法是通过 USB CDC 将其发送到 PC。

时钟以24MHz 运行、由 DCO 驱动。 有一个用于 USB 的8MHz XT2。

现在、问题是、MSP 淹没了传入的数据、无法处理所有数据。 我猜 UCA0RX 中断会阻止 USB API 正常工作、因此我想了加快速度的可能方法。

DMA 似乎是一个显而易见的解决方案、但我对它完全陌生、尤其是在 USB 方面、因此我看不到实际应用它的正确方法。

我目前有一个非 DMA 圆形缓冲器、但它无法跟上传入的数据。

是否有人可以提供有关如何处理此类问题的帮助/示例、或者 我如何在 USB API 上正确使用 DMA 以便实际节省时间?

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

    您好 Konstantin、

    您是否能够以不同的块传输这些字节? 或者您是否获得了恒定流? 一个想法是设置一些通信、以告诉另一个器件在发送下一组之前等待一小段时间。 您可以在 UART 中发送一个数据包进行暂停、然后发送另一个数据包进行 GO。 GPIO 切换将是另一个想法、如果它暂停、则会很简单。  

    为了获得更好的速度:

    DMA 是一个很好的主意、可以在这里找到一个示例 MSP430F55xx_dmaa_02.c我还建议阅读 用户指南中的第11节 、以更好地了解 DMA 及其操作方法。

    使用 DMA 乒乓来具有两个缓冲器、以便 UART 填充一个缓冲器、然后在缓冲器1填充后、USB 将从缓冲器1中检索数据、UART 可以开始填充缓冲器2。

    UART 将成为此处的瓶颈、因为 USB 模块的运行速度快于 UART。 由于器件上有8KB 的 SRAM、我将在该操作中使用大约一半的 SRAM、这意味着每个缓冲区的大小为2KB。 它将需要一些测试来根据您的系统要求对其进行微调、但希望这有助于了解情况。

    此致、

    Luke

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

    我进行了此操作(但基于我自己的 USB 堆栈、而不是 TI 源代码)、发现 DMA 无法加快速度。 最后、在24MHz MCLK 上运行的器件(MSP430F550X)能够 以4Mbps (不使用 DMA)进行双 CDC 桥接(单向、非全双工)传输。