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

你好

我在DA14585 / 6上围绕深度睡眠实现有所了解。

SDK包含以下功能:

静态void put_system_into_deep_sleep(void)
{
#if定义(cfg_ext_int_wakeup_deep_sleep)&&!定义(cfg_por_wakeup_deep_sleep)
//配置唤醒中断的按钮
app_button_enable();
gpio_setinactive(gpio_led_port,gpio_led_pin);
//设置深睡眠 - 外部中断唤醒
ARCH_SET_DEEP_SLEEP(TRUE);

#elif定义(cfg_por_wakeup_deep_sleep)&&!定义(cfg_ext_int_wakeup_deep_sleep)
//配置por的按钮
gpio_enableporpin(gpio_button_port,gpio_button_pin,gpio_por_pin_polarity_low,gpio_getportime());

//设置深睡眠 - 醒来

ARCH_SET_DEEP_SLEEP(FALSE);

#别的
// 没做什么。
//系统最终将输入所选的扩展睡眠状态。
//如果将相应的GPIO配置为唤醒中断,则按按钮按下将唤醒系统。
#万一
}

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

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

我在BLE_APP_PERITELAL上基于此项目,其中还使用BLE_APP_SLEEPMODE和PROX_REPORTER使用的提取物。

谢谢!

设备:
PM_DIALOG.
离线
最后一次露面:15小时53分钟前
职员
加入: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年9个月前
加入:2017-10-18 16:11
谢谢你的

谢谢你的澄清!

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

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

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

/ **
****************************************************************************************
* @brief处理app_wakeup_msg当设备退出深度睡眠时发送。按按钮触发。
* @return void.
****************************************************************************************
* /
静态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按钮按回调函数。在Wkupct驱动程序中注册。
* @return void.
****************************************************************************************
* /
静态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.
离线
最后一次露面:15小时53分钟前
职员
加入:2018-02-08 11:03
嗨jun-ichi tobe,

嗨jun-ichi tobe,

当DA14585配置为在深度休眠模式下仅配置唤醒控制器或POR电路,根据所选选项,仍然接通。如前所述,Sysram块关闭,没有保留任何内容,因此您将无法安装调试器。如果要从深度睡眠唤醒,则代码必须位于OTP中,以便将其复制到SYSRAM中,并在此之后执行。因此,您无法从深度睡眠模式唤醒您的设备。在DA14585 SDK中,可以选择使用OTP副本在扩展睡眠模式下配置设备。在此模式下,如果OTP的设备靴子和SysRAM的仅32KB(框4)保持开启,则存在OTP副本。因此,为了在不从OTP启动的情况下唤醒,我建议您将设备配置为扩展睡眠模式或使用OTP副本的扩展睡眠模式。否则,在深度睡眠模式下,Sysram已关闭,您将无法唤醒。我之前的帖子中的更正是使用CFG_DEVELVELMMENT_DEBUG和深度睡眠配置,SYSRAM已关闭,因此您无法唤醒。

谢谢,PM_DIALOG.