1. 前言
在ESP32開發(fā)過程中,對于我們實際的開發(fā)人員來說,將程序燒錄進(jìn)入ESP32內(nèi)不是什么復(fù)雜的事情,直接輸入idf.py flash
指令即可實現(xiàn),但是當(dāng)我們開發(fā)完成之后,如何將對應(yīng)的bin文件提供給測試人員進(jìn)行相應(yīng)的測試,以及如何提供bin文件給到產(chǎn)線進(jìn)行生產(chǎn)呢?
通常將工程文件直接發(fā)送出去是不現(xiàn)實的做法,因此需要我們對應(yīng)的開發(fā)人員輸出相應(yīng)的bin文件,提供給測試及生產(chǎn),那么ESP32 IDF如何實現(xiàn)bin文件的生成?以及如何將生成的多個bin文件進(jìn)行合并生成一個bin文件呢?
本文將詳細(xì)介紹,在我們使用 ESP-IDF 開發(fā)完對應(yīng)工程軟件之后的一系列生成、打包操作,包括 bin文件的生成
以及相應(yīng)的 bin文件合并
等操作。
2. 硬件及分區(qū)表
控制器:
ESP32-WROOM-32UE
開發(fā)方案:ESP-IDF
工程分區(qū)表如下:
Tips: 如需更加深入了解ESP32分區(qū)表有關(guān)內(nèi)容,可參考博主另外一篇博客 ESP32 分區(qū)表(點擊跳轉(zhuǎn)?。?或官方 IDF 編程指南。
3. 編譯
采用IDF工具實現(xiàn)ESP32的編譯,具體命令如下:
idf.py build
編譯成功之后,可以在控制終端打印的信息提示生成了對應(yīng)的文件,同時在最后提示,“To flash, run this command”,對應(yīng)含義為“如果需要燒錄需要運行下述命令”
通過提示可知,我們可以知道需要燒錄哪些文件,如此處需要燒錄的文件是:
- bootloader.bin 地址:0x1000
- partition-table.bin 地址:0x8000
- ota_data_initial.bin 地址:0xd000
- test.bin 地址:0x10000
4. 燒錄
關(guān)于esp32的固件燒錄主要有兩種方式:
- 在工程目錄下直接使用
idf flash
命令燒錄 - 使用官方燒錄工具 Flash Download Tools
4.1 使用 idf flash 命令燒錄
使用 idf flash
指令燒錄的方式,需要在對應(yīng)的工程目錄下進(jìn)行燒錄,idf工具會自動執(zhí)行工程編譯、之后讀取工程 build/
目錄下的bin文件并進(jìn)行燒錄,此方式適用于對應(yīng)的開發(fā)人員在軟件開發(fā)、調(diào)試階段進(jìn)行燒錄及調(diào)試使用。
4.2 使用 Flash Download Tools 工具燒錄
Flash Download Tools工具下載地址:https://www.espressif.com/en/support/download/other-tools
此方式燒錄拿到對應(yīng)工程編譯生成的bin文件,由于此燒錄方式不需要提供源碼,因此此方式一般常用于工廠生產(chǎn)或測試過程中使用。
關(guān)于 Flash Download Tools的使用說明,在下載的工具包內(nèi)有相關(guān)文檔說明,大家可自行查閱,下述只對部分關(guān)鍵點進(jìn)行簡述
4.3 Flash Download Tools Q&A
4.3.1 工程所需的燒錄bin文件有哪些?
- 在調(diào)用
idf.py build
命令編譯完以后會生成對應(yīng)的提示信息,提示信息內(nèi)包含燒錄完整工程所需的bin文件項 - 注意每個工程生成的bin文件項不一樣,根據(jù)每個工程內(nèi)容不同,編譯生成的bin文件數(shù)量也會不一樣
- 提示信息中不僅提示了對應(yīng)bin文件的所處的文件路徑,同時在每個文件路徑前提示了對應(yīng)bin文件應(yīng)燒錄的地址
4.3.2 生成的bin文件數(shù)量太多,能否合成一個?
在實際開發(fā)中,我們會發(fā)現(xiàn)一個工程編譯下來,會生成好幾個bin文件,少則三四個,多則上十個,這么多的bin文件,如果使用 Flash Download Tools 進(jìn)行燒錄的話,每個bin文件都需要點 ...
進(jìn)行路徑選擇,并填寫對應(yīng)的燒錄地址,這是一個很麻煩的事情,更是一個極容易出錯的問題,那能否將這些bin文件合成成為一個bin文件呢?
當(dāng)然是可以的,接下來我們將分享三種 esp32 bin文件合并的方案,大家可根據(jù)自行需要進(jìn)行選擇哪一種方案更加適合自己!
4.3.2.1 使用 FLash Download Tools 合并bin文件
如圖所示,Example:
4.3.2.2 使用 esptool.py
工具的 merge_bin
功能進(jìn)行合并
merge_bin
命令將會合并多個bin文件為一個bin文件,多個bin文件中間間隔的部分將會使用0xFF進(jìn)行填充
esptool.py --chip ESP32 merge_bin -o merged-flash.bin --flash_mode dio --flash_size 4MB 0x1000 bootloader.bin 0x8000 partition-table.bin 0x10000 app.bin
以上命令將 bootloader.bin(0x1000地址開始燒寫)
partition-table.bin(0x8000地址開始燒寫)
app.bin(0x10000地址開始燒寫)
合并為一個bin文件,并命名為merged-flash.bin(起始地址為0x0)
- 如需指定flash大小可使用
--flash_size
參數(shù) - 如需指定flash最大通訊頻率可使用
--flash_freq
參數(shù) - 如需指定flash通訊模式可使用
--flash_mode
參數(shù) - 如需指定合并后的bin文件起始地址偏移可使用
--target-offset 0xNMN
- 如需指定合并后的bin文件包總大小可使用
--fill-flash-size SIZE
,SIZE設(shè)置具體的大小
4.3.2.3 使用文本文件描述merge_bin
選項進(jìn)行合并
??4.3.2.2 中需要在 merge_bin
命令中輸入所有待合并的bin文件路徑以及對應(yīng)的偏移地址,當(dāng)bin文件較多的時候輸入較多的參數(shù)也是一個較為復(fù)雜且易出錯的問題,那是否可以考慮將此指令編寫成一個腳本呢?當(dāng)我在準(zhǔn)備為其編寫一個腳本的時候,發(fā)現(xiàn) esp32 其實也考慮了這個點
??其實在編譯的時候,工程同時也生成了一個文本文件來描述需要生成的bin文件,在對應(yīng)工程目錄下執(zhí)行了 idf.py build
命令之后,我們可以發(fā)現(xiàn)在 build/
目錄下會生成一個 flash_args
文件,打開此文件如下:
??此文件內(nèi)描述了調(diào)用esptool.py merge
命令的參數(shù)信息,因此我們可以直接使用此文件合并一個完整的工程bin文件,且此文件內(nèi)的信息都是編譯自動生成的,也就解決了我們手動一個個輸入bin文件造成的誤輸入導(dǎo)致的錯誤問題!
具體操作方法如下:
- 編譯工程
idf.py build
- 進(jìn)入編譯生成的build目錄
cd ./build
- 執(zhí)行
merge_bin
命令,調(diào)用flash_args
文本內(nèi)的參數(shù)esptool.py --chip ESP32 merge_bin -o merged-flash.bin @flash_args
Tips: 如果執(zhí)行命令報錯,請檢查 ①flash_args是否在build目錄下存在 ②確認(rèn)執(zhí)行此命令時已進(jìn)入build目錄下?。?/p>
創(chuàng)作不易,轉(zhuǎn)載請注明出處!文章來源:http://www.zghlxwxcb.cn/news/detail-488363.html
關(guān)注、點贊+收藏,可快速查收博主有關(guān)分享!文章來源地址http://www.zghlxwxcb.cn/news/detail-488363.html
到了這里,關(guān)于ESP32 bin文件生成及多個bin文件合并指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!