⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
5个帖子/ 0新
最后一篇
Boydy1989.
离线
最后一次露面:1年8个月前
加入:2017-10-18 16:11
深睡眠问题

你好

I have a question around the Deep Sleep implementation on the DA14585/6.

The SDK contains the following function:

静态void put_system_into_deep_sleep(void)
{
#if定义(cfg_ext_int_wakeup_deep_sleep)&&!定义(cfg_por_wakeup_deep_sleep)
// configure button for wake-up interrupt
app_button_enable();
GPIO_SetInactive(GPIO_LED_PORT, GPIO_LED_PIN);
//设置深睡眠 - 外部中断唤醒
ARCH_SET_DEEP_SLEEP(TRUE);

#elif defined (CFG_POR_WAKEUP_DEEP_SLEEP) && !defined (CFG_EXT_INT_WAKEUP_DEEP_SLEEP)
//配置por的按钮
GPIO_EnablePorPin(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN, GPIO_POR_PIN_POLARITY_LOW, GPIO_GetPorTime());

// set deep sleep - POR wake up

ARCH_SET_DEEP_SLEEP(FALSE);

#else
// 没做什么。
// The system will eventually enter the selected Extended sleep state.
//如果将相应的GPIO配置为唤醒中断,则按按钮按下将唤醒系统。
#万一
}

但是文档说明在从深睡眠中恢复时,设备将始终通过全面启动。如果这是正确的,#if编译器指令的变化是什么?cfg_ext_int_wakeup_deep_sleep switch会导致不同的行为吗?

在同一主题上,可以在不刻录OTP的情况下调试深度睡眠唤醒 - 我正在尝试在提交测试设备之前测试我的代码,虽然设备醒来确定它不会恢复广告期待。

I have based this project on the ble_app_peripheral, with extracts also used from ble_app_sleepmode and prox_reporter.

Thanks!

Device:
PM_DIALOG.
离线
最后一次露面:3 days 22 hours ago
职员
加入:2018-02-08 11:03
嗨Boydy1989,

嗨Boydy1989,

#if编译器指令检查cfg_ext_int_wakeup_deep_sleep是否没有定义cfg_por_wakeup_deep_sleep。如果该条件为真,则设备将从外部中断唤醒,否则它将从上电复位(POR)按钮唤醒。通过定义这两个Hashtag定义,您可以选择芯片如何从深度睡眠唤醒,因此定义CFG_EXT_INT_WAKESUP_DEEP_SLEEP将如上所述在您的应用程序中导致不同的行为。为了从深度睡眠中唤醒,您的代码必须在OTP中,以便将其复制到Sysram,并在执行之后进行。根据DA14585 / 586 SDK 6软件平台参考(UM-B-079)用户手册文档,SYSRAM块关闭,没有保留,因此您将无法安装调试器。但是,SDK中有一个选项可以在仿真深度睡眠中的开发模式下运行代码,并且没有关闭SYSRAM。要在开发模式下运行代码,请在da1458x_config_basic.h标题文件中定义CFG_DEVELLE_DEBUG。

谢谢,PM_DIALOG.

Boydy1989.
离线
最后一次露面:1年8个月前
加入:2017-10-18 16:11
谢谢你的

谢谢你的澄清!

Boydy1989.
离线
最后一次露面:1年8个月前
加入:2017-10-18 16:11
我刚刚尝试过这个

我刚刚尝试过这个CFG_Debug开关,我仍然存在问题 - 设备出现在外部中断的情况下重置OK,但它不会按预期开始广告。

我的代码为这些,主要从示例复制。

/**
****************************************************************************************
* @brief处理app_wakeup_msg当设备退出深度睡眠时发送。按按钮触发。
* @return void.
****************************************************************************************
* /
static void app_wakeup_cb(void)
{
if (GetBits16(SYS_STAT_REG, PER_IS_DOWN))
{
periph_init();
}

if (arch_ble_ext_wakeup_get())
{
ARCH_SET_SLEEP_MODE(app_default_sleep_mode);
arch_ble_force_wakeup();
ARCH_BLE_EXT_WAKEUP_OFF();
app_easy_wakeup();
}
//如果状态不空闲,请忽略该消息
if(ke_state_get(task_app)== app_connectable)
{

user_app_adv_start();

}
}

/**
****************************************************************************************
*@brief Button press callback function. Registered in WKUPCT driver.
* @return void.
****************************************************************************************
* /
static void app_button_press_cb(void)
{

if (GetBits16(SYS_STAT_REG, PER_IS_DOWN))
{
periph_init();
app_wakeup_cb();
}

if (arch_ble_ext_wakeup_get())
{
ARCH_SET_SLEEP_MODE(app_default_sleep_mode);
arch_ble_force_wakeup();
ARCH_BLE_EXT_WAKEUP_OFF();
app_easy_wakeup();
}

}

void app_button_enable(void)
{
app_easy_wakeup_set(app_wakeup_cb);
wkupct_register_callback(app_button_press_cb);

wkupct_enable_irq(wkupct_pin_select(gpio_button_port,gpio_button_pin),//选择pin(gpio_button_port,gpio_button_pin)
wkupct_pin_polarity(gpio_button_port,gpio_button_pin,wkupct_pin_polarity_low),//极性低
1,// 1事件
0);// debouncing time = 0
}

你能建议吗?

再次感谢!

PM_DIALOG.
离线
最后一次露面:3 days 22 hours ago
职员
加入:2018-02-08 11:03
Hi Jun-ichi Tobe,

Hi Jun-ichi Tobe,

当DA14585配置处于深度睡眠模式only the wakeup controller or the POR circuit remains switched on depending on the option selected. As mentioned before, the SysRAM blocks off, nothing is retained, so you will not be able to attach the debugger. If you want to wake up from the deep sleep, your code must be in the OTP, in order to be copied into the SysRAM, and after that will be executed. So, you are not able to wake up your device from the deep sleep mode. In DA14585 SDK, there is an option to configure your device in extended sleep mode with OTP copy. In this mode there is an OTP copy if the device boots from OTP and only 32kB (block 4) of the SysRAM remains switched on. So, in order to wake up without booting from OTP, I suggest you configure your device as extended sleep mode or as extended sleep mode with OTP copy. Otherwise, in deep sleep mode, the sysRAM is switched off and you will not be able to wake up. A correction in my previous post is that with the CFG_DEVELOPMENT_DEBUG and with deep sleep configuration, the sysRAM is closed, so you will not able to wake up.

谢谢,PM_DIALOG.