首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有可能使用ULP唤醒ESP-WROOM32 32?考虑替代方案

是否有可能使用ULP唤醒ESP-WROOM32 32?考虑替代方案
EN

Stack Overflow用户
提问于 2022-06-28 18:40:55
回答 1查看 153关注 0票数 1

我买了一些标有ESP 32模块的板。esptool将该版本报告为:

代码语言:javascript
运行
复制
Chip is ESP32D0WDQ6 (revision (unknown 0xa))
Chip ID: 0xbc78e36d10fd

看上去很老。

我编写了几个ULP测试程序,所有的程序都按预期工作,除了唤醒指令,它似乎根本不起作用。我有预感这可能是一个旧的硬件限制,但我不确定。

在调用machine.deepsleep(0)之前,我确保启用了唤醒源:

mem32[ 0x3ff48038 ] = 0x200 << 10

这没什么用。我还尝试从ULP本身启用ULP唤醒:

WRITE_RTC_REG(RTC_CNTL_WAKEUP_STATE_REG, 21, 11, 0x200);

这也没用。四处搜索,似乎这个芯片可能是在ULP唤醒是稳定的之前。基于此,我认为这个模块不支持ULP上的wake,我必须将ULP的输出连接回复位引脚以使主CPU唤醒。这仍然会让我用ULP做一个更复杂的唤醒。我真正想要的是在一个合适的软件崩溃时间之后,或者在一段时间过去之后,在GPIO引脚转换上醒来。用例是一个输入,我想立即报告状态的变化,但是如果没有状态变化,我仍然希望每隔一段时间醒来一次,让接收者知道我还活着。

用引脚接回复位似乎不算太糟糕,但在我这么做之前,有人有更好的主意吗?例如,(在micropython中) machine.deepsleep(1000)工作,默认情况下使用timer 0。让ULP程序一直向后推那个计时器,直到它想要CPU唤醒为止,它会起作用吗?

EN

回答 1

Stack Overflow用户

发布于 2022-06-28 22:30:17

这是我做的。主要问题是在micropython方面--我使用的是v1.19.1,但我所需的更改实际上是在过去5天内完成的。在此更新之前,我认为在我设置ULP标志之后,会有什么东西在RTC_CNTL_WAKEUP_STATE_REG中删除它。我想不出原因;我把源代码追溯到一些ESP-以色列国防军代码,并发表了以下评论:

代码语言:javascript
运行
复制
// TODO: move timer wakeup configuration into a similar function
// once rtc_sleep is opensourced.

不过,使用最新的micropython晚间版,您只需调用:

esp32.wake_on_ulp(True)

一切都如期而至。现在,在ULP中的唤醒指令之后,我得到了设置正确标志的重置:

rst:0x5 (DEEPSLEEP_RESET)

这就提供了许多有趣的、非常低功耗的可能性,甚至在micropython世界中也是如此。

我不确定我能不能解决这个问题,但微生物巨蟒团队为我找到了答案。向他们致敬。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72791643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档