Arduino IDE中ESP32S3運行參數(shù)意義

????用Arduino IDE開發(fā)ESP32S3也有一段時間了,有時候也是跟著別人的教程去搗弄出現(xiàn)效果,很多時候有些東西還是不清不楚的,最近想操作ESP32S3模組封內(nèi)的SPI FLASH,卻發(fā)現(xiàn)操作涉及到FLASH的IO都會導(dǎo)致復(fù)位,有可能ESP32S3對于FLASH設(shè)置了一些保護吧,畢竟ESP32S3也將某些代碼存放于SPI FLASH,這樣想也是蠻合理的。具體原因,研究出來,我也會發(fā)帖子分享給大家。
????到這里的時候,我就知道我不能太著急了,要知其然知其所以然,所以先把Arduino IDE的一個小坑填一下,就是Arduino IDE中ESP32S3的運行參數(shù)配置,不管是Arduino IDE 1.x版本還是2.x版本都是有相同的配置。
????當我們想要ESP32S3開發(fā)板能夠運行到最佳狀態(tài),那就需要理解配置項的含義,充分發(fā)揮芯片的性能。
????接下來,就來研究一下這個運行參數(shù),如下圖:

????這個配置是在“工具”下,選擇了ESP32S3開發(fā)板后,會出現(xiàn)的。

1、USB CDC On Boot(USB Communications Device Class On Boot)
ESP32S3芯片內(nèi)置USB接口,支持USB CDC,說明可以跳過USB轉(zhuǎn)串口芯片對模組進行下載。有兩個選項:Enable:這種選項是要在沒有串口芯片的情況下選擇;Disable:有串口芯片,選擇Disable。
注意:當USB CDC On Boot選擇為Enable,但是板子又有串口芯片,這時候串口是不能使用的,也就是無法收發(fā)串口信息。Enable選項通常是在省成本的板子,沒有USB轉(zhuǎn)串口芯片上使用這個配置,否則板載有串口芯片都選擇使用Disable即可。
科普:Enable情況下,如何下載程序:
首先手動進入下載模式:首先按住BOOT按鈕,然后再按住RESET按鈕,再放開RESET按鈕,最后再放開BOOT按鈕;
需要配置USB CDC On Boot -> Enabled,Upload Mode -> UART0/Hardware CDC,USB Mode -> USB-OTG(TinyUSB);
Arduino IDE中編譯、上傳代碼到開發(fā)板中,然后需要手動Reset開發(fā)板重啟;
2、CPU Frequency
該選項顧名思義就是讓你設(shè)置CPU的時鐘頻率,有6個頻率可供選擇。

想讓CPU性能拉滿,肯定是全速的240MHz,這時候耗能也就越多,所以假如想降低功耗,那得降低CPU主頻,這里選擇的依據(jù)就要看你的使用場景。學習時,不考慮耗能,直接選擇240MHz即可,在最佳性能下運行。
注意:
① 240MHz(WiFi)、160MHz(WiFi)、80MHz(WiFi)三個選項是可以保證ESP32 S3的WIFI/BT功能正常運行的CPU頻率
②?40MHz、20MHz、10MHz頻率有點低,無法使WIFI/BT功能正常運行,只能保證CPU運行基本功能? ? ?????
3、Core Debug Level
該選項是用于選擇要打印到串口的Arduino內(nèi)核調(diào)試日志等級,有6個選擇可供選擇。

None:不打印輸出任何內(nèi)核調(diào)試日志
Error:僅打印內(nèi)核調(diào)試中錯誤級別的日志
Warn:僅打印內(nèi)核調(diào)試中警告級別及其以上等級的日志
Info:僅打印內(nèi)核調(diào)試中信息級別及其以上等級的日志
Debug:僅打印內(nèi)核調(diào)試中調(diào)試級別機器人以上等級的日志
Verbose:打印內(nèi)核調(diào)試中所有的日志
這里的區(qū)別,可以去觀看一下“孤立二進制“UP主的日志視頻,網(wǎng)址如下:
https://www.bilibili.com/video/BV1KG4y1d7Ed/?spm_id_from=333.788&vd_source=25989f02cab22f31785cd801f0edd0f8
我們一般情況無需關(guān)注內(nèi)核中日志信息,除非是自己開發(fā)一些底層代碼時,與內(nèi)核中相關(guān)功能有關(guān),才需要打開內(nèi)核調(diào)試日志,一般情況下建議直接選擇None即可
4、USB DFU On Boot(The USB Device Firmware Upgrade On Boot)
該選項是配置是否在ESP32 S3啟動時,通過USB接口來升級固件。
如果需要就選擇Enable,否則就Disable。一般情況不需要升級固件,平時選擇Disable即可。
當需要這個功能來升級固件的時候,步驟如下:
① 手動進入下載模式:首先按住BOOT按鈕不松開,然后按住RESET按鈕,然后再放開RESET按鈕,最后松開BOOT按鈕
②?配置USB DFU:在Arduino IDE中配置USB Mode -> USB-OTG(TinyUSB),USB DFU On Boot -> Enable
③?在Arduino IDE中upload固件到開發(fā)板中,在上傳完成后,需要手動Reset開發(fā)板
這種方式無法將調(diào)試信息輸出到串口,如果需要輸出信息到串口,還是建議前面介紹的USB CDC功能,如果單單只想實現(xiàn)上傳升級固件,這個未嘗不是一個好辦法。
5、Erase All Flash Before Sketch Upload
該選項是決定在Arduino IDE中上傳代碼時,是否需要把整個FLASH空間擦除。
Enable就是需要全面擦除FLASH;Disable就是不需要。這兩者最直觀的感覺就是下載時間,flash需要全面的話,慢了一倍多,最深層的原因就是FLASH的擦寫次數(shù)是有限的,建議是選擇Disable。
6、Events Run On
該選項是配置Arduino中斷事件在ESP32 S3的哪一個內(nèi)核上運行,由于ESP32 S3有兩個內(nèi)核,分別為Core 0和Core 1,所以我們就可以將涉及到中斷相關(guān)的事件處理代碼放到單獨的內(nèi)核上運行,這樣就可以防止正常業(yè)務(wù)代碼到運行,不用再被打斷,這樣程序運行時效率更高,可以做到實時處理外部中斷事件。
這個選項跟后面的Event Run On選項就決定了雙核的運行情況。
7、Flash Mode
該選項是配置ESP32 S3芯片與Flash通信的模式,不同的Flash芯片,這里可以配置不同的通信模式和速度。

QIO(Quad I/O Fast Read):使用四根SPI邏輯線用于Flash的讀取和寫入;
DIO(Dual I/O Fast Read):使用兩根SPI邏輯線用于Flash的讀取和寫入;
OPI(Octal I/O):使用八根SPI邏輯線用于Flash的讀取和寫入
這里就要看模組的情況,自己對號入座即可,如下圖:

我開發(fā)板的模組是N8R8,所以FLASH使用的是QSPI接口,當然選擇SPI接口也可以,這里的QIO和DIO都可以選擇,只不過QIO會比DIO快一點,所以選擇QIO 120MHz就可以了。至于什么時候選擇OPI,這就要看FLASH的容量了,假如容量大于16MB的話,這時候可以考慮使用OPI接口。
8、Flash Size
該選項是選擇當前ESP32 S3上掛載的Flash容量大小,要根據(jù)實際的大小來選擇,可以配置的參數(shù)如下:

我開發(fā)板的模組是N8R8,所以FLASH容量是8MB。注意:這里的'B'指的是字節(jié),而'b'指的是位。
9、JTAG Adapter
該選項是用來配置JTAG Adapter的,使用JTAG調(diào)試程序會更加的精細,我們可以設(shè)置短點、單步調(diào)試、查看變量等來調(diào)試程序,能夠幫助我們迅速的定位問題,可以配置的參數(shù)如下:

還沒有在Arduino IDE中使用過調(diào)試功能,目前官方支持調(diào)試的板子并沒有ESP32S3,需要自行去魔改實現(xiàn),并且聽說存在BUG,所以這里我就用比較愚笨,但是比較見效的“printf大法”,這里直接設(shè)置Disable即可。后面在VSCode開發(fā),我再來介紹如何debug調(diào)試ESP32S3。
10、Arduino Run On
該選項是為了配置Arduino Core任務(wù)代碼所運行的ESP32 S3內(nèi)核,這里的配置可以跟前面Events Run On所配置的內(nèi)核不同,那么就可以在ESP32 S3兩個內(nèi)核上同時運行中斷處理函數(shù)和Arduino Core任務(wù)代碼。當然也可以選擇成一樣的內(nèi)核,那么這樣就可以節(jié)約一個內(nèi)核的電量消耗,可以一定程度上降低功耗。
11、USB Firmware MSC On Boot(USB Firmware Mass Storage Class On Boot)
該選項是配置當使用USB連接到ESP32 S3開發(fā)板后,電腦上會彈出一個類似U盤的存儲盤,這樣我們就可以很方便的拉一個新的固件到這個存儲盤里,這就是更新固件的一種新方法。有玩過STM32的小伙伴應(yīng)該不陌生,就是讀卡器實驗,簡單來說,就是在FLASH中移植了文件系統(tǒng)了。當你用USB線連接開發(fā)板的USB口,你的電腦就會出現(xiàn)SPI FLASH模擬的磁盤,如下圖:

還是新手的話,建議直接Disable即可,后面用到文件系統(tǒng)的時候,再開就行了。
12、Partition Scheme
該選項配置磁盤分區(qū)的方案,就是將FLASH空間合理規(guī)劃。在Arduino IDE中為我們設(shè)定好了幾個預(yù)設(shè)好的方案,我們根據(jù)實際情況選擇對應(yīng)的方案即可,具體配置如下圖所示:

我使用的是8M with spiffs(3MB APP/1.5MB SPIFFS),這里會有1.5MB 文件系統(tǒng)自身用到的,然后3MB空間是文件系統(tǒng)支配使用的,你可以隨意將小于這個容量的文件塞進去。
當然也是支持自行創(chuàng)建自己的分區(qū)方案,這里就是創(chuàng)建一個.csv(comma-separeted values)文件,具體我也沒有研究,研究后也會寫帖子進行分享,大家可以先看官方教程,網(wǎng)址如下:
https://docs.espressif.com/projects/esp-idf/zh_CN/v5.1/esp32s3/api-reference/storage/nvs_partition_gen.html?highlight=csv
13、PSRAM
該選項為了配置外接的PSRAM的SPI連接方式,有些ESP32 S3開發(fā)板只有內(nèi)部帶的512KB SRAM的話,沒有外掛PSRAM對內(nèi)存擴容,那這里直接選擇Disabled即可。如果是外掛了PSRAM,那就要根據(jù)PSRAM的容量大小來選擇對應(yīng)的SPI通信方式,具體參數(shù)如下圖所示:

N8R8模組的PSRAM是8M大小的,而且通過下圖可以看到是OPI接口,所以這里直接選擇OPI PSRAM
14、Upload Mode
該選項就是為了配置使用哪種接口來上傳Arduino代碼到ESP32 S3開發(fā)板中,具體可以配置的參數(shù)如下:

UART0/Hardware CDC:配置USB CDC On Boot為Disabled,表示使用UART0上傳代碼(即板載的USB轉(zhuǎn)串口芯片);當設(shè)置USB CDC On Boot為Enabled時,那就表明使用USB Hardware CDC方式來上傳代碼,我們在最上面介紹USB CDC On Boot參數(shù)時,介紹過如何使用這種方式怎么使用;
USB-OTG CDC(TinyUSB):這里需要先清楚TinyUSB是什么,TinyUSB 是用于嵌入式系統(tǒng)的開源跨平臺USB主機 / 設(shè)備堆棧,旨在實現(xiàn)無動態(tài)分配的內(nèi)存安全和延遲所有中斷事件的線程安全,然后在非ISR任務(wù)功能中進行處理。目前在ESP32 S3芯片上已經(jīng)成功移植了TinyUSB協(xié)議棧,其實簡單來理解的話,就是使用軟件模擬出一個Hardware CDC來上傳程序。使用該模式時,也要修改USB Mode為USB-OTG(TinyUSB),這里要想上傳代碼到話,就需要手動進入下載模式了,稍微麻煩一點,但是好處就是開發(fā)板只要插上電腦,那么就不需要找到對應(yīng)的USB設(shè)備掛載點了,因為通信協(xié)議是USB協(xié)議,此時系統(tǒng)中就會出現(xiàn)下圖所示的設(shè)備。

15、Upload Speed
該選項是配置上傳代碼到開發(fā)板時的通信速率,可以配置的參數(shù)如下圖所示:

我們開發(fā)板使用CH343P,它可以支持到921600波特率。
16、USB Mode
該選項是為了配置,當使用ESP32 S3開發(fā)板的USB接口時配置的模式,如果我們一直使用的是ESP32 S3的串口上傳代碼模式,配置USB CDC On Boot為Disabled,那么這里的USB Mode其實是用不到的,具體可以配置參數(shù)如下所示:

Hardware CDC and JTAG:當使用USB連接方式與ESP32 S3開發(fā)板進行通信時,配置該參數(shù),就表明將要使用ESP32 S3內(nèi)置的硬件CDC功能或者JTAG調(diào)試模式;
USB-OTG(TinyUSB):只有當配置Upload Mode為USB-OTG CDC(TinyUSB)時,才需要同步配置USB Mode為該參數(shù),因為需要配置USB的協(xié)議棧為TinyUSB方式;
總結(jié)
1、ESP32S3 R8N8推薦設(shè)置如下

2、ESP32S3 R8N8下載方式,總的來說有三種:
① 通過串口進行下載程序,假如有自動下載電路,只需要點擊上傳程序,稍等片刻即可看到現(xiàn)象。這里方式的設(shè)置需要關(guān)注下圖紅框兩處選項。

② 通過USB口進行手動下載,下載過程需要按著BOOT引腳。這里方式的設(shè)置需要關(guān)注下圖紅框兩處選項。

③?通過TinyUSB進行手動下載,下載過程需要按著BOOT引腳。這里方式的設(shè)置需要關(guān)注下圖紅框兩處選項。

作者:Wiking
每天做多一點點,進步一點點,分享知識,分享快樂