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.

[参考译文] CC2340R5:BLE 堆栈影响 UART

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1515768/cc2340r5-ble-stack-impacting-uart

器件型号:CC2340R5

工具/软件:

在 Zephyr 上同时使用 BLE 栈和 UART0。 如果我仅使用 UART0、则可以看到 BLE FW 发送到外部的数据。 一旦 bt_enable ()调用完成,我就不会看到来自 UART0的任何数据。  bt_enable ()会以某种方式影响 UART0吗?

调试后、我已经确定了确实会影响 UART IO 功能的函数。

这是 BLE_ServicesInit()函数、它是 ble_controller.a 或 ble_peripheral_controller.a 库的一部分。

您能否研究一下它影响 UART 的原因?

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

    您好 Brian、

    感谢您的联系。

    您是否使用了一个开箱即用的示例、我们可以将其作为主要参考来重现?

    您是否已对器件树或引脚配置进行了修改?

    BR、

    David。

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

    David、

    我正在仔细检查客户正在运行的确切项目-我相信它是我们 OOB 的稍作修改的版本、但会确认。

    我们做了一些早期调试、并尝试交换 UART 端口以避免可能的资源冲突、但无论 UART 多路复用到什么引脚、问题都仍然存在。

    它在 CC2340 LaunchPad 上运行。

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

    David、

    所讨论的工程不是通用工程。 这是我们基于 FW Zephyr 的源代码。  他们为另一个非 TI 供电的 BLE 软件狗开发了该软件狗。 但效果很好。

    但在任何情况下、情况都是:

    1. 初始化 UART
    2. 通过 UART 将数据发送到 PC -在 PC 上接收到数据
    3. 使用 bt_enable ()调用初始化 BLE 栈。
    4. 通过 UART 向 PC 发送数据- PC 上未接收到数据
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Brian、

    我们将尝试在我们这边重现这个问题、请说明他们所依据的例子吗?

    BR、

    David。

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

    David、他们能够在信标应用程序上重现问题。  

    要使其100%可重现、请注释掉 main()函数中的 uart_tx 调用、并在 bt_ready()回调中将其取消注释。

    uart_tx 在 bt_enable ()调用回调之前停止工作。

    日志记录工作正常。 如果 CONFIG_LOG 已启用。

    我可以在 bt_enable ()被调用后看到消息。

    /* main.c -应用程序主入口点*/

     

    /*

    *版权所有(c) 2015-2016英特尔公司

    *

    * SPDX-License-Identifier: Apache-2.0

    */

     

    #include

    #include

    #include

    #include

     

    #include

    #include

     

    #include

    #include

    #include

    #include

     

    #define DT_DRV_COMPAT Zephyr_bt_HCI_ENTROPY  

     

    #define DEVICE_NAME CONFIG_BT_DEVICE_NAME

    #define DEVICE_NAME_LEN (sizeof (DEVICE_NAME)- 1)

     

    /*

    *设置广告数据。 基于 Eddystone 规范:

    * https://github.com/google/eddystone/blob/master/protocol-specification.md

    * https://github.com/google/eddystone/tree/master/eddystone-url

    */

    静态常量结构 bt_data ad[]= {

    BT_DATA_Bytes (BT_DATA_FLAGS、BT_LE_AD_NO_BREDR)、

    BT_DATA_Bytes (BT_DATA_UUID16_ALL、0xAA、0xFE)、

    BT_DATA_Bytes (BT_DATA_SVC_DATA16、

    0xAA、0xFE、 /* Eddystone UUID */

    0x10、 /* Eddystone-URL 帧类型*/

    0x00、 /* 0m 时校准的 Tx 功率*/

    0x00、 /* URL 方案前缀 http://www。 */

    "z"、"e"、"p"、"h"、"y"、 'R'、

    "P"、"r"、"o"、"j"、"e"、 'C'、'T'、

    0x08) /*.org */

    };

     

    /*设置扫描响应数据*/

    静态常量结构 bt_data sd[]= {

    BT_DATA (BT_DATA_NAME_COMPLETE、DEVICE_NAME、DEVICE_NAME_LEN)、

    };

     

    #define GPSP_SERIAL_NODE DT_ALIAS (uart0)

    static const struct device* gpsp_serial = device_DT_GET (GPSP_serial_node);

     

    静态 void bt_ready (int err)

    char addr_s[BT_ADDR_LE_STR_LEN];

    BT_addr_le_t addr = {0};

    size_t count = 1;

     

    uart_tx (gpsp_serial、"Hello world#2\r\n"、15、SYS_FOREVER_US);

     

    if (err){

    printk ("蓝牙初始化失败(err %d)\n"、err);

    返回;

    }

     

    printk ("蓝牙已初始化\n");

     

    /*开始广播*/

    Err = bt_le_Adv_start (BT_LE_ADV_NCONN_IDENTITY、AD、array_size (AD)、

    sd、array_size (sd);

    if (err){

    printk ("广告启动失败(err %d)\n"、err);

    返回;

    }

     

    /*对于您将使用的可连接广播

    * bt_le_obo_get_local (). 表示非连接的非身份信息

    *使用不可解析的私人地址;

    *没有 API 可以检索。

    */

     

    bt_id_get (&addr、&count);

    bt_addr_le_to_str (&addr、addr_s、sizeof (addr_s));

     

    printk ("信标已启动、广播为%s\n"、addr_s);

     

    uart_tx (gpsp_serial、"Hello world#3\r\n"、15、SYS_FOREVER_US);

    printk ("Hello world#3\n");

    }

     

    内部 main (void)

    内部错误;

     

    const struct UART_config config = {

    .baudrate = 115200、

    奇偶校验= UART_CFG_PARITY_NONE、

    .stop_bits = UART_CFG_STOP_BITS_1

    .data 位= UART_CFG_DATA_BITS_8

    .flow_ctrl = UART_CFG_flow_CTRL_NONE

    };

     

    if (!device_is_ready (gpsp_serial)){

    返回 false;

    }

     

    if (uart_configure (gpsp_serial、

    &config)!= 0){

    返回 false;

    }

     

    uart_tx (gpsp_serial、"Hello world#1\r\n"、15、SYS_FOREVER_US);

     

    printk ("启动信标演示\n");

     

    /*初始化蓝牙子系统*/

    Err = bt_enable (bt_ready);

    if (err){

    printk ("蓝牙初始化失败(err %d)\n"、err);

    }

    返回0;

    }

     

     

     

    Prj.cfg

    CONFIG_BT=y

    CONFIG_LOG=n

    CONFIG_CONSOLE=n

    CONFIG_UART_CONSOLE=n

    # CONFIG_BT_LL_SW_SPLIT=y

    CONFIG_BT_DEVICE_NAME="测试信标"

    CONFIG_MAIN_STACK_SIZE=1536

    CONFIG_UART_ASYNC_API=y

    CONFIG_UART_INTERRUPT_DRIVE=y

    CONFIG_UART_CC23X0_DMA_DRIVED=y

    CONFIG_UART_EXCLUDE_API_CALBACKOUT=n

    CONFIG_UART_USE_RUNTIME_CONFIGRE=y

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

    您好 Brian、

    我会尝试在我的最后,让你知道!

    此致、

    Tarek

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

    您好:

    我能够在我这边重现这个问题 我已联系到研发部门发表评论。 将此主题移动到电子邮件地址。

    此致、

    Tarek