|
|
Information
| 说明: |
建议参照本版块置顶帖内容输入必要信息 |
| 芯片型号: |
TL3218 |
| SDK及版本: |
V4.0.4.6 |
请教下,tl_ble_sdk中MCU进入suspend休眠模式,当MCU唤醒后重新启动BLE广播不生效,NRF Connect搜索不到广播。
1、仅启动了BLE peripheral角色;进入suspend休眠会前断开BLE连接、以及停止了BLE 广播。
2、通过api 设置suspend休眠:cpu_sleep_wakeup(SUSPEND_MODE, PM_WAKEUP_PAD | PM_WAKEUP_TIMER, platform_timer_get_first_tick());
3、gpio唤醒后重新启动BLE 广播,但是在NRF Connect搜索不到广播。
4、手动关机(设备上有关机按键),关机后MCU是进入deepsleep retention休眠模式;这时再开机唤醒启动BLE广播是ok的。
5、以下是我工程的休眠配置代码
#define PLATFORM_SLEEP_WAKEUP_TIME TRACKER_SEC_TO_US(3)
void platform_power_management_poll(uint8_t cansleep, uint8_t deepsleep)
{
#if __has_include("tl_common.h")
#if (BLE_APP_PM_ENABLE)
if (tlkapi_debug_isBusy() || !cansleep) {
blc_pm_setSleepMask(PM_SLEEP_DISABLE);
return ;
} else {
if (deepsleep) {
blc_pm_setDeepsleepRetentionEnable(PM_DeepRetn_Enable);
} else {
blc_pm_setDeepsleepRetentionEnable(PM_DeepRetn_Disable);
}
platform_gpio_set_sleep_wakeup();
blc_pm_setSleepMask(PM_SLEEP_LEG_ADV | PM_SLEEP_LEG_SCAN | PM_SLEEP_ACL_PERIPHR | PM_SLEEP_ACL_CENTRAL);
if (!platform_ota_is_working()) {
if (blc_ll_isBleTaskIdle()) {
platform_timer_wakeup_start(PLATFORM_SLEEP_WAKEUP_TIME);
if (deepsleep) {
cpu_sleep_wakeup(DEEPSLEEP_MODE_RET_SRAM_LOW96K, PM_WAKEUP_PAD | PM_WAKEUP_TIMER, platform_timer_get_first_tick());
} else {
cpu_sleep_wakeup(SUSPEND_MODE, PM_WAKEUP_PAD | PM_WAKEUP_TIMER, platform_timer_get_first_tick());
}
} else {
blc_pm_setWakeupSource(PM_WAKEUP_PAD);
}
} else {
bls_pm_setManualLatency(0);
}
}
#endif
#endif
}
|
|