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.

[参考译文] CC1354P10:NS_CoAP_node (CC1354 Wi-SUN FAN):虽然 UART2 正常工作、但不打印 UART 日志 (nanostackNetworkHandler [DBG]/[info])

Guru**** 2812305 points

Other Parts Discussed in Thread: CC1354P10, SYSCONFIG, CC1352P7

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1617450/cc1354p10-ns_coap_node-cc1354-wi-sun-fan-uart-logs-nanostacknetworkhandler-dbg-info-not-printed-although-uart2-works

部件号: CC1354P10
主题中讨论的其他器件: SysConfigCC1352P7

您好:

我正在使用 NS_CoAP_NODE (Wi-SUN FAN) 示例 CC1354P10 LaunchPad 。 根据文档、在复位/上电后、我应该会看到 UART 打印如下:

  • [DBG] [main] nanostackNetworkHandler: ...

  • [INFO] [main] nanostackNetworkHandler: CON_STATUS_CONNECTING

但是、这些消息会发送 不会 出现在 UART 终端上。

我的验证结果

  • UART 硬件路径正常:

    • 使用相同的 UART 通道、我可以通过打印自定义测试消息 UART2 (例如)TEST: uart2 alive每次重置时都可靠。

  • 终端设置正常:

    • 其他示例在同一 COM 端口/终端上打印正常。

    • 我使终端保持打开状态并使用复位(而不是重启)、因此不会错过早期引导消息。

我在项目中观察到的情况

  • ns_trace_vprintf()使用ns_put_char_blocking()(逐字符)存在并写入输出。

  • 当我调用:

     
    ns_trace_printf(TRACE_LEVEL_INFO, "main", "FORCED TRACE TEST %d\r\n", 123);

    未打印任何内容(仅打印我的直接 UART2 测试)。

这表明纳米堆叠/TI 迹线层可能是这样 已编译出来 或重定向到其他位置。

问题

  1. 其中的构建定义了如何控制是否在等嵌入式示例上发出 Nanostack/Wi-SUN 跟踪日志 NS_CoAP_NODE

    • 我找到了对宏的引用EXCLUDE_TRACE,如,TI_WISUN_FAN_DEBUG

    • 如果EXCLUDE_TRACE定义了、它是否完全禁用ns_trace_printf()/ Nanostack 日志?

  2. 对于ns_coap_node(嵌入式)、建议使用什么方法将跟踪输出路由到 UART?

    • 是否需要 XDC 运行时配置(例如)System.SupportProxy = SysCallback; SysCallback.putchFxn = ns_put_char_blocking

    • 还是应该通过MBED_CONF_MBED_TRACE_ENABLE打印挂钩启用 mbed-trace?

  3. nanostackNetworkHandler在某些 SDK 版本/构建配置(版本与调试)中、ns_CoAP_node 默认不打印这些日志吗?

存在许多风险

  • 器件:CC1354P10 LaunchPad

  • 示例:ns_coAP_node (Wi-SUN FAN)

  • SysConfig:(我的版本:1.21.1)

  • SimpleLink SDK:(请填写确切的 SDK 版本)

  • CCS 版本:(请填写)

如对 ns_CoAP_node 的正确跟踪/UART 配置提供任何指导、都将不胜感激。 如果需要、我可以共享确切的编译器定义和.syscfg/xDC 设置。

谢谢你。

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

    尊敬的 Burc:

    感谢您的发布。 确实你应该得到这样的东西。

    [INFO][main]: Library info | Date: Dec 18 2025, Time: 19:38:34, Version: 1.6.2
    [INFO][main]: Wi-SUN stack version: 1.1.0, Wi-SUN protocol version: 1.0+
    [INFO][main]: Library info | Date: Dec 18 2025, Time: 19:38:34, Version: 1.6.2
    [INFO][main]: Wi-SUN stack version: 1.1.0, Wi-SUN protocol version: 1.0+
    [DBG ][main]: nanostackNetworkHandler: 6
    [INFO][main]: nanostackNetworkHandler: CON_STATUS_CONNECTING

    我确实在 CC1352P7 上获得正确的输出、但我遇到了与您使用 CC1354P10 时相同的问题。

    问题似乎位于以下位置:

    source/ti/ti_wisunfan/mbed_port/mbednano stack2tirtos/platform/ns_trace.c、输出会重定向至 DIO0-DIO3 位、该器件未连接到 XDS110 UART RX 引脚。

    #ifdef  WISUN_NCP_ENABLE
        // bring trace output on UART1 TX pin
    #if defined(LP_CC1312R7) || defined(LAUNCHXL_CC1312R1)
        IOCPortConfigureSet(IOID_11, IOC_PORT_MCU_SWV, IOC_STD_OUTPUT);
    #elif defined(LP_EM_CC1314R10) || defined(LP_CC1314R10_RGZ) \
        || defined(LP_EM_CC1354P10_1) || defined(LP_CC1354P10_1_RGZ) || defined(LP_CC1354R10_RGZ) \
        || defined(LP_EM_CC1354P10_6) || defined(LP_CC1354P10_6_RGZ)
        IOCPortConfigureSet(IOID_21, IOC_PORT_MCU_SWV, IOC_STD_OUTPUT);
    #else //1312
        IOCPortConfigureSet(IOID_16, IOC_PORT_MCU_SWV, IOC_STD_OUTPUT);
    #endif //1312
    #else //WISUN_NCP_ENABLE
    #if defined(LP_CC1312R7) || defined(LAUNCHXL_CC1312R1) || defined(LP_EM_CC1314R10) || defined(LP_CC1314R10_RGZ) \
        || defined(LP_EM_CC1354P10_1) || defined(LP_CC1354P10_1_RGZ) || defined(LP_CC1354R10_RGZ) \
        || defined(LP_EM_CC1354P10_6) || defined(LP_CC1354P10_6_RGZ)
        IOCPortConfigureSet(IOID_3, IOC_PORT_MCU_SWV, IOC_STD_OUTPUT);
    #else // 1312
        // bring trace output on UART0 TX pin
        IOCPortConfigureSet(IOID_13, IOC_PORT_MCU_SWV, IOC_STD_OUTPUT);
    #endif // 1312
    #endif //WISUN_NCP_ENABLE
        ns_enable_module();
        //ns_enable_exception_trace();
    
    }

    可将输出更改为 DIO13、从而连接 XDS。 但是、UART 输出似乎仅在您刚刚刷写器件或有调试会话后可用、在您复位器件后才起作用。 我认为这与有关 ITM 的勘误表有关。

        //IOCPortConfigureSet(IOID_3, IOC_PORT_MCU_SWV, IOC_STD_OUTPUT);
        IOCPortConfigureSet(IOID_13, IOC_PORT_MCU_SWV, IOC_STD_OUTPUT);

    但我不知道为什么它被设置为「马尔喀特」,或者还有一个明确的答案。 我将报告此问题、稍后再联系您。

    此致、

    Daniel

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

    Daniel Guarecuco Aguiar 

    谢谢您—按照您的指导、我们应用了建议的更改、现在可以看到预期的输出。

    是否有建议的方法可以ns_trace将输出路由到真实的 UART(例如通过 SysConfig 的 UART2)、以便在复位后和在定制电路板上都可以保留日志而无需修改 SDK 源?

    此致、


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

    尊敬的 Burc:

    推荐的解决方案是使用 ITM、但您可以尝试以下权变措施、因此我们改用 UART2 模块。 它即使在复位后也能正常工作。

    1. 为避免修改 SDK 文件、请在工程目录中:
      1. 制作 application/main.c 的本地副本(您可以在 CCS 上执行 Ctrl+c、Ctrl+v)
      2. 制作 mbed/mbednanovastack2tirtos/platform/ns_trace.c 的本地副本
      3. 删除 SDK 链接的 main.c 和 ns_trace.c(在 CCS 20 上,链接的文件在名称旁边显示一个小箭头)
    2. 在新创建的 main.c 本地副本中、在 main() 内的 Board_init () 之后添加以下内容  
          UART2_Handle traceUartHandle;
          UART2_Params uartParams;
          UART2_Params_init(&uartParams);
          uartParams.baudRate = 115200;
          traceUartHandle = UART2_open(CONFIG_UART2_0, &uartParams);
          ns_trace_set_uart_handle(traceUartHandle);
    3.  创建的本地 ns_trace.c 副本中  
      1. 添加 UART2.h include  
        #include <ti/drivers/dpl/SystemP.h>
        #include <ti/drivers/UART2.h>
      2. 在 ns_buf[256]之后添加以下内容、以从 main 获取 UART 句柄  
        static UART2_Handle g_traceUartHandle = NULL;
        
        void ns_trace_set_uart_handle(UART2_Handle handle)
        {
            g_traceUartHandle = handle;
        }
      3. 在 ns_trace_init () 中、如果使用 UART、请在初始化开始之前返回、在 sempahore 初始化之后添加它。  
            retc = sem_init(&ns_trace_mutex_handle, 0, 1);
            if (retc != 0) {
                while (1);
            }
        
            /* Skip ITM init if using UART2 for trace output */
            if (g_traceUartHandle != NULL)
            {
                return;
            }
      4. 将 ns_put_char_blocking 替换为以下内容、以便输出正确重定向到 UART2  
        void ns_put_char_blocking(const char ch)
        {
            if (g_traceUartHandle != NULL)
            {
                size_t bytesWritten;
                UART2_write(g_traceUartHandle, &ch, 1, &bytesWritten);
            }
            else
            {
                while(0 == ITM_STIM_PORT_8(ITM_PORT));
                ITM_STIM_PORT_8(ITM_PORT) = ch;
            }
        }
    4. 重新编译和刷写

    这会重定向通过 UART2 模块打印、引脚在 SysConfig 上配置、所有更改现在都在工程本地进行、因此将来对类似示例的任何导入都不受影响。

    此致、

    Daniel

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

    Daniel Guarecuco Aguiar 

    感谢您的指导。

    这解决了我对标头配置进行小幅修改后出现的问题。