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:basic_ble_oad_onchip 多角色在关断模式下消耗更多电流

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1406667/cc2340r5-basic_ble_oad_onchip-multirole-consumes-more-current-in-shutdown-mode

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

工具与软件:

您好!

  目前、我正在从事 basic_ble_oad_onchip 多角色配置文件项目和 basic_ble 中央 配置文件项目。

1.在 basic_ble 中央 配置文件项目中实施了一种关断模式,能够达到120nA 到150nA 的电流。

2.但在 basic_ble_oad_onchip 多角色 配置文件项目中、我们实施了与 basic_ble 中央 配置文件项目相同的关断模式、并且我们只得到了100uA 以上的电流。

[注:外围设备 角色广播将在用户请求时通过唯一按钮启动、直到设备充当核心角色]

这里我附加了一个用于进入关断模式的实现

.

void Low_Power()
{
    /************************Disable Peripherals*********************************************************************/
	GPIO_disableInt(LED);
    GPIO_clearInt(BUTTON1);
    GPIO_clearInt(BUTTON2);
    GPIO_clearInt(BUTTON3);
	
    /**********************************************GPIO PIN Enable interrupts *******************************************************/
     GPIO_setConfig(BUTTON1, GPIO_CFG_IN_NOPULL | GPIO_CFG_SHUTDOWN_WAKE_LOW);
     GPIO_setConfig(BUTTON2, GPIO_CFG_IN_NOPULL | GPIO_CFG_SHUTDOWN_WAKE_LOW);
     GPIO_setConfig(BUTTON3, GPIO_CFG_IN_NOPULL | GPIO_CFG_SHUTDOWN_WAKE_LOW);

   int_fast16_t  Status = PowerCC23X0_notify(PowerLPF3_ENTERING_SHUTDOWN);

   if(Status == Power_SOK)
   {
       UART2_close(uart) ;
       Power_shutdown(0,0);
   }
   else
   {
       UART2_write(uart,"\nFAIL",5, 0);
	   }
}

SDK 版本:simplelink_lowpower_f3_sdk_8_10_01_02

CCS 版本:CCS 12.7.1

我想知道为什么 OAD 曲线会消耗如此多的电流、以及我们如何进行优化以实现  120到150nA 的电流。

谢谢!

Vignesh。

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

    您好!

       温柔的提醒。

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

    您好、Vignesh

    对迟交的答复深表歉意。 我离开办公室了。

    您是否使用 basic_ble_oad_onchip 开箱即用示例、然后修改应用层以支持多角色? 请您与我分享一下、您是如何从较高层面做到这一点的? 您共享的这个 Low_Power ()代码也以同样的方式在 basic_ble 中实现? 测量功耗时、是否还在刷写 mcuboot 和 persistent 应用?

    BR、

    David。

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

    尊敬的 David:

    您是使用 basic_ble_oad_onchip 开箱即用示例、然后修改应用层以支持多角色吗?

    是的、我正在使用  basic_ble_oad_onchip 并 修改应用层来支持多角色功能。

    您共享的 Low_Power ()代码也以同样的方式用 basic_ble 实现?

     是的,我以同样的方式在 basic_ble 中实现了相同的 Low_Power ()函数。

    在测量功耗时、是否还刷新了 mcuboot 和 persistent 应用程序?

    是的、我在测量功耗时刷写了 mcuboot 以及持久的应用程序和应用程序代码。

    谢谢!

    Vignesh。

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

    您好、Vignesh:

    感谢您提供的信息。

    您能否确认 PowerCC23X0_Notify ()和 Power_SHUTDOWN ()的状态返回为您预期的状态(Power_SOK)? 此外、您是否正在使用除 UART 之外的任何其他外设?

    BR、

    David。

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

    尊敬的 David:

      PowerCC23X0_NOTIFY ()的返回状态为  POWER_SOK   (0) /*!<确定、操作成功*/。 除 UART 外、我们不使用任何其他外设。

    谢谢!

    Vignesh。  

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

    您好、Vignesh:

    有意思。 如果操作成功、我预计它也会关闭。 我们能否尝试缩小问题的范围? 我建议先在多角色示例(类似于您使用的示例)上运行相同的命令、然后查看是否可以获得预期的电流消耗。 您要使用什么来测量电流消耗?

    此外、您是否在两个项目中从同一位置调用 Low_Power ()函数?

    BR、

    David。

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

    尊敬的 David:

    [报价 userid="567374" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1406667/cc2340r5-basic_ble_oad_onchip-multirole-consumes-more-current-in-shutdown-mode "]

    1.在 basic_ble 中央 配置文件项目中实施了一种关断模式,能够达到120nA 到150nA 的电流。

    2.但在 basic_ble_oad_onchip 多角色 配置文件项目中、我们实施了与 basic_ble 中央 配置文件项目相同的关断模式、并且我们只得到了100uA 以上的电流。

    [注:外围设备 角色广播将在用户请求时通过唯一按钮启动、直到设备充当核心角色]

    [报价]

    我们在非 OAD 实现的 blasic_BLE 项目中尝试关闭电源。 在这种情况下、我们实现了最低电流(120nA 至150nA) 、但在同一项目中实施 OAD 后、无法实现与非 OAD 相同的电流。 相反、我们得到的电流超过100uA。

    此外、您是否在两个项目的同一位置调用 Low_Power ()函数?

    是的,我们在 两个项目中从同一位置调用 Low_Power ()函数。

    谢谢!

    Vignesh。

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

    您好、Vignesh:

    好的。 我会自行测试 可以肯定的是 Low_Power ()函数正在工作,但系统中的其他东西是避免设备完全关闭。 调用该函数后会发生什么情况? 您仍能看到设备正在广播吗? 如果您使用手机进行扫描(例如使用 SimpleLink Connect 应用程序)、您是否看到器件仍然是 ADV? 如果您可以运行 EnergyTrace 测试并共享跟踪的屏幕截图、将会很有帮助。 这样可以根据电流消耗曲线来查看器件可能正在执行的操作。

    BR、

    David。

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

    尊敬的 David:

       调用 Low_Power ()函数后、设备将进入关断模式。 按下按钮时中断设备将唤醒并开始扫描。 当器件唤醒状态时、我们必须通过 UART 发出自定义用户命令、以在器件重新启动后启用外设角色。

    该 器件仍将仅担任核心角色。

    if(startCentralOADmode == 1 )
    {
            #if defined( HOST_CONFIG ) && ( HOST_CONFIG & ( PERIPHERAL_CFG | CENTRAL_CFG ) )
                status = DevInfo_start();
                if(status != SUCCESS)
                {
                    // TODO: Call Error Handler
                }
                status = SimpleGatt_start();
                if(status != SUCCESS)
                {
                    // TODO: Call Error Handler
                }
            #endif
    
            #if defined( HOST_CONFIG ) && ( HOST_CONFIG & ( PERIPHERAL_CFG ) )
                // Any device that accepts the establishment of a link using
                // any of the connection establishment procedures referred to
                // as being in the Peripheral role.
                // A device operating in the Peripheral role will be in the
                // Peripheral role in the Link Layer Connection state.
                status = Peripheral_start();
                if(status != SUCCESS)
                {
                    // TODO: Call Error Handler
                }
            #endif
    }

    谢谢!

    Vignesh。

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

    您好、Vignesh

    我将使用片上 OAD 示例对此进行测试、请允许我一直到星期一再给您提供答案。 要复制它、您在代码中何时/何地调用 Low_Power ()函数?

    BR、

    David。

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

    尊敬的 David:

    抱歉、我的错误、我将其标记为"这已解决我的问题"。

    请更新 任何有关功耗的观察结果。

    要复制它、您何时/在代码中何处调用 Low_Power ()函数?

    在调用   Low_Power ()函数10秒后启动设备时。

    谢谢!

    Vignesh。

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

    您好、Vignesh

    我已经尝试在我这边使用 basic_ble_oad、persistent_app 和 mcuboot_oad_onchip 来重现设计过程、具体如下所示:

    在应用程序(app_connection.c)从 Connection_Conn Handler() cb 函数内的堆栈接收到断开连接事件(BLEAPPUTIL_LINK_ENTIL_EVENTD_EVENT )后,我调用函数 Low_power()。

    void Low_Power()
    {
       int_fast16_t  Status = PowerCC23X0_notify(PowerLPF3_ENTERING_SHUTDOWN);
       if(Status == Power_SOK)
       {
           Power_shutdown(0,0);
       }
    }

    请查看结果:

    我认为按钮中断可能会导致您产生额外功耗。 请告诉我,到目前为止(使用修改后的 Low_power ()函数),您是否可以获得预期结果。

    BR、

    David。

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

    尊敬的 David:

    感谢您的努力。

    请告诉我、如果到目前为止(使用修改后的 Low_power ()函数)、您是否可以获得预期结果。

    我已经通过在应用程序(app_connection.c)接收到断开事件后调用函数 Low_power ()进行了测试、而无需在 basic_ble_oad 中配置任何 GPIO 中断、并且我们得到了预期的结果。

    但是通过使用 非 OAD 代码中的 GPIO 按钮中断实现 Low_power ()函数、我们可以获得预期的结果。 但为什么我们无法在 OAD 代码中实现。

    您能用3个按钮中断进行测试吗?

    在调用   Low_Power ()函数10秒后器件启动时、使用按钮中断器件必须从 SHUTDOWN 模式唤醒。

    谢谢!

    Vignesh。

      

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

    您好、Vignesh:

    我正在使用电路板上的两个按钮进行测试、如何在 SysConfig 中配置这两个按钮?

    BR、

    David。

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

    尊敬的 David:

    这里我已附加了  SysConfig 中配置的 GPIO 映像。

    除 GPIO 引脚之外、3个 GPIO 的上述配置相同。

    在上图中、默认配置了 GPIO。  

    谢谢!

    Vignesh。

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

    您好、Vignesh:

    感谢您提供额外的信息。 我使用2个 GPIO (按钮-来自 TI Launchpad 的左侧和右侧)进行了测试、我无法重现您遇到的额外电流消耗。 我怀疑这些引脚上可能存在一些泄漏、但它无法解释为什么它适用于其他应用(basic_ble)。

    这是我的 GPIO 设置

    void Low_Power()
    {
        /************************Disable Peripherals*********************************************************************/
        GPIO_clearInt(CONFIG_GPIO_BUTTON_0_INPUT);
        GPIO_clearInt(CONFIG_GPIO_BUTTON_1_INPUT);
    
        /**********************************************GPIO PIN Enable interrupts *******************************************************/
         GPIO_setConfig(CONFIG_GPIO_BUTTON_0_INPUT, GPIO_CFG_IN_NOPULL | GPIO_CFG_SHUTDOWN_WAKE_LOW);
         GPIO_setConfig(CONFIG_GPIO_BUTTON_1_INPUT, GPIO_CFG_IN_NOPULL | GPIO_CFG_SHUTDOWN_WAKE_LOW);
    
       int_fast16_t  Status = PowerCC23X0_notify(PowerLPF3_ENTERING_SHUTDOWN);
    
       if(Status == Power_SOK)
       {
           //UART2_close(uart);
           //GPIO_write(CONFIG_GPIO_LED_GREEN,1);
           Power_shutdown(0,0);
       }
       else
       {
           //UART2_write(uart,"\nFAIL",5, 0);
           }
    }

    下面是对电流消耗进行分析的过程。

    BR、

    David。