esptool.py 介紹和使用


一: esptool.py 簡介
esptool.py 是樂鑫提供的開源庫工具,用於樂鑫 ESP8285, ESP8266, ESP32, ESP32-S等系列芯片和 ROM Bootloader(即:一級 bootloader)通訊,從而實現:

固件燒錄,flash 擦除,flash 讀取,讀 MAC 地址,讀 flash id ,elf 文件轉 bin 等常用功能;

flash 校驗, 讀取內存,載入 bin 到 RAM 執行,讀內存,寫內存,讀 flash 狀態,寫 flash 狀態,讀 chip id,組裝 bin等高級功能。

esptool.py 原版介紹請參考README.md
esptool.py 串口協議請參考 Serial Protocol
esptool.py 更多資料請參考 esptool.py WiKi

二: 安裝方法
[推薦] 安裝方法一 (功能實時更新)
1. 下載 esptool.py 源碼

git clone https://github.com/espressif/esptool.git
1
2. 目錄導入到全局環境變量
以 ubuntu 為例:

將 export PATH=/home/chenwu/esp/esptool:$PATH 添加到 /etc/profile 文件結尾
執行 source /etc/profile
安裝成功后通過 esptool.py version 查看版本:

esptool.py v3.0-dev
3.0-dev
1
2
注意: esptool.py v3.0 版本后,才對 ESP32-S 系列支持。
如果使用新款芯片,可以通過 git pull 來更新 esptool.py 版本。

安裝方法二:(安裝簡單)
如下 shell 命令任選其一,執行成功即可:
pip install esptool
python -m pip install esptool
pip2 install esptool

三: esptool.py 說明
當前支持命令: load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash_status,write_flash_status,read_flash,verify_flash,erase_flash,erase_region,version,get_security_info
通過 esptool.py -h 查看所有命令和通用參數詳細說明
通過 esptool.py <command> -h 查看每條命令對應的參數詳細說明
通用參數說明 (命令前參數)
-h: 或 --help, 顯示幫助文檔
--chip: 或 -c, 指定芯片,可選 auto,esp8266,esp32,esp32s2
--port: 或 -p, 指定串口
--baud: 或 -b, 指定波特率
--before: 指定 esptool.py 命令執行前預做的,可選 default_reset,no_reset,no_reset_no_sync,具體參考文檔
--after: 或 -a, 指定 esptool.py 命令執行后將做的,可選 hard_reset,soft_reset,no_reset,具體參考文檔
--no-stub: 禁用 Boot Stub, 不讓其管理 flash 操作,具體參考文檔
--trace: 或 -t, 打開 esptool.py 所有交互細節
--override-vddsdio: VDDSDIO 內部電壓調節
--connect-attempts: 指定 esptool.py 嘗試連接次數,默認 7.
四: 常用命令
1. 固件燒錄 - write_flash
命令參數說明:

--erase-all: 或 -e, 在寫固件時,擦除所有 flash 上所有 sector(默認只擦除要寫區域的 sector)
--flash_freq: 或 -ff, 可選 keep,40m,26m,20m,80m, 指定 SPI 速率
--flash_mode:或 -fm, 可選 keep,qio,qout,dio,dout, 指定 SPI 模式
--flash_size:或 -fs. 可選 1MB, 2MB, 4MB, 8MB, 16M + ESP8266 上特有的 256KB, 512KB, 2MB-c1, 4MB-c1。 指定 flash 大小
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 連接配置,具體參考文檔
--no-progress: 或 -p, 禁用進度條打印
--verify: 在 flash 上驗證剛剛寫入的數據
--encrypt: 寫入數據時應用 flash 加密(需要正確的 efuse 設置)
--ignore-flash-encryption-efuse-setting:忽略 flash 加密的 efuse 設置
--compress: 傳輸中壓縮數據(默認 --no-stub 未指定)
--no-compress:傳輸中禁用壓縮數據(默認 --no-stub 已指定)
命令參考用法:
esptool.py write_flash [-h][--erase-all][--flash_freq {keep,40m,26m,20m,80m}][--flash_mode {keep,qio,qout,dio,dout}][--flash_size FLASH_SIZE][--spi-connection SPI_CONNECTION] [--no-progress][--verify] [--encrypt][--ignore-flash-encryption-efuse-setting][--compress | --no-compress]<address> <filename> [<address> <filename> ...]

示例一:自動燒錄
向 flash 的 0x0 地址燒錄 factory.bin 文件

esptool.py write_flash 0x0 factory.bin
1
示例二:指定全參數燒錄
指定芯片 ESP8266, 串口 USB0, flash DIO 模式, 80MHz, flash 為 2MB, 0x0 地址燒錄 bootloader.bin, 0x10000 地址燒錄 sntp.bin, 0x8000 地址燒錄 partitions.bin

esptool.py --chip esp8266 --port /dev/ttyUSB0 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dout --flash_freq 80m --flash_size 2MB 0x0 build/bootloader/bootloader.bin 0x10000 build/sntp.bin 0x8000 build/partitions.bin
1
2. flash 讀取 - read_flash
命令參數說明:

--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 連接配置,具體參考文檔
--no-progress: 或 -p, 禁用進度條打印
命令參考用法:
esptool.py read_flash [-h] [--spi-connection SPI_CONNECTION][--no-progress] address size filename

示例一:自動讀取
讀取從 0x0 地址開始的 4KB 內容,保存到 dump.bin 文件

esptool.py read_flash 0x0 0x1000 dump.bin
1
示例二: 指定參數讀取
指定串口 USB1, 波特率 460800, 從 0x10000 地址讀取 1MB 內容到 dump.bin 文件

esptool.py -p /dev/ttyUSB1 -b 460800 read_flash 0x10000 0x100000 dump.bin
1
3. flash 擦除 - erase_flash & erase region
命令參數說明:

--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 連接配置,具體參考文檔
命令參考用法:
esptool erase_flash [-h] [--spi-connection SPI_CONNECTION]
esptool erase_region [-h] [--spi-connection SPI_CONNECTION] address size

示例一:自動擦除
擦除 flash 上所有內容,即所有數據將是 0xFF

esptool.py erase_flash
1
示例二: 擦除指定區域
擦除從 0x20000 地址開始的 16KB 空間

esptool.py erase_region 0x20000 0x4000
1
4. 讀 MAC 地址 - read_mac
無命令參數

命令參考用法:

esptool.py read_mac
1
通常設備有多個 MAC 地址,例如做 station 的 MAC 地址,做 softAP 時的 MAC 地址,etc
這里讀取的是 MAC 地址是 station 地址

5. 讀 flash id - flash_id
命令參數說明:

--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 連接配置,具體參考文檔
命令參考用法:
esptool.py flash_id [-h] [--spi-connection SPI_CONNECTION]

示例:讀取 flash id

esptool.py flash_id
1
結果將有如下廠商信息和設備信息:

...
Manufacturer: c8
Device: 4016
...
1
2
3
4
可在廠商和設備信息中 具體查看

6. elf 文件轉 bin - elf2image
命令參數說明:

--output: 或 -o, 輸出文件名前綴(image version=1)或文件名(image version=2)
--version: 或 -e, 可選 1,2, 輸出的 image version
--min-rev: 或 -r, 可選 0,1,2,3, 最小芯片修正
--secure-pad: 填充 image,因為一旦簽名,它將以 64KB 的邊界結束。(適用於安全引導v1映像)
--secure-pad-v2: 將 image 填充到 64KB,因為一旦簽名,其簽名扇區將在下一個 64K block開始。(適用於安全引導v2映像)
--elf-sha256-offset:如果已設置,請在二進制文件的指定偏移量處插入輸入ELF文件的 SHA256 哈希(32字節)
--flash_freq: 或 -ff, 可選 keep,40m,26m,20m,80m, 指定 SPI 速率
--flash_mode:或 -fm, 可選 keep,qio,qout,dio,dout, 指定 SPI 模式
--flash_size:或 -fs. 可選 1MB, 2MB, 4MB, 8MB, 16M + ESP8266 上特有的 256KB, 512KB, 2MB-c1, 4MB-c1。 指定 flash 大小
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 連接配置,具體參考文檔
命令參考用法:
esptool elf2image [-h] [--output OUTPUT] [--version {1,2}][--min-rev {0,1,2,3}] [--secure-pad][--secure-pad-v2][--elf-sha256-offset ELF_SHA256_OFFSET][--flash_freq {40m,26m,20m,80m}][--flash_mode {qio,qout,dio,dout}][--flash_size FLASH_SIZE][--spi-connection SPI_CONNECTION] input

示例一:
ESP8266 上將 elf 文件轉為可執行的 bin 文件

esptool.py --chip esp8266 elf2image my_app.elf
1
示例二:
ESP8266 上將 elf 文件轉為可執行的 bin 文件,指定 image version 為 2

esptool.py --chip esp8266 elf2image --version=2 -o my_app-ota.bin my_app.elf
1
示例三:
ESP32 上將 elf 文件轉為可執行的 bin 文件

esptool.py --chip esp32 elf2image my_esp32_app.elf
1
7. 輸出 bin 信息 - image_info
無命令參數

命令參考用法:
esptool image_info [-h] filename

示例一:
ESP8266 上輸出 image 信息

esptool.py image_info build/sntp.bin
1
示例二:
ESP32 上輸出 image 信息

esptool.py --chip esp32 image_info build/sntp.bin
1
五: 高級命令
1. flash 校驗 - verify_flash
詳細說明 參考文檔

命令參數說明:

--diff: 或 -d, 可選 yes,no, 顯示不同
--flash_freq: 或 -ff, 可選 keep,40m,26m,20m,80m, 指定 SPI 速率
--flash_mode:或 -fm, 可選 keep,qio,qout,dio,dout, 指定 SPI 模式
--flash_size:或 -fs. 可選 1MB, 2MB, 4MB, 8MB, 16M + ESP8266 上特有的 256KB, 512KB, 2MB-c1, 4MB-c1。 指定 flash 大小
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 連接配置,具體參考文檔
命令參考用法:
esptool verify_flash [-h] [--diff {no,yes}][--flash_freq {keep,40m,26m,20m,80m}][--flash_mode {keep,qio,qout,dio,dout}][--flash_size FLASH_SIZE][--spi-connection SPI_CONNECTION] addr_filename [addr_filename ...]

示例:
對比 flash 上 0x10000 位置的 bin 和 build/sntp.bin 是否相等

esptool.py verify_flash --diff yes 0x10000 build/sntp.bin
1
2. 讀取內存 - dump_mem
詳細說明 參考文檔

無命令參數

命令參考用法:
esptool.py dump_mem [-h] address size filename

示例:
讀取 ESP8266 上 0x40000000 內存地址開始的 4KB 內容,保存到 iram0.bin

esptool.py dump_mem 0x40000000 4096 iram0.bin
1
3. 載入 bin 到 RAM 執行 - load_ram
詳細說明 參考文檔

無命令參數

命令參考用法:
esptool load_ram [-h] filename

示例:
將 ESP8266 可執行的 image 加載到 ram 中,然后立即執行其中包含的程序

esptool.py --no-stub load_ram ./test/images/helloworld-esp8266.bin
1
4. 讀內存 - read_mem
詳細說明 參考文檔

無命令參數

命令參考用法:
esptool.py read_mem [-h] address

示例:
讀取 ESP8266 上內存地址為 0x400C0000 中的值 (4字節)

esptool.py read_mem 0x400C0000
1
5. 寫內存 - write_mem
詳細說明 參考文檔

無命令參數

命令參考用法:
esptool write_mem [-h] address value mask

示例:
向 0x400C0000 地址寫入 0xabad1dea

esptool.py write_mem 0x400C0000 0xabad1dea 0xFFFFFFFF
1
6. 讀 flash 狀態 - read_flash_status
詳細說明 參考文檔

命令參數說明:

--bytes: 可選 1,2,3, 要讀的字節數
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 連接配置,具體參考文檔
命令參考用法:
esptool read_flash_status [-h] [--spi-connection SPI_CONNECTION][--bytes {1,2,3}]

示例:

esptool.py read_flash_status --bytes 2
1
7. 寫 flash 狀態 - write_flash_status
詳細說明 參考文檔

命令參數說明:

--bytes: 可選 1,2,3, 要讀的字節數
--spi-connection:或 -sc, 指定 ESP32 SPI/HSPI 連接配置,具體參考文檔
--non-volatile: 寫入非易失位
命令參考用法:
esptool write_flash_status [-h] [--spi-connection SPI_CONNECTION][--non-volatile] [--bytes {1,2,3}] value

示例:

esptool.py write_flash_status --bytes 2 --non-volatile 0
1
8.讀 chip id - chip_id
詳細說明 參考文檔

無命令參數

命令參考用法:
esptool chip_id [-h]

示例:

esptool.py chip_id
1
9. 組裝 bin - make_image
詳細說明 參考文檔

命令參數說明:

--segfile: 或 -f, 輸入的 segment 文件
--segaddr: 或 -a, segment 基地址
--entrypoint: 或 -e, 入口地址
命令參考用法:
esptool make_image [-h] [--segfile SEGFILE] [--segaddr SEGADDR][--entrypoint ENTRYPOINT] output

示例:

esptool.py --chip esp8266 make_image -f app.text.bin -a 0x40100000 -f app.data.bin -a 0x3ffe8000 -f app.rodata.bin -a 0x3ffe8c00 app.flash.bin
1
10. 退出 boot, 執行 app - run
詳細說明 參考文檔

無命令參數

命令參考用法:
esptool run [-h]

示例:

esptool.py run
————————————————
版權聲明:本文為CSDN博主「espressif」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/espressif/java/article/details/105028809


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM