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:在发送 BLE 广播有效载荷并随后在下一个周期之前禁用 BLE 广播后、我们如何减轻我们的应用中观察到的一致纹波?

Guru**** 2589245 points
Other Parts Discussed in Thread: SYSCONFIG, CC2340R5

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1397655/cc2340r5-q1-how-can-we-mitigate-the-consistent-ripples-observed-in-our-application-after-transmitting-ble-advertisement-payloads-and-subsequently-disabling-the-ble-advertisement-until-the-next-cycle

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

工具与软件:

在我们的应用循环中、我们预计每5秒有一个 BLE 广播。 为了节省电力、我们在退出循环之前禁用 BLE 广播并调用 sleep ()函数以在连续的 BLE 广播之间引入延迟。

我们的系统需要具有高功效、我们预计 Sleep ()调用会将 BLE CC2340置于睡眠模式、从而将每个 BLE 通告之间的总体系统电流消耗降低至大约10微安。

但是、我们将观察到每次 BLE 广播传输之间的波纹。 我们不确定缺少什么内容或导致 BLE 控制器进入睡眠模式的原因。

随附的图片说明了我们应用在连续 BLE 广播传输之间的行为。

在系统中观察到的平均电流大约为恒定的166 uA、这会导致我们的电池失去其提供能量的能力。

提供的代码片段简化了广播的启用和禁用以及处理过程。 此外、它还可以利用信标完成广播过程、并确认启用和禁用 BLE 广播的操作在 TI BLE 堆栈内正确执行、从而确保各种系统任务之间的同步。

CC23400R5堆栈是否具有 API、允许 BLE 处理器转换到低功耗模式并在调用这些 API 后立即恢复。

-----------------------------------------------------------------------------------------------------------------------------------------------------
void appEnableBle (char * pData)

bStatus_t 状态;
char* cpyData = pData;
STATUS = Broadcaster_Adv_enable ();
if (成功==状态)

sem_post (_blesem);
}
}


void appDisableBle (char * pData)

bStatus_t 状态;
char* cpyData = pData;
STATUS = Broadcaster_adv_disable ();
if (成功==状态)

sem_post (_blesem);
}
}


开关环路

bleStatus = BLEAppUtil_invokeFunctionNoData (appEnableBle);
if (成功== bleStatus)

/*等待启用广播操作完成*/
sem_wait (_blesem)(&B);
}
/*等待广播完成*/
sem_wait (&bleAdv);

/*禁用广播*/
bleStatus = BLEAppUtil_invokeFunctionNoData (appDisableBle);
if (成功== bleStatus)

/*等待禁用广播操作完成*/
sem_wait (_blesem)(&B);
}
睡眠(5);
末端循环

广播处理程序

void 4.2000 Broadcaster_Adv 处理程序(uint32事件、BLEAppUtil_msgHdr_t *pMsgData)

BLE454.12.Data_t Util_Adv * advData =(BLE307.Data_t*) Util_Adv pMsgData;
静态 uint8_t i=0;
静态 uint8_t j=0;
bStatus_t 状态;
uint8_t debug1 = 0;
uint8_t debug2 = 0;
开关(事件)

案例 BLEAPPUTIL_ADV_START_AFTER_ENABLE:

debug1 = advData->pBuf->advHandle;
休息;
}

案例 BLEAPPUTIL_ADV_END_AFTER_DISABLE:

debug2 = advData->pBuf->advHandle;
休息;
}

案例 BLEAPPUTIL_ADV_END:

if (bleDataAvailable)

对于(I = 0;I < B_ADDR_LEN;I++)

advData1[i + USER_ADV_DATA_OFFSET]= DATA[i];
}
对于(j = 0;j < bleDataLength;j++)

advData1[i + USER_ADV_DATA_OFFSET]= bleDataarr[j];
I++;
}
for (j = i;j < sizeof (advData1);j++)

advData1[j + USER_ADV_DATA_OFFSET]= 0x00;
}
bleDataAvailable = 0;
GapAdv_prepareLoadByHandle (广播 AdvHandle_1、
GAP_ADV_FREE_OPTION_DONT_FREE);
GapAdv_loadByHandle (广播 asterAdvHandle_1、GAP_ADV_DATA_TYPE_ADV、
sizeof (advData1)、advData1);
sem_post (&bleAdv);
}

休息;
}

默认值:

休息;
}
}
}

谢谢  

Ilanchezhian T  

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

    您好!

    我想更好地了解您的应用以及您要做出的一些设计选择。 为什么每次都需要禁用/重新启用广播? 您是否无法将广播间隔设置为5s? 在通告发射之间、如果您的应用代码中不进行任何操作、则软件应自动进入待机状态。 然后、对讲机将在正确的时间唤醒设备、以确保您的广播间隔正确。

    在 SysConfig 中、您的电源策略设置为什么?

    此致!
    Achyut Ray

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

    您好、Achyut Ray、感谢您回答我们的问题。 下面是我对您的询问的回答。

    您是否无法将广播间隔设置为5s?  为什么每次都需要禁用/重新启用广播?

    我们的应用专为实现高功效而设计、使用3V 的600mA 电池供电、该电池可持续使用五年以上。 因此、数据更新的最小占空比设置为每30秒一次。 此外、我们的传感器数据不会快速波动、因此无需像广播数据包那样频繁更新。 频繁广播会影响我们的电池寿命要求、在+8dBm 条件下消耗大约16到20 mA 的峰值电流。 您能不能就我们使用 CC2340 SDK 随附的 API 实现应用用例的任何其他最佳方法提出建议?

    设计决策是考虑在连续两个应用数据间隔(例如30秒)之间禁用广播、预期关闭 BLE 广播将节省电力。

    如果在您的应用代码中不进行任何操作、软件应自动进入待机模式

    我们的 CC2340在30秒窗口期内不会遇到任何外部中断、用于采集和数据传输。 我们通过使用 CC2340 SDK 提供的 SLEEP () API 实现了30秒的延迟。 预计 SLEEP ()函数将使 CC2340 MCU 自动进入待机模式、从而在此期间节省电力。

    在 SysConfig 中、您的电源策略设置为什么?

    SysConfig 中的电源策略设置是什么 PowerCC23X0_standbyPolicy。  

    如果 SLEEP () API 无法在没有外部中断的情况下在非传输时间内自动将 CC2340 MCU 置于待机模式、您可能会想知道是否有替代的 API 可以处理应用的延迟要求、同时还启用低功耗待机模式。

    不是很重要

    Ilanchezhian T  

     

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

    您好、Ilanchezhian、

    感谢您提供更多信息。 我们可以尝试以下操作吗?

    1. 为了验证电能系统配置、您可以闪存 basic_ble 示例( \examples\rtos\LP_EM_CC2340R5\ble5stack\basic_ble)并将广播间隔设置为5秒。 请参考以下指南优化功耗: 优化低功耗蓝牙功耗
    2. 我建议避免禁用/启用广播并使用上一指南第2步中所示的广播间隔。
    3. 如果您要在运行时修改广播参数、请查看以下有关如何执行广播的培训材料: https://dev.ti.com/tirex/explore/node?devtools=LP-EM-CC2340R5&node=A__AWGBpOjezYNvPbjzZTCkqw__SIMPLELINK-ACADEMY-CC23XX__gsUPh5j__LATEST
    4. 您能否确认您是否在使用 TI Launchpad 或这是否为定制电路板?

    BR、

    David。

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

    尊敬的 David:

    1. 您能否确认您是否在使用 TI Launchpad 或这是否为定制电路板?  
      1. 我们目前出于开发目的使用定制板。 但是、在初始固件原型开发中、我们使用了 TI LaunchPad。
    2. 我建议避免禁用/启用广播并使用上一指南第2步中所示的广播间隔
      1. 我们已经尝试增加广播间隔、但我们观察到、每组广播都会发生 BLE 传输。 是否有方法可以确保广播回调仍然在固件中触发、并且堆栈内是否可以针对每个固件回调触发器跳过从 BLE 无线电发送的 BLE 广播数据包?
      2. 请注意、我们在仅 TX 模式下运行 BLE、该模式仅用于广播。
    3. 为了验证电能系统配置、您可以闪存 basic_ble 示例( \examples\rtos\LP_EM_CC2340R5\ble5stack\basic_ble)并将广播间隔设置为5秒
      1. 我将在评估套件中测试该示例并告知您结果。 同时、您能否详细说明堆栈中如何管理广播、如果系统在每个广播间隔内激活、那么传输 BLE 数据包是否不会消耗功率?

    谢谢。此致

    Ilan  

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

    您好、Ilanchezhian、

    谢谢、让我知道它如何与 EV 板一起工作。

    我想问一下、您要在这方面实现什么目标? 是否要根据附加条件跳过在广播间隔之间发送一些数据包?

    是否有方法可以确保固件中仍然触发广播回调?是否可以在堆栈内跳过针对每个固件回调触发器从 BLE 无线电发送 BLE 广播数据包

    我建议查看 此应用手册 (图6-14. 信标事件和表6-2。 Beacon 事件:状态分析)中完成、从中可以从系统的角度了解广播事件期间发生的情况。 此外、我是否可以问您是否只想使用一个通道进行广播("我们观察到每组广播都会发生 BLE 传输"? 您可以配置为使用三个 Adv 通道(37、38、39)之一、而不是全部。

    BR、

    David。