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.

[参考译文] RTOS/BOOSTXL-CC2650MA:CC2650MODA 未进入待机状态

Guru**** 2583245 points
Other Parts Discussed in Thread: CC2650, BLE-STACK

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/606286/rtos-boostxl-cc2650ma-cc2650moda-does-not-entering-standby

器件型号:BOOSTXL-CC2650MA
Thread 中讨论的其他器件:CC2650BLE-STACK

工具/软件:TI-RTOS

您好!

我正在处理一个定制 BLE 项目。 因此、我修改了 TI 多角色项目。
我想测量器件是否进入待机模式。 我查看了示例 C:\ti_tirtos_cc13xx_cc26xx_2_20_01_08\examples\TI\CC2650_LAUNCHXL_pinStandby
为了让我理解、如果我在应用程序任务中调用 Task_sleepMS*(1000/Clock_tickPeriod)、RTOS 会将器件置于睡眠状态。
我已经运行示例 pinStandby 并在调用 Task_sleep 后测量1uA 的电流。 因此一切都正常、CC2650进入待机模式。

如果我现在在自定义应用程序中尝试相同的调用、则器件不会进入睡眠状态。
调用后、我测量150uA 的电流。
我认为与 pinStandby 示例的区别在于、在我的应用中、有几个任务正在运行。 (请参阅 main 中的任务初始化)

int main()
{

//注册应用程序回调到堆栈中发出的 TRAP 断言*/
RegisterAssertCback (AssertHandler);
PIN_Status 引脚状态;

PinState = PIN_init (initTable_pui32);

#if !defined (power_saving)
/*设置待机、断电和空闲模式的约束*/
// PowerCC26XX_SB_disallow 可能是冗余
Power_setConstraint (Power_setConstraint)(Power_setConstraint);
Power_setConstraint (Power_IDLE_IDLE_*
/ IDLE_Idle*);Power_Init




(Power_Idle*/iCall 任务#init/iCall */ IDLE_Idle*;Power_Idle_Idle*


/*退出配置文件-优先级3 */
GAPRole_createTask();

/*退出应用程序-优先级1 */
App_CreateTask_V();
//启用中断并启动 SYS/BIOS */
BIOS_start();




返回0;
} 

我只在应用程序任务中调用 Task_sleep 函数(这也是我从多角色示例中重命名和修改的唯一任务)。 我还会在调用 Task_sleep 函数之前断开所有连接。 是否需要任何其他命令才能进入睡眠模式?

power_saving 定义为预定义符号

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

    看起来您使用的是 BLE-Stack 示例应用。 在这种情况下(基于外设)、很可能会进行广播、这就是观察更高电流消耗的原因。 此外、请确保您使用的 PIN 配置与引脚待机示例中使用的配置相同。

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

    您好!

    为了检查原因是否是 PIN 配置、我已使用与自定义应用程序相同的 PIN 配置来配置 pinStandby 示例。 pinStandby 示例的电流消耗相同(待机模式下为1uA)。 因此、我认为引脚配置不是电流消耗较高的原因。
    是的、这是 TI 样片应用(多角色)。 此项目同时配置为中央和外设。 起初、我们认为我们需要两者(中央和外设)。
    现在目标已经改变,我们不需要外设。 我在初始化(广播等)时停用了所有外设部件。  
    我已使用 BLE Scanner 检查设备是否仍在广播。 您是对的、器件会一直广播。 我删除了所有 外设部件(广播等)

    如果我错过了仍然启用广播的内容、您能否查看初始化?

    //设置间隙
    {
    
    /*------------ 中区--- *
    //设置扫描持续时间
    GAP_SetParamValue (TGAP_GEN_DISC_SCAN、P_DEFAULT_SCAN_DURATION);
    //扫描间隔和窗口对于所有方案都是相同的
    GAP_SetParamValue (TGAP_CONN_SCAN_INT、P_DEFAULT_SCAN_INT);
    GAP_SetParamValue (TGAP_CONN_SCAN_WIND、P_DEFAULT_SCAN_WIND);
    GAP_SetParamValue (TGAP_CONN_HIGH_SCAN_INT、P_DEFAULT_SCAN_INT);
    GAP_SetParamValue (TGAP_CONN_HIGH_SCAN_WIND、P_DEFAULT_SCAN_WIND);
    GAP_SetParamValue (TGAP_GEN_DISC_SCAN_INT、P_DEFAULT_SCAN_INT);
    GAP_SetParamValue (TGAP_GEN_DISC_SCAN_WIND、P_DEFAULT_SCAN_WIND);
    GAP_SetParamValue (TGAP_LIM_DISC_SCAN_INT、P_DEFAULT_SCAN_INT);
    GAP_SetParamValue (TGAP_LIM_DISC_SCAN_WIND、P_DEFAULT_SCAN_WIND);
    GAP_SetParamValue (TGAP_CONN_EST_SCAN_INT、P_DEFAULT_SCAN_INT);
    GAP_SetParamValue (TGAP_CONN_EST_SCAN_WIND、P_DEFAULT_SCAN_WIND);
    //设置连接参数
    GAP_SetParamValue (TGAP_CONN_EST_INT_MIN、P_DEFAULT_CONN_INT);
    GAP_SetParamValue (TGAP_CONN_EST_INT_MAX、P_DEFAULT_CONN_INT);
    GAP_SetParamValue (TGAP_CONN_EST_Superv_TIMEOUT、P_DEFAULT_CONN_TIMEOUT);
    GAP_SetParamValue (TGAP_CONN_EST_Latency、P_DEFAULT_CONN_Latency);
    
    //注册以接收 GAP 和 HCI 消息
    GAP_RegisterForMsgs (iCallId_ui8);
    }
    
    //设置间隙
    {
    /*------------ 中区--- *
    //设置扫描持续时间
    GAP_SetParamValue (TGAP_GEN_DISC_SCAN、P_DEFAULT_SCAN_DURATION);
    //扫描间隔和窗口对于所有方案都是相同的
    GAP_SetParamValue (TGAP_CONN_SCAN_INT、P_DEFAULT_SCAN_INT);
    GAP_SetParamValue (TGAP_CONN_SCAN_WIND、P_DEFAULT_SCAN_WIND);
    GAP_SetParamValue (TGAP_CONN_HIGH_SCAN_INT、P_DEFAULT_SCAN_INT);
    GAP_SetParamValue (TGAP_CONN_HIGH_SCAN_WIND、P_DEFAULT_SCAN_WIND);
    GAP_SetParamValue (TGAP_GEN_DISC_SCAN_INT、P_DEFAULT_SCAN_INT);
    GAP_SetParamValue (TGAP_GEN_DISC_SCAN_WIND、P_DEFAULT_SCAN_WIND);
    GAP_SetParamValue (TGAP_LIM_DISC_SCAN_INT、P_DEFAULT_SCAN_INT);
    GAP_SetParamValue (TGAP_LIM_DISC_SCAN_WIND、P_DEFAULT_SCAN_WIND);
    GAP_SetParamValue (TGAP_CONN_EST_SCAN_INT、P_DEFAULT_SCAN_INT);
    GAP_SetParamValue (TGAP_CONN_EST_SCAN_WIND、P_DEFAULT_SCAN_WIND);
    //设置连接参数
    GAP_SetParamValue (TGAP_CONN_EST_INT_MIN、P_DEFAULT_CONN_INT);
    GAP_SetParamValue (TGAP_CONN_EST_INT_MAX、P_DEFAULT_CONN_INT);
    GAP_SetParamValue (TGAP_CONN_EST_Superv_TIMEOUT、P_DEFAULT_CONN_TIMEOUT);
    GAP_SetParamValue (TGAP_CONN_EST_Latency、P_DEFAULT_CONN_Latency);
    
    //注册以接收 GAP 和 HCI 消息
    GAP_RegisterForMsgs (iCallId_ui8);
    }
    
    /*---------- 中央---------- *
    uint8_t scanRes = P_DEFAULT_MAX_SCAN_RES;
    //设置扫描响应的最大数量
    GAPRole_SetParameter (GAPROLE_MAX_SCAN_RES、sizeof (uint8_t)、
    scanRes、NULL);
    //启动 GAPRole 并协商最大连接数
    void GAPRole_StartDevice (&multi_role_gapRoleCBs、&maxNumBleConns);
    
    //为连接句柄映射的索引分配内存
    if (connHandleMap = iCall_malloc (sizeof (uint16_t)* maxNumBleConns))
    {
    //将索引初始化到连接句柄映射到0
    对于(uint8_t I = 0;I < maxNumBleConns;I++)
    {
    connHandleMap[i]= INVALID_CONNNANDLE;
    }
    }
    
    //为每个连接发现信息分配内存
    if (discInfo = iCall_malloc (sizeof (discInfo_t)* maxNumBleConns))
    {
    //将索引初始化到连接句柄映射到0
    对于(uint8_t I = 0;I < maxNumBleConns;I++)
    {
    discInfo[i].charHdl = 0;
    discInfo[i].discState = BLE_DISC_State_Idle;
    discInfo[i].svcEndHdl = 0;
    discInfo[i]。svcStartHdl = 0;
    }
    }
    
    {
    /*---------- 客户----------- *
    //初始化 GATT 客户端
    void GATT_InitClient();
    
    //注册 GATT 本地事件和 ATT 响应等待发送
    GATT_RegisterForMsgs (iCallId_ui8);
    
    //注册以接收传入的 ATT 指示/通知
    GATT_RegisterForInd (iCallId_ui8);
    }
    
    //设置 GAP 绑定管理器
    {
    uint8_t pairMode = GAPBOND_Pairing_mode_no_pairing;
    uint8_t MIPTM = true;
    uint8_t ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;
    uint8_t 绑定= true;
    
    //设置配对模式
    GAPBondMgr_SetParameter (GAPBOND_Pairing_mode、sizeof (uint8_t)、&pairMode);
    //设置身份验证要求
    GAPBondMgr_SetParameter (GAPBOND_MITM_protection、sizeof (uint8_t)、&MIPTM);
    //设置 I/O 功能
    GAPBondMgr_SetParameter (GAPBOND_IO_Capabilities、sizeof (uint8_t)、&ioCap);
    //设置绑定要求
    GAPBondMgr_SetParameter (GAPBOND_BUSIONIND_ENABLED、sizeof (uint8_t)、&bonding);
    
    //注册并启动 Bond Manager
    void GAPBondMgr_Register (&multi_role_BondMgrCBs);