新聞中心

ESP32的啟動(dòng)過程詳解

作者: 時(shí)間:2023-12-13 來源:自由坦蕩的湖泊AI 收藏

 是一種基于 ARM Cortex-M 處理器的 32 位微控制器,集成了 2.4GHz Wi-Fi 和藍(lán)牙雙模功能。 的啟動(dòng)過程可以分為以下三個(gè)階段:

本文引用地址:http://www.butianyuan.cn/article/202312/453851.htm
  • 一級(jí)引導(dǎo)程序:當(dāng) 上電或復(fù)位后,PRO CPU 會(huì)立即開始運(yùn)行,執(zhí)行復(fù)位向量代碼,而 APP CPU 仍然保持復(fù)位狀態(tài)。 復(fù)位向量代碼會(huì)檢查 GPIO_STRAP_REG 寄存器的值,確定 ESP32 的啟動(dòng)模式,如 UART 下載模式、自定義啟動(dòng)模式等。如果是正常啟動(dòng)模式,程序會(huì)配置 SPI flash,然后嘗試從 flash 的 0x1000 偏移地址處加載二級(jí)引導(dǎo)程序的二進(jìn)制鏡像。 程序會(huì)校驗(yàn)鏡像的校驗(yàn)和,如果正確,就會(huì)跳轉(zhuǎn)到鏡像的入口點(diǎn)運(yùn)行。

  • 二級(jí)引導(dǎo)程序:二級(jí)引導(dǎo)程序的源碼可以在 ESP-IDF 的 components/bootloader 目錄下找到。 二級(jí)引導(dǎo)程序會(huì)從 flash 的 0x8000 偏移地址處讀取分區(qū)表,分區(qū)表包含了 flash 上不同分區(qū)的類型、偏移地址、大小等信息。 二級(jí)引導(dǎo)程序會(huì)尋找工廠分區(qū)和 OTA 應(yīng)用程序分區(qū),如果存在 OTA 應(yīng)用程序分區(qū),還會(huì)查詢 otadata 分區(qū),以確定應(yīng)該引導(dǎo)哪個(gè)分區(qū)。 對(duì)于選定的分區(qū),二級(jí)引導(dǎo)程序會(huì)從 flash 中逐段讀取應(yīng)用程序鏡像,對(duì)于需要加載到 RAM 中的段,會(huì)將數(shù)據(jù)從 flash 復(fù)制到它們的加載地址處,對(duì)于需要從 flash 中運(yùn)行的段,會(huì)通過配置 flash MMU,提供正確的映射。 一旦處理完所有段,二級(jí)引導(dǎo)程序會(huì)驗(yàn)證應(yīng)用程序的完整性,如果使用了安全啟動(dòng)或 flash 加密功能,還會(huì)進(jìn)行相應(yīng)的驗(yàn)證和解密。最后,二級(jí)引導(dǎo)程序會(huì)跳轉(zhuǎn)到應(yīng)用程序鏡像的入口點(diǎn)運(yùn)行。

  • 應(yīng)用程序啟動(dòng):應(yīng)用程序啟動(dòng)包含了從應(yīng)用程序開始執(zhí)行到 app_main 函數(shù)在主任務(wù)內(nèi)部運(yùn)行前的所有過程。 應(yīng)用程序啟動(dòng)可以分為三個(gè)子階段:端口初始化:這個(gè)階段會(huì)初始化基本的 C 運(yùn)行環(huán)境,配置 CPU 異常,初始化內(nèi)部存儲(chǔ)器,設(shè)置 CPU 時(shí)鐘,如果配置了 PSRAM,還會(huì)使能 PSRAM。如果應(yīng)用程序被配置為在多個(gè)內(nèi)核上運(yùn)行,還會(huì)啟動(dòng)另一個(gè)內(nèi)核并等待其初始化。系統(tǒng)初始化:這個(gè)階段會(huì)初始化軟件服務(wù)和 FreeRTOS,包括堆棧、中斷、任務(wù)、定時(shí)器、事件組、隊(duì)列、信號(hào)量等。 還會(huì)初始化一些系統(tǒng)組件,如 NVS、SPI flash、日志、應(yīng)用程序跟蹤等。主任務(wù)運(yùn)行:這個(gè)階段會(huì)創(chuàng)建一個(gè)主任務(wù),并在其中調(diào)用 app_main 函數(shù),這是應(yīng)用程序的入口函數(shù),用戶可以在這里編寫自己的代碼,實(shí)現(xiàn)各種功能和服務(wù)。




關(guān)鍵詞: ESP32 MCU 無(wú)線通信

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉