深度睡眠的问题

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
5个职位/ 0个新职位
最后发表
boydy1989
离线
最后看到:1年10个月前
加入:2017-10-18里
深度睡眠的问题

你好

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

SDK包含以下功能:

静态孔隙put_system_into_deep_sleep(空白)

# define (CFG_EXT_INT_WAKEUP_DEEP_SLEEP) && !define (CFG_POR_WAKEUP_DEEP_SLEEP)
//配置唤醒中断的按钮
app_button_enable ();
gpio_setinactive(gpio_led_port,gpio_led_pin);
//设置深度睡眠-外部中断唤醒
arch_set_deep_sleep(真正的);

#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(假);

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

但文档表明,当从深度睡眠中恢复时,设备总是要经历一次全面启动。如果这是正确的,那么# If编译器指令会发生什么变化?CFG_EXT_INT_WAKEUP_DEEP_SLEEP开关会导致不同的行为吗?

在同样的主题上,是否有可能在没有烧录OTP的情况下调试深度睡眠唤醒——我试图在提交到测试设备之前测试我的代码,尽管设备唤醒OK,但它没有像我预期的那样恢复广告。

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

谢谢!

设备:
PM_Dialog
离线
最后看到:2天6小时前
工作人员
加入:2018-02-08 11:03
嗨boydy1989,

嗨boydy1989,

#if编译器指令检查CFG_EXT_INT_WAKEUP_DEEP_SLEEP和CFG_POR_WAKEUP_DEEP_SLEEP是否未定义。如果该条件为真,则设备将从外部中断中唤醒,否则将从Power-on-Reset (POR)按钮唤醒。通过定义这两个标签定义,您可以选择芯片将如何从深度睡眠中唤醒,因此定义CFG_EXT_INT_WAKEUP_DEEP_SLEEP将在您的应用程序中导致前面提到的不同行为。为了从深度睡眠中醒来,您的代码必须在OTP中,以便复制到SysRAM中,然后执行。根据DA14585/586 SDK 6软件平台参考(UM-B-079)用户手册文档,SysRAM被阻塞,没有保留任何东西,所以您将无法附加调试器。但是,SDK中有一个选项可以在开发模式下运行代码,该模式模拟深度睡眠,SysRAM没有关闭。为了在开发模式下运行代码,请在da1458x_config_basic.h头文件中定义CFG_DEVELOPMENT_DEBUG。

谢谢,PM_Dialog

boydy1989
离线
最后看到:1年10个月前
加入:2017-10-18里
谢谢你的帮助。

谢谢你的澄清!

boydy1989
离线
最后看到:1年10个月前
加入:2017-10-18里
我刚刚尝试过

我刚刚尝试了这个CFG_DEBUG开关,但我仍然有一个问题-设备似乎从外部中断复位OK,但它没有像预期的那样开始发布。

我的代码主要是从示例中复制的。

/ **
****************************************************************************************
* @brief处理设备退出深度睡眠时发送的APP_WAKEUP_MSG。按下按钮触发。
* @return无效
****************************************************************************************
*/
静态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();

//如果state不是空闲的,忽略消息
if (ke_state_get(TASK_APP) == APP_CONNECTABLE)

user_app_adv_start ();


/ **
****************************************************************************************
* @brief按钮按回调函数。在Wkupct驱动程序中注册。
* @return无效
****************************************************************************************
*/
静态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();

空白app_button_enable(空白)

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_极性(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN, WKUPCT_PIN_POLARITY_LOW), //极性低
1, // 1事件
0);//恢复时间= 0

你能给点建议吗?

再次感谢!

PM_Dialog
离线
最后看到:2天6小时前
工作人员
加入: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