ESP32 學習筆記(二十七) ESP32 的啓動過程 [轉]

ESP32 的啓動過程

原文來自:https://www.esp32.com/viewtopic.php?f=25&t=8030&p=33812#p33812

[關於 ROM]

在 esp32 上電運行後,芯片運行的第一個程序。這段程序是芯片設計與生產的時候,固化在硬件電路中的。所以它是不可修改的(Read Only Memory)。
esp32 的 ROM 負責檢測芯片的strapping配置,來決定芯片應該處於什麼狀態。比如,esp32 上電後,ROM 程序會檢查 [GPIO0, GPIO2, GPIO4, MTDO, GPIO5]的狀態。
如果 GPIO0 / GPIO2 同時爲低電平,則會進入下載模式,等待串口通信信息。
如果GPIO0爲高電平,則會進入Flash 運行模式,啓動SPI 驅動,並加載Flash中的程序段。

BOOT_MODE[5:0]:
(pull-up, pull-down, pull-down, pull-up, pull-up, SW4 /5/4/3/2/1/ )
[GPIO0, GPIO2, GPIO4, MTDO, GPIO5]
1 x x x x --> SPI Boot
0 0 x x x --> Download Boot (Jonit-Detection of UART0+UART1+SDIO_Slave)

下載模式的串口輸出如下(115200), ROM默認會輸出當前所處的模式。

rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2))
waiting for download

其中,boot:0x3 表示的是芯片strapping pin腳的狀態,
0x03對應 [GPIO0, GPIO2, GPIO4, MTDO, GPIO5] 的值爲 [ 0, 0, 0, 1, 1]
所以處於 Download Boot 模式。

[關於下載模式]

當 esp32 處於下載模式時,會等待串口通信同步,並按照通信協議等待接收指令(協議可參考該文檔:Serial-Protocol
通過esptool腳本,可以進行寄存器的讀寫,固件下載,程序運行等操作。

[關於STUB]

在 ROM 模式,由於芯片處於低頻工作的狀態,通信速率受限。
在 esptool 中,會將一段小程序加載到 esp32 的 RAM 中,並跳轉執行 RAM 中的小程序。這段小程序包含了 ROM 中相同的串口通信協議,並對其進行了擴充。感興趣的開發者,(可以參考這裏 flasher_stub)

[關於 Flash Boot 模式]

如果芯片啓動時,GPIO0 爲高電平,芯片會進入 Flash 運行模式。 此時,啓動 SPI 驅動,並加載 Flash 中的程序段。ROM 會讀取外置 Flash 的 0x1000 地址,加載並運行二級 bootloader。

[關於 Bootloader]

bootloader 可以認爲是一個獨立的小程序,bootloader 會對芯片頻率進行初始化,並且讀取系統 SPI 的配置信息,對 Flash 運行模式以及頻率進行配置,然後根據分區表的定義,從對應的地址加載應用程序,並且運行應用程序固件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章