啓動時間優化
啓動時間優化
概述
在使用 ESP8266/ESP32 芯片開發某些對啓動時延比較嚴格的產品來說,優化系統啓動時間將改善產品用戶體驗,通常可以將系統啓動時間優化到幾十毫秒。
例如:智能燈產品,對時延較爲敏感,優化系統啓動時間可以讓用戶無法感知到智能燈重啓。
優化措施
1 減少系統打印
1.1 優化 ESP32 ROM loader 打印
《ESP32 datasheet》2.4 章 Strapping 管腳中描述可通過將管腳 MTDO 拉低來關閉系統啓動過程
中 ROM loader 的打印。
1.2 關閉支持 ANSI 終端顏色
可以通過 menuconfig 進行重新設置:
Component config
—>Log output
—>Use ANSI terminal colors in log output
關閉
1.3 降低 bootloader 的打印等級
默認情況下,bootloader 採用 Info 的打印,可以選擇改爲 Warning,可以通過 menuconfig 進
行重新設置:
Bootloader config
—>Bootloader log verbosity
選擇Warning
1.4 關閉 cpu_start 和 heap_init 中的打印
這兩部分的打印需要手動修改代碼進行關閉,通過以下方法:
esp-idf/components/esp32/cpu_start.c
109 行後 和esp-idf/components/heap/heap_caps_init.c
29 行後添加
#ifdef LOG_LOCAL_LEVEL
#undef LOG_LOCAL_LEVEL
#define LOG_LOCAL_LEVEL ESP_LOG_WARN
#endif
2 SPI Flash 模式和頻率
默認情況下,esp-idf 中使用的 SPI Flash 模式爲 DIO,頻率爲 40MHz,我們可以修改 SPI 模
式爲 QIO,頻率爲 80MHz,來達到 SPI 數據的更快速讀取。但要注意所使用的模組裏 SPI
Flash 可以支持。
可以通過 menuconfig 進行重新設置:
Serial flasher config
—>Flash SPI mode
選擇 QIOSerial flasher config
—>Flash SPI speed
選擇 80MHz
Note: 但需要取決於使用的 SPI Flash 是否能支持
3 修改校驗模式
二級 bootloader 引導用戶應用程序階段,會對用戶程序的加載和校驗,包含對應用的加載和校驗,校驗包含兩種方式:循環冗餘校驗(CRC)
和 sha256
,默認情況下兩種方式均打開。其中的 循環冗餘校驗 的方式我們可以認爲是低等級的校驗方式,sha256 是中等級的校驗,我們當前先不考慮需要對應用進行簽名的情況。
一般情況下,我們可以關閉 sha256 的校驗方式,關閉的話僅會進行基本的 crc8
校驗,但相對來說還是安全的,但當前 esp-idf 並未提供相關配置選項來進行關閉,在此我們通過手動修改的方式關閉 sha256 的校驗方式。通過以下方法:
-
修改
esp-idf/components/esptool_py/esptool/esptool.py
中的self.append_digest = True
爲:
self.append_digest = False
修改後需要刪除工程目錄下的 build
文件夾,然後重新編譯。
Notes:
- 優化後,需重新編譯燒寫固件