esptool trên Windows: sao lưu firmware ESP32 ra file .bin, xóa flash và nạp lại khi bị lỗi

Dùng esptool trên Windows cho ESP32: kiểm tra chip, sao lưu toàn bộ firmware ra file .bin, xóa flash, nạp lại file .bin ở đúng địa chỉ và bảng tra lỗi thường gặp.

Flash Download Tool có giao diện dễ dùng, nhưng khi báo lỗi thì thông báo rất ít, khó biết sai ở đâu. esptool là công cụ dòng lệnh chính thức của Espressif; Arduino IDE cũng dùng chính esptool mỗi lần bấm Upload cho ESP32. Bài này hướng dẫn dùng esptool trên Windows để kiểm tra chip, sao lưu toàn bộ firmware ESP32 ra file .bin, xóa flash, nạp lại file .bin và đối chiếu kết quả, kèm bảng tra lỗi thường gặp.

1. esptool có sẵn trên máy bạn

Nếu đã cài ESP32 vào Arduino IDE, esptool đã nằm sẵn trong thư mục:

%LOCALAPPDATA%\Arduino15\packages\esp32\tools\esptool_py\5.3.0\esptool.exe

Số 5.3.0 là phiên bản esptool đi kèm gói esp32 bản 3.3.10; máy bạn có thể là số khác, mở thư mục esptool_py để xem. Bản 5.x viết lệnh có dấu gạch nối (read-flash, write-flash); bản 4.x đi kèm gói esp32 cũ hơn viết bằng dấu gạch dưới (read_flash, write_flash). Chưa cài Arduino IDE thì có thể tải bản esptool cho Windows trên trang phát hành của Espressif, hoặc cài bằng Python với lệnh pip install esptool.

Mở Command Prompt (gõ cmd ở ô tìm kiếm của Windows), chuyển vào thư mục esptool:

cd /d "%LOCALAPPDATA%\Arduino15\packages\esp32\tools\esptool_py\5.3.0"

Đóng Serial Monitor của Arduino IDE và Flash Download Tool trước khi chạy esptool, vì một cổng COM chỉ một phần mềm mở được.

2. Bên trong bộ nhớ flash 4 MB của ESP32

Bản đồ flash 4 MB của ESP32 theo bảng phân vùng mặc định của Arduino: bootloader 0x1000, bảng phân vùng 0x8000, nvs 0x9000, otadata 0xE000, app0 0x10000, app1 0x150000, spiffs 0x290000, coredump 0x3F0000, kèm vùng tác động của read-flash, erase-flash, write-flash
Các vùng trong flash 4 MB và vùng mà mỗi lệnh tác động (hình minh họa).

Mạch ESP32 DevKit V1 có bộ nhớ flash 4 MB, chia thành các vùng theo bảng phân vùng. Với bảng mặc định của Arduino ESP32: bootloader ở 0x1000, bảng phân vùng ở 0x8000, vùng nvs ở 0x9000 lưu cấu hình Wi-Fi và dữ liệu của thư viện Preferences, chương trình chính ở 0x10000, vùng spiffs ở 0x290000 chứa file của SPIFFS hoặc LittleFS. Biết bản đồ này sẽ hiểu vì sao nạp đè một file có thể làm mất cấu hình Wi-Fi, còn nạp file khác thì không.

3. Năm bước làm việc với flash

Năm bước dùng esptool: kiểm tra bằng flash-id, sao lưu bằng read-flash, xóa bằng erase-flash, nạp bằng write-flash, đối chiếu bằng verify-flash
Luôn sao lưu trước khi xóa hoặc nạp đè (hình minh họa).

Các lệnh dưới đây dùng cổng COM5 và thư mục D:\esp32 làm ví dụ; thay bằng cổng COM và thư mục trên máy bạn.

Bước 1. Kiểm tra kết nối và đọc thông tin chip, dung lượng flash:

esptool --port COM5 flash-id

Kết quả in ra loại chip, địa chỉ MAC và dòng Detected flash size (mạch DevKit V1 là 4MB). Báo Failed to connect thì giữ nút BOOT trên mạch trong lúc chạy lệnh, kiểm tra cáp và cổng COM như bài ESP32 không nhận cổng COM, lỗi Failed to connect.

Bước 2. Sao lưu toàn bộ flash ra một file:

esptool --port COM5 --baud 921600 read-flash 0 0x400000 D:\esp32\sao_luu.bin

0x400000 là 4 MB; mạch có flash 8 MB thì thay bằng 0x800000. Đọc 4 MB mất vài phút. File sao lưu chứa cả vùng nvs, nên có thể chứa tên và mật khẩu Wi-Fi mà chương trình đã lưu: giữ file ở nơi an toàn. Chỉ sao lưu firmware của chính bạn.

Bước 3. Xóa flash (chỉ khi cần):

esptool --port COM5 erase-flash

Lệnh đưa toàn bộ 4 MB về trạng thái trống. Dùng khi firmware lỗi làm mạch khởi động lại liên tục, khi đổi bảng phân vùng, khi chuyển từ MicroPython về Arduino. Sau khi xóa, cấu hình Wi-Fi và file trong SPIFFS, LittleFS đều mất.

Bước 4. Nạp lại. Có ba trường hợp:

  • Nạp lại bản sao lưu: esptool --port COM5 --baud 921600 write-flash 0x0 D:\esp32\sao_luu.bin
  • Nạp file gộp do Arduino IDE xuất (Sketch > Export Compiled Binary, file tên ten-sketch.ino.merged.bin): esptool --port COM5 --baud 921600 write-flash 0x0 ten-sketch.ino.merged.bin. Với gói esp32 3.3.10, file gộp dài đúng 4 MB nên ghi đè cả vùng nvs và spiffs.
  • Chỉ thay chương trình, giữ nguyên cấu hình Wi-Fi và dữ liệu: esptool --port COM5 --baud 921600 write-flash 0x10000 ten-sketch.ino.bin

Nạp đủ các file rời giống Arduino IDE thì dùng bốn cặp địa chỉ, file: 0x1000 ten-sketch.ino.bootloader.bin, 0x8000 ten-sketch.ino.partitions.bin, 0xe000 boot_app0.bin (nằm trong thư mục tools\partitions của gói esp32), 0x10000 ten-sketch.ino.bin. Đây cũng là các địa chỉ dùng trong bài nạp file .bin vào ESP32 bằng Flash Download Tool.

Bước 5. Đối chiếu flash với file vừa nạp:

esptool --port COM5 verify-flash 0x0 D:\esp32\sao_luu.bin

Cửa sổ Command Prompt với các lệnh esptool theo thứ tự: chuyển thư mục, flash-id, read-flash, erase-flash, write-flash, verify-flash
Các lệnh theo thứ tự trong Command Prompt (hình minh họa).

4. Bảng tra lỗi khi dùng esptool

Thông báo có chứaNguyên nhân hay gặpCách sửa
Failed to connectMạch không vào chế độ nạp, cáp chỉ sạc, sai cổng COMGiữ nút BOOT khi chạy lệnh, đổi cáp, kiểm tra cổng COM
could not open port, Access is denied, PermissionErrorCổng COM đang bị Serial Monitor, Flash Download Tool giữĐóng các phần mềm đó rồi chạy lại
Đứt kết nối giữa chừng, lỗi đọc ghi khi dùng 921600Cáp dài, cáp kém, cổng USB qua hubGiảm --baud 460800 hoặc 115200, cáp ngắn, cắm thẳng vào máy
will not fitFile lớn hơn flash hoặc đặt sai địa chỉKiểm tra dung lượng flash, địa chỉ nạp
Nạp xong, Serial Monitor báo invalid header: 0xffffffff và khởi động lại liên tụcThiếu bootloader hoặc bảng phân vùng sau khi xóa flashNạp file gộp ở 0x0, hoặc đủ bốn file rời
Nạp xong mất cấu hình Wi-FiĐã xóa flash hoặc nạp file gộp 4 MBChỉ nạp file .ino.bin ở 0x10000 khi muốn giữ cấu hình

5. Xem thêm

Cần hỗ trợ khi nạp firmware cho ESP32, liên hệ PYWORLD qua số 0915703319.


Tin tức liên quan

Vali đựng thiết bị đo lường: chọn vali và xếp xốp cho đồng hồ vạn năng, ampe kìm
Vali đựng thiết bị đo lường: chọn vali và xếp xốp cho đồng hồ vạn năng, ampe kìm

Chọn vali đựng thiết bị đo lường: loại vali theo nơi làm việc, cỡ vali cho bộ đồng hồ vạn năng, ampe kìm, que đo, cách xếp xốp để máy và que đo không đè nhau, vali cho cả đội.

Cảm biến chuyển vị: biến trở, LVDT, điện dung, dòng xoáy, laser – cấu tạo, nguyên lý và chế tạo
Cảm biến chuyển vị: biến trở, LVDT, điện dung, dòng xoáy, laser – cấu tạo, nguyên lý và chế tạo

Cảm biến chuyển vị hoạt động thế nào: biến trở thẳng, LVDT, điện dung, dòng điện xoáy, laser tam giác lượng, từ giảo, cách chế tạo và đo vị trí, vận tốc bằng thước điện trở với ESP32.

Cách đọc giấy chứng nhận hiệu chuẩn: sai số, độ không đảm bảo, số hiệu chính và điểm cần kiểm tra
Cách đọc giấy chứng nhận hiệu chuẩn: sai số, độ không đảm bảo, số hiệu chính và điểm cần kiểm tra

Cách đọc giấy chứng nhận hiệu chuẩn: các phần bắt buộc theo ISO/IEC 17025, bảng sai số chiều tăng giảm, độ không đảm bảo và hệ số phủ k, áp dụng số hiệu chính và lỗi hay gặp.

Gá lắp gia tốc kế theo ISO 5348: tần số cộng hưởng, dải tần dùng được và các sai số khi đo rung
Gá lắp gia tốc kế theo ISO 5348: tần số cộng hưởng, dải tần dùng được và các sai số khi đo rung

Cách gá gia tốc kế theo ISO 5348: vít cấy, keo, sáp, nam châm, đầu dò cầm tay; tần số cộng hưởng lắp đặt, dải tần dùng được, ảnh hưởng khối lượng cảm biến và các điểm kỹ thuật khi gắn.

Góc STEM tại nhà và câu lạc bộ STEM: dụng cụ, an toàn, kế hoạch 8 buổi, ngày hội STEM
Góc STEM tại nhà và câu lạc bộ STEM: dụng cụ, an toàn, kế hoạch 8 buổi, ngày hội STEM

Cẩm nang cho phụ huynh và giáo viên: bố trí góc STEM tại nhà, dụng cụ theo độ tuổi, quy tắc an toàn, kế hoạch 8 buổi cho câu lạc bộ STEM và cách tổ chức ngày hội STEM ở trường.

RF 433 MHz là gì: điều chế ASK/OOK và tự viết giao thức phát, thu bằng ESP32
RF 433 MHz là gì: điều chế ASK/OOK và tự viết giao thức phát, thu bằng ESP32

Giải thích sóng RF 433 MHz và điều chế ASK/OOK, cách mã hóa bit bằng độ rộng xung và khung tin 24 bit. Hướng dẫn tự viết chương trình phát và thu trên hai mạch ESP32, không dùng thư viện ngoài.

Biến trở, quang trở và nhiệt điện trở NTC: cách dùng và đọc bằng ESP32
Biến trở, quang trở và nhiệt điện trở NTC: cách dùng và đọc bằng ESP32

Cấu tạo và cách mắc biến trở, biến trở B10K và A10K, quang trở LDR, nhiệt điện trở NTC, PTC, phương trình B, thí nghiệm đọc biến trở, LDR, NTC bằng ADC của ESP32 và chỉnh độ sáng LED.

Chọn bo mạch lập trình đầu tiên cho học sinh: ESP32, Arduino Nano hay micro:bit
Chọn bo mạch lập trình đầu tiên cho học sinh: ESP32, Arduino Nano hay micro:bit

So sánh ESP32 DevKit V1, Arduino Nano và micro:bit cho học sinh: có sẵn gì trên mạch, lập trình bằng gì, làm được dự án gì, chọn theo mục tiêu và những thứ cần mua kèm.


Bình luận
Đã thêm vào giỏ hàng