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-Q1:启用 UART 会阻止进入待机模式。

Guru**** 2538955 points
Other Parts Discussed in Thread: CC2340R5

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1524657/cc2340r5-q1-enabling-uart-is-preventing-from-entering-standby-mode

器件型号:CC2340R5-Q1
主题中讨论的其他器件:CC2340R5

工具/软件:

您好、

目前、我们在工程中使用 CC2340R5、并使用基本 BLE SDK 代码测试器件的睡眠性能。

我们正在使用 Monsoon 提供的“HV Power Monitor“工具来测量电流消耗。

我们观察到、当器件既不广播也不扫描时、平均功耗在 20uA-25uA 范围内。 这对于我们的用例来说已经足够了。

但是、当我们启用 1.8mA 外设时、问题就会出现、当启用 UART 外设时、我们可以看到器件不会进入待机模式、并且电流消耗平均介于 UART –2.0mA(电流非常高)之间。

UART 配置的默认值如下所示:

1.波特率:115200
2.数据方向:发送和接收
3、中断优先级:3-最低优先级

用于初始化 UART 外设的代码片段:

UART2_Handle uart;
	uint8_t TestBuffer[32];
	
    UART2_Params uartParams;
    int32_t semStatus;
    uint32_t status = UART2_STATUS_SUCCESS;

    /* Call driver init functions */
    GPIO_init();

    /* Create semaphore */
    semStatus = sem_init(&sem, 0, 0);

    if (semStatus != 0)
    {
        /* Error creating semaphore */
        while (1) {}
    }

    /* Create a UART in CALLBACK read mode */
    UART2_Params_init(&uartParams);
    uartParams.readMode     = UART2_Mode_CALLBACK;
    uartParams.readCallback = callbackFxn;
    uartParams.baudRate     = 115200;
    uartParams.readReturnMode = UART2_ReadReturnMode_PARTIAL;

    uart = UART2_open(CONFIG_UART2_0, &uartParams);

    if (uart == NULL)
    {
        /* UART2_open() failed */
        while (1) {}
    }

在一个单独的任务中、我们在 RX 线上进行读取、如下所示:

UART2_READ (UART、TestBuffer、sizeof (TestBuffer)、NULL);

注意:“TestBuffer"和“和“UART"是“是全局变量。

请帮助我们解决这个问题、这是预期行为吗? 请建议相同的解决方案。

PFA、请在下面找到电流消耗计算的快照。

扫描时、  

请注意、我们已获取 basic_ble SDK 代码并将配置更改为 central。

下面附上了 syscfg 中更改的字段的屏幕截图。

使用的 SDK 是最新的、

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

    您好:

    我已经联系了研发团队以获得更多信息。 我应该有一个回应你明天。

    此致、

    Nima Behmanesh

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

    您好:

    我已经与驱动程序团队确认、启用 UART 将禁用待机模式。 您必须关闭 UART 驱动器才能启用待机功能。

    此致、

    Nima Behmanesh

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

    您好、

    很抱歉耽误响应。 我被其他事情所困扰。

    感谢您确认 UART 禁用器件进入待机模式。

    您能告诉我们 UART RX 打算如何在中断模式下使用吗?

    由于我们不知道外部控制器将向我们发送多少个字节、因此我们选择了用于接收 UART 数据的中断逻辑。 如果它影响待机模式行为、请建议针对该行为采取相应的权变措施。

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

    您好:

    我对这里的提问有点困惑。 您是否询问处于中断模式的 UART RX 是否停止待机? 如果问题出在此处、那么是的、它将阻止器件进入待机状态。 您需要在不使用时关闭 UART 句柄、并在使用时重新打开。 这可通过将外部控制器的 GPIO 设置为高电平来实现、通知器件应唤醒并准备好接收 UART 数据。

    此致、

    Nima Behmanesh

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

    您好、

    我们的电路板只有一个 2 线 UART 连接、没有任何可用的引脚可用作 GPIO 源。

    如前所述、外部器件可以随时发送数据。 此外、根据之前与 TI 支持部门的讨论、我们知道睡眠控制完全由栈管理、应用程序无法直接控制。

    鉴于此、我们无法确定何时安全关闭或重新打开 UART 外设。 这可能会导致睡眠周期内的数据丢失、因为在传输数据时可能会禁用 UART 外设。

    我们还观察到、当 UART 外设保持启用状态并且器件未进入睡眠模式时、平均电流消耗约为  2mA 这对于我们的用例来说非常高。

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

    您好:

    遗憾的是、当启用 UART 时、无法让器件进入睡眠模式。  

    我知道您已经提到过、您没有更多可用的引脚、但是、为了实现所需的任何类型的流量控制/控制何时启用/禁用驱动器、实际上需要另一个 IO。  

    您是否考虑过让一个 IO 具有多种用途? 可以在运行时重新配置 IO 引脚。  

    此致、

    Nima Behmanesh