我有一个带有模块 ESP32-S3-WROOM-1(N16R8) 的定制板。
我的应用程序是电池供电的,同时会在短时间内频繁唤醒。
所以我需要 ESP 在 Deep-Sleep 中停留大部分时间,并将 Run-
time 缩短到最低限度。
目前启动需要96ms,我希望能达到<10ms。
我已经做了以下工作,这有帮助:
1) app_main() 调用
esp_log_level_set("*", ESP_LOG_ERROR); // 将所有组件设置为错误级别
// 以便下次唤醒,不需要启动调试消息
esp_deep_sleep_disable_rom_logging(); // 抑制引导消息
2) 在 Menuconfig 中设置:
Bootloader config --->
Bootloader 优化级别:优化性能 (-O2)
Bootloader 日志详细程度:无输出
[x] 退出深度睡眠时跳过图像验证
组件配置 --->
ESP32S3-Specific --->
支持外部,SPI 连接RAM
SPI RAM 配置 --->
[] 在 SPI RAM 初始化时运行内存测试(即禁用)
3)下面是我尝试过但没有效果的列表:
- 将 CPU 频率从 160 MHz 更改为 240 MHz(它使可能相差 1 毫秒)
- 配置引导 ROM 行为 --->
永久更改引导 ROM 输出:永久禁用日志记录,
不可能,它导致它不断自我重置:
Guru Meditation Error: Core 0 panic'ed (LoadProhibited)。异常未处理。
- 配置串行闪存配置 --->
'idf.py monitor' 波特率(115200 bps) ---> 921600 bps
+ 在 platformio.ini 中也发生了变化:
monitor_speed = 921600
- 配置串行闪存配置 --->
闪存大小: 16 MB
[] 刷新引导加载程序时检测闪存大小(即禁用)
-配置 SPI RAM 配置 --->
[] 在启动期间初始化 SPI RAM(即禁用)
4)我不能做什么:
Flash 必须配置为 DIO,因为在使用 ESP-IDF 4.4.2 时设置 Quad-IO 会导致崩溃。
以前的 4.4.1 配置为 Quad,但我需要 4.4.2,因为它修复了切换到 Deep-Sleep 时的一些重置。
因此,不可能以这种方式加速 Flash。
5) 无论我做什么,它仍然会在从深度睡眠唤醒时打印以下日志消息,它可能会浪费一些时间:
I (32) spi_flash: detected chip: gd
I (33) spi_flash: flash io: dio
I ( 83) sleep: 配置隔离所有处于睡眠状态
I的GPIO引脚 (84) sleep: 启用GPIO睡眠配置I的自动切换
(86) cpu_start: 在PRO CPU上启动调度程序。
还有什么可以缩短启动时间的吗?
有什么可以完全停用所有引导日志消息的吗?