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:打开 UART 驱动器时的不同电流消耗。

Guru**** 1821780 points
Other Parts Discussed in Thread: SYSCONFIG, LP-EM-CC2340R5
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1415140/cc2340r5-different-current-consumption-while-opening-uart-driver

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

工具与软件:

尊敬的团队:

在 basic_ble 演示中、我在 App_Stack itDoneHandler 中启动一个 open-and-reopen (周期为1秒)的 UART 驱动程序循环。 然后、我使用 ET 跟踪电流、并发现第一轮打开 UART 驱动器的电流消耗略 高于 后续四轮、如下所示。

为什么会发生这种情况? 请提供帮助。

谢谢。

BR

Connor

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

    尊敬的 Connor:

    您能否检查上电后是否添加了一些延迟、是否可以看到同样的行为? 您是否等待5秒钟、然后再打开 UART、看看是否仍然出现同样的增加情况?

    此致、

    1月

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

    您好、Jan:

    当然、我做了这个、它运行正常。 上电后延迟500ms。

    但我想弄清楚为什么会发生这种情况? 我需要向客户解释这一点。  

    谢谢

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

    您好、Connor、

    您能否分享一下您是如何测试 UART 的(代码中断)、这种测试方式涉及到 App_Stack itconverter()函数的? 您是否正在使用 MenuModule_printf 或是否已禁用它?

    此外、您能否检查第一次和第二次 UART 操作之间的 UART 寄存器值差异? 您可以在调试模式下执行此操作。

    BR、

    David。

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

    您好、Jan:

    我可以问您为什么建议等待5秒钟吗? 以前是否有任何相关问题?

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

    尊敬的 David:

    代码提取很简单。

    #include <ti/drivers/UART2.h>
    #include <util.h>
    void uart_init(void);
    UART2_Handle _uartHandle = NULL;
    Clock_Struct clkOpenUart;
    Clock_Struct clkCycleUart;
    #define UART_RX_BUFF_SIZE           (256 * 4 + 128)
    uint8_t uart_buf[UART_RX_BUFF_SIZE];
    
    void _uart_deint(void)
    {
        UART2_close(_uartHandle);
    
        Util_constructClock(&clkOpenUart, (void*) uart_init,
                            1000, 0,
                            false,
                            0);
    
    //    Util_constructClock(&clkOpenUart, (void*) BLEAppUtil_invokeFunctionNoData,
    //                        1000, 0,
    //                        false,
    //                        (uint32_t)ttm_usart_init);
    
    
        Util_startClock(&clkOpenUart);
    
    }
    
    void uartReadCallBack(UART2_Handle handle, void *buf, size_t count,
                               void *userArg, int_fast16_t status)
    {
    
    }
    void uartWriteCallBack(UART2_Handle handle, void *buf, size_t count,
                                void *userArg, int_fast16_t status)
    {
    
    }
    
    void uart_init(void)
    {
        UART2_Params uartParams;
        UART2_Params_init(&uartParams);
        UART2_Params_init(&uartParams);
        uartParams.readMode = UART2_Mode_CALLBACK;
        uartParams.writeMode = UART2_Mode_CALLBACK;
        uartParams.readReturnMode = UART2_ReadReturnMode_PARTIAL;
        uartParams.baudRate = 115200;
        uartParams.readCallback = uartReadCallBack;
        uartParams.writeCallback = uartWriteCallBack;
    
        _uartHandle = UART2_open(CONFIG_UART2_0, &uartParams);
    
        UART2_read(_uartHandle, uart_buf, 244, NULL);
    
        Util_constructClock(&clkCycleUart, (void*) _uart_deint,
                                1000, 0,
                                false,
                                0);
    
    
        Util_startClock(&clkCycleUart);
    
    }
    e2e.ti.com/.../util.ce2e.ti.com/.../8176.util.h

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

    这两个寄存器具有相同的值。

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

    您好、Connor、

    感谢您提供信息。 您正在从 App_Stack 421itDoneHandler 调用 uart_init()吗? 我怀疑此处的电源策略可能会有所不同。 您能否分享 Power_getConstraintMask ()的回报? 您可以查看此处内部功率驱动器的详细信息 /docs/drivers/doxygen/html/_power_8h.html.

    BR、

    David。

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

    尊敬的 David:

    感谢您提供此信息。 您正在从 App_Stack 421itDoneHandler 调用 uart_init()吗? [报价]

    是的、我在  App_Stack convitDoneHandler 的结尾前调用 uart_init()。

    如图所示。 Power_getConstraintMask 的返回值相同。

    我想知道这个问题是否与背景有关? 但奇怪的是,在调用 uart_init ()之前,我调用 sleep(1)等待一秒钟,这不会产生问题。

    附加了我的 project.e2e.ti.com/.../basic_5F00_ble_5F00_connor.zip

    谢谢。

    BR

    Connor

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

    您好、Connor、

    我将介绍该项目。 请允许我到明天。 但我建议看看在示例项目中、UART 被初始化和打开的位置、以遵循该流程。

    BR、

    David。

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

    尊敬的 David:

    是否有进展?

    谢谢。

    BR

    Connor

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

    您好、Connor、

    抱歉、我还不能进一步了解这一点。 请允许我在下周开始。 您是否能够根据我们如何/何时在示例中实施此功能获得一些线索?

    BR、

    David。

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

    尊敬的 David:

    感谢您的支持;我理解您的日程安排非常繁忙。

    下面是 UART 驱动程序初始化代码。 在打开 UART 时、它可能与其他驱动程序(可能是 DMA)有关吗?

    我希望这对您有所帮助。

    谢谢。

    BR

    Connor

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

    尊敬的 David:

    有任何进展?

    谢谢。

    BR

    Connor

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

    您好、Connor、

    感谢您的耐心等待。 我使用了您共享的文件(UART 和时钟设置)来尝试重现您看到的行为。 但是、在第一次 UART 事件期间、没有相同的 UART 额外电流消耗。 我想问您是否已经修改了 Jan 在开始时建议的额外延迟(500ms)的文件(虽然从代码上看它不像)?  我们是否遗漏了对项目的任何其他修改?

    顺便说一下,我使用 basic_ble 示例(SDK 版本8.10 ),在 SysConfig 中选择了"Disable the Display Module"选项-> Advanced Settings ,然后按如下所示修改 appMain ()函数:

    void appMain(void)
    {
        // Call the BLEAppUtil module init function
        BLEAppUtil_init(&criticalErrorHandler, &App_StackInitDoneHandler,
                        &appMainParams, &appMainPeriCentParams);
    
        uart_init();
    }

    请告诉我您的想法。

    BR、

    David。

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

    尊敬的 David:

    感谢您的尝试!

    实际上、这个问题的关键在于以下步骤:上电--> UART 打开(电流消耗较高)--> UART 关闭--> UART 打开(电流消耗较低(正常))--> UART 打开-->

    我希望下图有助于理解。

    总之、"第1个 UART 打开"比"第2个 UART 打开"消耗的电流更高、上电后"第1个 UART 打开"消耗的电流是重现该问题的关键。

    这很奇怪…

    因此、您能否说明一下 导致各种电流消耗的原因?

    谢谢。

    BR、

    Connor。

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

    您好、Connor、

    感谢您在步骤中提供的详细信息、我看到您现在提到的内容。 我可以尝试使用非 BLE 示例进行相同操作、例如空示例、然后查看是否可以重现、只是为了确保与 BLE 无关。 您使用的是直流/直流稳压器还是 GLDO?

    BR、

    David。

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

    尊敬的 David:

    直流/直流、仅经过以下 syscfg 修改。 硬件是 LP-EM-CC2340R5。

    BR、

    Connor。

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

    尊敬的 David:

    有任何进展?

    谢谢。

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

    您好、Connor、

    我已经使用空示例(无 BLE)测试了初始化/关闭/重新打开序列、尽管电流消耗略高、但不像 BLE 示例那样严格。 我认为确实有一些例程会在启动/复位后立即执行、这些例程会消耗更多的电量、无线电相关的例程可能是 BLE 示例功耗更高的原因之一。 好的、我在等电源领域的专家来了解有关此例程的更多详细信息。

    BR、

    David。

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

    您好、Connor、

    与团队进一步讨论时、这可能与 UART 无关。 在进行 UART RX 时、UART 驱动器不允许待机。 因此、不要考虑来自 UART 的问题、而是在首次进入待机模式之前增加电流的问题。 您是否可以尝试用如下代码替换您的 UART2_open()-> UART2_READ()-> UART2_CLOSE ()序列:power_setConstraint (PowerLPF3_disallow_standby);等待一段时间(时钟定时器)、然后等待 Power_releaseConstraint (PowerLPF3_disallow_standby);  

    BR、

    David。

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

    尊敬的 David:

    非常感谢您和团队的辛勤工作。

    我已经测试了提到的序列: power_setConstraint (PowerLPF3_disallow_standby);等待一段时间(时钟定时器)、然后等待 Power_releaseConstraint (PowerLPF3_disallow_standby)。 请看下图。

    正如您所提到的、此问题似乎与 UART 驱动程序无关。

    您能否弄清楚为什么在首次进入待机模式之前电流增加?  

    期待您的回复。

    谢谢!

    BR、

    Connor。

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

    您好、Connor、

    好的、有趣的。 您能帮我完成最后一次寄存器状态检查吗?

    请看一下第一个 UART/待机事件的 CMKD 寄存器、我们假设等待30秒后。 特别是 CKMD.HFXTTARG.IREF、它将为我们提供有关当前状态的信息。 CKMD.HFXTTARG.IREF 值应以8启动(在 Power_init (之后))、然后针对每个待机条目减小1、直到振幅稳定。

    BR、

    David。

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

    尊敬的 David:

    很高兴得到您的快速回复。

    我已经检查了  CKMD.HFXTTARG.IREF、请参考下图。

    这似乎与这个问题有关。  

    这可以解释这个问题吗?

    谢谢!

    BR、

    Connor。

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

    您好、Connor、

    感谢您提供额外的信息。 让我们尝试启用 初始 HFXT 振幅补偿 SysConfig 配置固件。

    如果应用要求 HFXT 振幅在启动后已处于理想范围内、则可以使用 PowerCC23X0_Config.startInitialHfxtAmpCompFxn 来启用初始 HFXT 振幅补偿。 如果启用了初始 HFXT 振幅补偿、则在启动时/启动后将找到最优振幅、这意味着在 HFXT 准备就绪之前需要更长时间、但当它准备就绪时、振幅将已经处于最佳范围内。 请注意此处提到的时序权衡。

    BR、

    David。

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

    尊敬的 David:

    非常感谢您的帮助。

    启用  初始 HFXT 振幅补偿 看起来是可行的、如下图所示。

    但我已经注意到、"启用初始 HFXT 振幅补偿将导致更多的闪存使用率以及从启动到首次射频操作的时间更长。" 该句子在  PowerCC23X0.h 中进行了描述

    CCS 可以轻松占用更多闪存。 我的问题是如何测量 从启动到首次射频操作的时间。 任何文档中都有描述吗? 或者、通过 "basic_ble"进行测量的推荐方法是什么?

    谢谢!

    BR、

    Connor。

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

    您好、Connor、

    很高兴看到进步。

    我建议查看用户指南的这一部分: https://software-dl.ti.com/simplelink/esd/simplelink_lowpower_f3_sdk/8.10.00.55/exports/docs/ble5stack/ble_user_guide/html/ble-stack-5.x-guide/debugging-index-cc23xx.html#debugging-rf-output。如果您启用射频输出引脚(RX、TX)、那么应该可以轻松地确定引导(您可以在此处使用另一个 GPIO)与使用逻辑分析仪进行首次射频操作之间的时间。

    BR、

    David。

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

    尊敬的 David:

    感谢您的支持。

    BR、

    Connor。