Hướng dẫn nạp file .bin vào ESP32 bằng Flash Download Tool
Hướng dẫn lấy đúng file và offset theo từng ESP32, nạp bằng Flash Download Tool, xử lý lỗi boot và xóa flash an toàn.
Bài viết này hướng dẫn lấy bộ file firmware do Arduino IDE tạo ra và nạp vào ESP32 bằng Espressif Flash Download Tool. Phần quan trọng nhất là chọn đúng chip, đúng cấu hình flash và đúng offset của chính lần biên dịch; không nên sao chép cố định địa chỉ từ một dự án khác.
1. Chuẩn bị
- Bo ESP32 và cáp USB truyền dữ liệu ổn định.
- Driver USB-UART đúng với chip trên bo, ví dụ CP210x hoặc CH340.
- Arduino IDE đã cài gói bo ESP32 và chọn đúng model bo, flash size, partition scheme.
- Flash Download Tool chính thức của Espressif.
2. Xuất đúng bộ file firmware
- Mở sketch trong Arduino IDE và chọn đúng mục Tools > Board, flash size và partition scheme.
- Dùng Sketch > Export Compiled Binary, hoặc bật verbose upload để xem chính xác lệnh nạp và các offset.
- Mở thư mục chứa kết quả build. Tên file thay đổi theo phiên bản Arduino core và cấu hình dự án.
Một bộ firmware có thể gồm:
- bootloader.bin: bộ nạp khởi động.
- partitions.bin: bảng phân vùng đã chọn khi biên dịch.
- boot_app0.bin: dữ liệu hỗ trợ khởi động ứng dụng, xuất hiện với một số cấu hình.
- tên-sketch.bin: chương trình chính.
- tên-sketch.merged.bin: file hợp nhất do một số phiên bản Arduino-ESP32 tạo ra; offset nạp phải lấy từ build log, thường là 0x0.
- flash_args hoặc dòng lệnh upload: nguồn để xác định file, offset và tham số flash.
Không phải cấu hình nào cũng tạo cùng số lượng file. Hãy lấy danh sách và địa chỉ từ đầu ra build/upload của chính dự án. Nếu dùng file merged.bin, không chọn đồng thời các file thành phần trong cùng lượt nạp. Ví dụ dưới đây là bố cục thường gặp của ESP32 classic và chỉ để nhận biết định dạng; bootloader offset thay đổi theo dòng chip/bo:
0x1000 bootloader.bin
0x8000 partitions.bin
0xe000 boot_app0.bin
0x10000 ten-sketch.bin
3. Cấu hình Flash Download Tool
- Mở công cụ, chọn đúng ChipType, đặt WorkMode = Develop và LoadMode = UART. Chế độ Factory dành cho quy trình sản xuất hoặc nạp nhiều thiết bị, không dùng trong hướng dẫn nạp một bo này.
- Thêm từng file .bin và nhập offset tương ứng lấy từ upload log hoặc flash_args.
- Đánh dấu các dòng cần nạp. Không tự ép SPI SPEED hoặc SPI MODE khác cấu hình build; từ Flash Download Tool 3.9.10, các mục này mặc định bị khóa và công cụ dùng cấu hình trong firmware. Bật DoNotChgBin nếu cần giữ nguyên binary; khi tắt, công cụ có thể điều chỉnh thông tin header theo giao diện.
- Chọn đúng cổng COM. Có thể bắt đầu ở 115200 baud nếu đường truyền không ổn định rồi tăng tốc sau.
4. Đưa ESP32 vào chế độ nạp và bắt đầu
- Với bo tự động vào bootloader, bấm START và chờ kết nối.
- Nếu công cụ không đồng bộ được, giữ nút BOOT (GPIO0 ở mức thấp), nhấn rồi thả EN/RESET, sau đó thả BOOT khi quá trình bắt đầu.
- Chờ trạng thái hoàn tất, khởi động lại bo và kiểm tra log UART của ứng dụng.
5. Lỗi thường gặp
| Hiện tượng | Cách kiểm tra |
|---|---|
| Không kết nối được | Kiểm tra cáp, driver, cổng COM, quyền truy cập cổng và thao tác BOOT/EN. |
| Nạp xong nhưng không boot | Đối chiếu lại loại chip, flash mode/size, partition scheme và toàn bộ offset. |
| Boot loop hoặc lỗi partition | Dùng đúng partitions.bin và app.bin từ cùng một lần build; đọc log UART để xác định nguyên nhân. |
| Thiết bị mất dữ liệu cấu hình | Kiểm tra thao tác ERASE. Xóa toàn bộ flash có thể xóa NVS, dữ liệu hiệu chuẩn và nội dung filesystem. |
Không chọn ERASE theo thói quen. Chỉ xóa flash khi có lý do rõ ràng và đã sao lưu dữ liệu cần giữ. Nếu firmware dùng Secure Boot, Flash Encryption hoặc bảng phân vùng riêng, cần theo đúng quy trình phát hành của dự án.
6. Tài liệu và bài liên quan
Đối chiếu thêm tài liệu Flashing Firmware và Boot Mode Selection của Espressif. Sau khi nạp, bạn có thể thử điều khiển relay bằng ESP32 hoặc đọc load cell bằng HX711.
Xem thêm