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.

[参考译文] MSP430FR2153:解决 Windows 10上的 MSP430反向通道 UART 缓冲延迟

Guru**** 2519050 points
Other Parts Discussed in Thread: MSP-FET, MSP430F5528, ENERGYTRACE, UNIFLASH, MSP430F5510, MSP430F6638

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/963935/msp430fr2153-solving-msp430-back-channel-uart-buffering-delay-on-windows-10

器件型号:MSP430FR2153
主题中讨论的其他器件:MSP-FETMSP430F5528ENERGYTRACEUNIFLASHMSP430F5510MSP430F6638

来自我的目标的数据在显示在终端程序中之前被延迟。
这很烦人。  它都可以工作、但在我看到任何内容之前、通常会有2-3秒的延迟。
然后、可能会出现三行或四行文本。  这是一种经典的缓冲情况。

我的设置:
Windows 10
TeraTerm 4或 PuTTY
TI MSP-FET
反向通道 UART 位于19200 8N1、无流量控制、CR/LF 结束

还有人看到这个吗?  解决这个问题?  是 TI 驱动程序吗?
是否有办法减小该缓冲区的大小、或指定它在 CR 或 LF 上闪烁?

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

    您好、Bryce、

    是的、它一直在臭虫。  我曾向我们的软件工程团队寻求帮助、他们表示这是"Windows USB CDC"行为。  不确定我是否认为、 我无法确认 Launchpad 上的 MSP430F5528 (作为编程器/调试器/反向通道 UAR)是否导致延迟。 如果我可以测量 USB 端以查看接收到的 UART 数据何时出现在 USB 端、这会很有帮助。  也许社区中有人对此有经验。

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

    当我抱怨、呃、几年前描述过这一点时、我被告知调试器通信量优先于 USB。 这意味着 没有解决这一问题的计划。 我想它是从 EnergyTrace 出现的那段时间开始的。 (讨论可以追溯到论坛的某个地方、但我没有记住足够的关键字来找到它。)

    我唯一的观察结果是:

    1) 1)如果断开调试器(软件)、则 UART 上没有延迟。

    2) 2)似乎存在~64字节的猝发转发、因此如果您要输出相当多的数据、则延迟并不是很明显。

    [编辑:我首先在 Win7上看到了这一点、因此严格来说、它不是 Win10。]

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

    是的、它大约是64字节突发转发、或2秒延迟。

    CCS 调试器中的"断开与目标的连接"会停止程序、因此这是不好的。
    禁用 EnergyTrace 无法确定。
    但是、"断开与目标的连接"、然后通过 UniFlash 加载我的固件运行良好。  看不到有效的缓冲或延迟
    (但我必须等待几秒钟、MSP 应用串行端口才会出现在 Windows 10中)。

    如何从 CCS Desktop 中运行非调试会话?

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

    只是为了清除这个问题、它是与 FET 软件/固件相关的问题。 不会传输到 PC 端任何操作系统或驱动程序、也不会传输到 MSP430 USB 硬件模块、64字节 CDC 数据包大小等。

    基于 MSP430F5510的旧款闪存器能够从任何操作系统(低至 XP SP2)上的2个 CDC-UART 端口(并行)执行4Mbps 日志。 是的、它是来自已发布/自由运行的器件的日志、但在19200bps 上等待2-3秒、现在是2020年、完全没有。

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

    我的观察结果:在断点处断开连接(方框按钮)会使 MCU 程序停止。 在 MCU 运行时执行此操作会使其保持运行状态。 还有复位按钮。

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

    您好、Bryce、

    我已经确认、在调试器模式下运行时、由于调试器处理所有调试活动和 UART 所需的带宽、数据传输会出现延迟。  如果您在没有调试器的情况下尝试或退出调试模式、则延迟应会消失。

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

    您好、Bryce、

    几天以来,我一直没有听到您的声音,因此我假设您能够推进您的项目。
    因此、我要将此帖子的状态更改为已解决。

    如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。

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

    虽然这是问题的原因、但这不是解决方案。

    如何记录此行为?

    有没有技术方法可以说我希望减少调试器的优先级、而 UART 的优先级更高?  更快的 PC 或 USB 3.0接口是否可以解决问题?

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

    [引用 user="Bryce Nesbitt">更快的 PC 或 USB 3.0接口是否能解决问题?[/quot] MSP-FET 将 MSP430F6638用于 USB 接口、该接口仅具有 全速通用串行总线(12M)。 因此、不要认为 USB 3.0接口会有所帮助。

    [引用 user="Bryce Nesbitt">是否有技术方法可以说我希望调试器上的优先级降低、而 UART 上的优先级提高?https://www.ti.com/tool/download/MSPDS-OPEN-SOURCE 包含 MSP-FET 中固件的源(以及在 PC 上运行的 MSP430 DLL)。 我已经进行了快速介绍、在 MSPDebugStack_OS_Package_3_15_1_1\BIOS\src\FW\FET\main.c 中、有用于打开/关闭 UART 和调试器的函数:

    void switchDebugerOff ()
    {
    TA1CTL &=~TAIE;
    TB0CTL &=~TBIE;
    TA0CTL &=~TAIE;
    
    loopInfos_.Scheduler =虚拟调度程序;
    loopInfos_.UsbLoop = USB_MainLoop;
    debugerOff = 1;
    }
    
    
    void switchDebugOn()
    {
    loopInfos_.Scheduler = V3OP_Scheduler;
    loopInfos_.UsbLoop = dummy_UsbLoop;
    TA1CTL |= TAIE;
    TB0CTL |= TBIE;
    TA0CTL |= TAIE;
    debugerOff = 0;
    }
    
    void switchOnUart()
    {
    if (!debuggerOff)
    {
    loopInfos_.Scheduler = V3OP_Scheduler;
    loopInfos_.UsbLoop = USB_MainLoop;
    }
    } 

    dummy_UsbLoop ()是一个空函数。  USB_MainLoop ()调用 COM_BASE_Loop ()。  com_base_Loop ()将每隔1500次(弹出)调用通过 USB 发送从 UART 接收到的字符。

    而当调试器处于活动状态时、当 接收缓冲区包含 COM_FIFOSIZE 字节时、接收字符似乎只由 COM_BASE_Receive ()发送。 其中 MSP_FET COM_FIFOSIZE 设置为  256.在这里 调用 com_base_receive()以响应 UART 接收中断。

    也就是说、通过查看 MSP-FET 固件的结构、可以了解为什么在调试器处于活动状态时缓冲 UART 接收、但无法在现有源代码中看到任何机制、从而无法选择调试器的相对优先级。与 UART。

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

    [引用用户="Bryce Nesbitt"]

    更快的 PC 或 USB 3.0接口是否可以解决问题?

    [/报价]
    PC/USB 接口在这里不是瓶颈。 基于20MHz CPU (带有相关软件)的 FET 主器件是。
    您的问题的唯一解决方案是使用专用的 USB/UART 桥(例如基于 pl2303hxd)、只需几美元即可在 e-bay 上找到该桥接器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bryce、

    《MSP 调试器用户指南》第5.6.2节介绍了该限制。