ESP32的啟動(dòng)過(guò)程詳解
ESP32 是一種基于 ARM Cortex-M 處理器的 32 位微控制器,集成了 2.4GHz Wi-Fi 和藍牙雙模功能。 ESP32 的啟動(dòng)過(guò)程可以分為以下三個(gè)階段:
本文引用地址:http://dyxdggzs.com/article/202312/453851.htm一級引導程序:當 ESP32 上電或復位后,PRO CPU 會(huì )立即開(kāi)始運行,執行復位向量代碼,而 APP CPU 仍然保持復位狀態(tài)。 復位向量代碼會(huì )檢查 GPIO_STRAP_REG 寄存器的值,確定 ESP32 的啟動(dòng)模式,如 UART 下載模式、自定義啟動(dòng)模式等。如果是正常啟動(dòng)模式,程序會(huì )配置 SPI flash,然后嘗試從 flash 的 0x1000 偏移地址處加載二級引導程序的二進(jìn)制鏡像。 程序會(huì )校驗鏡像的校驗和,如果正確,就會(huì )跳轉到鏡像的入口點(diǎn)運行。
二級引導程序:二級引導程序的源碼可以在 ESP-IDF 的 components/bootloader 目錄下找到。 二級引導程序會(huì )從 flash 的 0x8000 偏移地址處讀取分區表,分區表包含了 flash 上不同分區的類(lèi)型、偏移地址、大小等信息。 二級引導程序會(huì )尋找工廠(chǎng)分區和 OTA 應用程序分區,如果存在 OTA 應用程序分區,還會(huì )查詢(xún) otadata 分區,以確定應該引導哪個(gè)分區。 對于選定的分區,二級引導程序會(huì )從 flash 中逐段讀取應用程序鏡像,對于需要加載到 RAM 中的段,會(huì )將數據從 flash 復制到它們的加載地址處,對于需要從 flash 中運行的段,會(huì )通過(guò)配置 flash MMU,提供正確的映射。 一旦處理完所有段,二級引導程序會(huì )驗證應用程序的完整性,如果使用了安全啟動(dòng)或 flash 加密功能,還會(huì )進(jìn)行相應的驗證和解密。最后,二級引導程序會(huì )跳轉到應用程序鏡像的入口點(diǎn)運行。
應用程序啟動(dòng):應用程序啟動(dòng)包含了從應用程序開(kāi)始執行到 app_main 函數在主任務(wù)內部運行前的所有過(guò)程。 應用程序啟動(dòng)可以分為三個(gè)子階段:端口初始化:這個(gè)階段會(huì )初始化基本的 C 運行環(huán)境,配置 CPU 異常,初始化內部存儲器,設置 CPU 時(shí)鐘,如果配置了 PSRAM,還會(huì )使能 PSRAM。如果應用程序被配置為在多個(gè)內核上運行,還會(huì )啟動(dòng)另一個(gè)內核并等待其初始化。系統初始化:這個(gè)階段會(huì )初始化軟件服務(wù)和 FreeRTOS,包括堆棧、中斷、任務(wù)、定時(shí)器、事件組、隊列、信號量等。 還會(huì )初始化一些系統組件,如 NVS、SPI flash、日志、應用程序跟蹤等。主任務(wù)運行:這個(gè)階段會(huì )創(chuàng )建一個(gè)主任務(wù),并在其中調用 app_main 函數,這是應用程序的入口函數,用戶(hù)可以在這里編寫(xiě)自己的代碼,實(shí)現各種功能和服務(wù)。
評論