欢迎光临散文网 会员登陆 & 注册

Arduino IDE中ESP32S3运行参数意义

2023-08-23 23:27 作者:搞嵌入式的老徐  | 我要投稿

    用Arduino IDE开发ESP32S3也有一段时间了,有时候也是跟着别人的教程去捣弄出现效果,很多时候有些东西还是不清不楚的,最近想操作ESP32S3模组封内的SPI FLASH,却发现操作涉及到FLASH的IO都会导致复位,有可能ESP32S3对于FLASH设置了一些保护吧,毕竟ESP32S3也将某些代码存放于SPI FLASH,这样想也是蛮合理的。具体原因,研究出来,我也会发帖子分享给大家。

    到这里的时候,我就知道我不能太着急了,要知其然知其所以然,所以先把Arduino IDE的一个小坑填一下,就是Arduino IDE中ESP32S3的运行参数配置,不管是Arduino IDE 1.x版本还是2.x版本都是有相同的配置。

    当我们想要ESP32S3开发板能够运行到最佳状态,那就需要理解配置项的含义,充分发挥芯片的性能。

    接下来,就来研究一下这个运行参数,如下图:

    这个配置是在“工具”下,选择了ESP32S3开发板后,会出现的。

如何在IDE中选择ESP32S3开发板

1、USB CDC On Boot(USB Communications Device Class On Boot)

ESP32S3芯片内置USB接口,支持USB CDC,说明可以跳过USB转串口芯片对模组进行下载。有两个选项:Enable:这种选项是要在没有串口芯片的情况下选择;Disable:有串口芯片,选择Disable。

注意:当USB CDC On Boot选择为Enable,但是板子又有串口芯片,这时候串口是不能使用的,也就是无法收发串口信息。Enable选项通常是在省成本的板子,没有USB转串口芯片上使用这个配置,否则板载有串口芯片都选择使用Disable即可。

科普:Enable情况下,如何下载程序:

首先手动进入下载模式:首先按住BOOT按钮,然后再按住RESET按钮,再放开RESET按钮,最后再放开BOOT按钮;

需要配置USB CDC On Boot -> Enabled,Upload Mode -> UART0/Hardware CDC,USB Mode -> USB-OTG(TinyUSB);

Arduino IDE中编译、上传代码到开发板中,然后需要手动Reset开发板重启;

2、CPU Frequency

该选项顾名思义就是让你设置CPU的时钟频率,有6个频率可供选择。

想让CPU性能拉满,肯定是全速的240MHz,这时候耗能也就越多,所以假如想降低功耗,那得降低CPU主频,这里选择的依据就要看你的使用场景。学习时,不考虑耗能,直接选择240MHz即可,在最佳性能下运行。

注意:

① 240MHz(WiFi)、160MHz(WiFi)、80MHz(WiFi)三个选项是可以保证ESP32 S3的WIFI/BT功能正常运行的CPU频率

② 40MHz、20MHz、10MHz频率有点低,无法使WIFI/BT功能正常运行,只能保证CPU运行基本功能         

3、Core Debug Level

该选项是用于选择要打印到串口的Arduino内核调试日志等级,有6个选择可供选择。

None:不打印输出任何内核调试日志

Error:仅打印内核调试中错误级别的日志

Warn:仅打印内核调试中警告级别及其以上等级的日志

Info:仅打印内核调试中信息级别及其以上等级的日志

Debug:仅打印内核调试中调试级别机器人以上等级的日志

Verbose:打印内核调试中所有的日志

这里的区别,可以去观看一下“孤立二进制“UP主的日志视频,网址如下:

https://www.bilibili.com/video/BV1KG4y1d7Ed/?spm_id_from=333.788&;vd_source=25989f02cab22f31785cd801f0edd0f8

我们一般情况无需关注内核中日志信息,除非是自己开发一些底层代码时,与内核中相关功能有关,才需要打开内核调试日志,一般情况下建议直接选择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固件到开发板中,在上传完成后,需要手动Reset开发板

这种方式无法将调试信息输出到串口,如果需要输出信息到串口,还是建议前面介绍的USB CDC功能,如果单单只想实现上传升级固件,这个未尝不是一个好办法。

5、Erase All Flash Before Sketch Upload

该选项是决定在Arduino IDE中上传代码时,是否需要把整个FLASH空间擦除。

Enable就是需要全面擦除FLASH;Disable就是不需要。这两者最直观的感觉就是下载时间,flash需要全面的话,慢了一倍多,最深层的原因就是FLASH的擦写次数是有限的,建议是选择Disable。

6、Events Run On

该选项是配置Arduino中断事件在ESP32 S3的哪一个内核上运行,由于ESP32 S3有两个内核,分别为Core 0和Core 1,所以我们就可以将涉及到中断相关的事件处理代码放到单独的内核上运行,这样就可以防止正常业务代码到运行,不用再被打断,这样程序运行时效率更高,可以做到实时处理外部中断事件。

这个选项跟后面的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的读取和写入

这里就要看模组的情况,自己对号入座即可,如下图:

我开发板的模组是N8R8,所以FLASH使用的是QSPI接口,当然选择SPI接口也可以,这里的QIO和DIO都可以选择,只不过QIO会比DIO快一点,所以选择QIO 120MHz就可以了。至于什么时候选择OPI,这就要看FLASH的容量了,假如容量大于16MB的话,这时候可以考虑使用OPI接口。

8、Flash Size

该选项是选择当前ESP32 S3上挂载的Flash容量大小,要根据实际的大小来选择,可以配置的参数如下:

我开发板的模组是N8R8,所以FLASH容量是8MB。注意:这里的'B'指的是字节,而'b'指的是位。

9、JTAG Adapter

该选项是用来配置JTAG Adapter的,使用JTAG调试程序会更加的精细,我们可以设置短点、单步调试、查看变量等来调试程序,能够帮助我们迅速的定位问题,可以配置的参数如下:

还没有在Arduino IDE中使用过调试功能,目前官方支持调试的板子并没有ESP32S3,需要自行去魔改实现,并且听说存在BUG,所以这里我就用比较愚笨,但是比较见效的“printf大法”,这里直接设置Disable即可。后面在VSCode开发,我再来介绍如何debug调试ESP32S3。

10、Arduino Run On

该选项是为了配置Arduino Core任务代码所运行的ESP32 S3内核,这里的配置可以跟前面Events Run On所配置的内核不同,那么就可以在ESP32 S3两个内核上同时运行中断处理函数和Arduino Core任务代码。当然也可以选择成一样的内核,那么这样就可以节约一个内核的电量消耗,可以一定程度上降低功耗。

11、USB Firmware MSC On Boot(USB Firmware Mass Storage Class On Boot)

该选项是配置当使用USB连接到ESP32 S3开发板后,电脑上会弹出一个类似U盘的存储盘,这样我们就可以很方便的拉一个新的固件到这个存储盘里,这就是更新固件的一种新方法。有玩过STM32的小伙伴应该不陌生,就是读卡器实验,简单来说,就是在FLASH中移植了文件系统了。当你用USB线连接开发板的USB口,你的电脑就会出现SPI FLASH模拟的磁盘,如下图:

还是新手的话,建议直接Disable即可,后面用到文件系统的时候,再开就行了。

12、Partition Scheme

该选项配置磁盘分区的方案,就是将FLASH空间合理规划。在Arduino IDE中为我们设定好了几个预设好的方案,我们根据实际情况选择对应的方案即可,具体配置如下图所示:

我使用的是8M with spiffs(3MB APP/1.5MB SPIFFS),这里会有1.5MB 文件系统自身用到的,然后3MB空间是文件系统支配使用的,你可以随意将小于这个容量的文件塞进去。

当然也是支持自行创建自己的分区方案,这里就是创建一个.csv(comma-separeted values)文件,具体我也没有研究,研究后也会写帖子进行分享,大家可以先看官方教程,网址如下:

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开发板只有内部带的512KB SRAM的话,没有外挂PSRAM对内存扩容,那这里直接选择Disabled即可。如果是外挂了PSRAM,那就要根据PSRAM的容量大小来选择对应的SPI通信方式,具体参数如下图所示:

N8R8模组的PSRAM是8M大小的,而且通过下图可以看到是OPI接口,所以这里直接选择OPI PSRAM

14、Upload Mode

该选项就是为了配置使用哪种接口来上传Arduino代码到ESP32 S3开发板中,具体可以配置的参数如下:

UART0/Hardware CDC:配置USB CDC On Boot为Disabled,表示使用UART0上传代码(即板载的USB转串口芯片);当设置USB CDC On Boot为Enabled时,那就表明使用USB Hardware CDC方式来上传代码,我们在最上面介绍USB CDC On Boot参数时,介绍过如何使用这种方式怎么使用;

USB-OTG CDC(TinyUSB):这里需要先清楚TinyUSB是什么,TinyUSB 是用于嵌入式系统的开源跨平台USB主机 / 设备堆栈,旨在实现无动态分配的内存安全和延迟所有中断事件的线程安全,然后在非ISR任务功能中进行处理。目前在ESP32 S3芯片上已经成功移植了TinyUSB协议栈,其实简单来理解的话,就是使用软件模拟出一个Hardware CDC来上传程序。使用该模式时,也要修改USB Mode为USB-OTG(TinyUSB),这里要想上传代码到话,就需要手动进入下载模式了,稍微麻烦一点,但是好处就是开发板只要插上电脑,那么就不需要找到对应的USB设备挂载点了,因为通信协议是USB协议,此时系统中就会出现下图所示的设备。

15、Upload Speed

该选项是配置上传代码到开发板时的通信速率,可以配置的参数如下图所示:

我们开发板使用CH343P,它可以支持到921600波特率。

16、USB Mode

该选项是为了配置,当使用ESP32 S3开发板的USB接口时配置的模式,如果我们一直使用的是ESP32 S3的串口上传代码模式,配置USB CDC On Boot为Disabled,那么这里的USB Mode其实是用不到的,具体可以配置参数如下所示:

Hardware CDC and JTAG:当使用USB连接方式与ESP32 S3开发板进行通信时,配置该参数,就表明将要使用ESP32 S3内置的硬件CDC功能或者JTAG调试模式;

USB-OTG(TinyUSB):只有当配置Upload Mode为USB-OTG CDC(TinyUSB)时,才需要同步配置USB Mode为该参数,因为需要配置USB的协议栈为TinyUSB方式;

总结

1、ESP32S3 R8N8推荐设置如下

2、ESP32S3 R8N8下载方式,总的来说有三种:

① 通过串口进行下载程序,假如有自动下载电路,只需要点击上传程序,稍等片刻即可看到现象。这里方式的设置需要关注下图红框两处选项。

② 通过USB口进行手动下载,下载过程需要按着BOOT引脚。这里式的需要关注下图红框两处选

 通过TinyUSB进行手动下载,下载过程需要按着BOOT引脚。这里式的需要关注下图红框两处选

作者:Wiking

每天做多一点点,进步一点点,分享知识,分享快乐




Arduino IDE中ESP32S3运行参数意义的评论 (共 条)

分享到微博请遵守国家法律