如何在 ESP32 中设置分区

在本教程中,我们将介绍两种在 ESP32 中设置/更改分区方案的方法:简单方法和高级方法。如果您是 ESP32 的绝对初学者,您可能不必更改任何初始项目的分区方案。除非您有充分的理由,否则不建议更改分区方案。一个不适合为应用程序代码保留的默认空间的非常庞大的应用程序就是这样一个原因。

简单的方法

这是基于 UI 的(使用 Arduino IDE)。如果您转到工具 -> 分区方案,您将能够看到可供您使用的分区选项列表。

esp32 OTA分区映射 esp32 硬盘_用户名


如您所见,默认分区方案为 4 MB Flash,其中 1.2 MB 为您的应用程序代码保留,1.2 MB 为 OTA(空中更新)保留,1.5 MB 为 SPIFFS 保留。

我们将在单独的教程中讨论 SPIFFS,但现在,您可以理解 SPIFFS 就像 ESP32 芯片上的迷你 SD 卡。您可以使用它来创建和存储小文件。

从所有可用选项中,您可以根据自己的要求选择适合您的选项。例如,如果您不打算在设备上执行 OTA(即,您不打算在部署后远程更新 ESP32 的代码),您可以选择 No OTA 选项之一,甚至巨大的应用程序选项。如果您不打算使用 SPIFFS 存储,您可以使用最小 SPIFFS 选项,为应用程序和 OTA 提供更多空间。

此时,您可能想知道,如果我既不需要 OTA 也不需要 SPIFFS 怎么办?当然,这样的选项在列表中是不可见的。

如果您确实需要这样的选项,或默认列表中没有的任何选项,请前往下一部分。

进阶之道

在这种方法中,我们将对分区进行自定义更改。请注意您在此处所做的更改。除非绝对必要,否则不要制作这些。

对于这种方法,首先找到 ESP32 的分区 CSV。在 Windows 上,路径通常是:

C:\Users<你的用户名>\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\tools\partitions

(可以直接搜索文件名)

esp32 OTA分区映射 esp32 硬盘_CSV_02


您基本上必须找到 Arduino 文件夹,然后是 esp32 包文件夹。其中,路径应该是\hardware\esp32\1.0.4\tool\partitions。

您将在此文件夹中看到许多 CSV。

如您所料,这些对应于 Arduino IDE 中工具 -> 分区方案中显示的各种选项。

打开其中一个 CSV,比如说对应于默认分区的那个。

它应该是这样的:

esp32 OTA分区映射 esp32 硬盘_应用程序_03


如您所见,这包含内存偏移量和各个部分的大小。

nvs 对应于非易失性存储。

otadata 保存 OTA 更新的数据

app0 保存应用程序代码

app1 保留用于存储下载的 OTA 文件

spiffs 对应于 SPIFFS 存储

可以看到,默认情况下,为 app 预留的大小为 0x140000 字节,即 1310720 字节,相当于 1.25 MB。为 OTA 保留相同的空间。对于 SPIFFS,保留的内存为 0x170000 字节或 1507328 字节,对应于 1.4375 MB。

现在,假设我们不想执行 OTA,并且还将为 SPIFFS 保留的空间减少到仅 100 kB。因此,SPIFFS 大小将为 102400 字节或 0x19000 字节。因此,app0 大小将为 (1310720+1310720+1507328-102400) = 4026368 字节或 0x3D7000 字节。

通过这些更改,默认将 CSV 分区为如下所示:

esp32 OTA分区映射 esp32 硬盘_esp32 OTA分区映射_04


在boards.txt 中还必须进行另一项更改。返回几个文件夹。在 Windows 上,你需要去的路径是:

C:\Users<你的用户名>\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4

您将看到一个 board.txt 文件。

esp32 OTA分区映射 esp32 硬盘_应用程序_05


打开该文件,并更改您感兴趣的板的 esp32.upload.maximum_size。我将使用 ESP32 开发模块。因此,我将更改开发模块的最大上传大小。

esp32 OTA分区映射 esp32 硬盘_用户名_06


现在让我们看看在 Arduino IDE 中的影响。由于我们已经更改了默认分区方案,因此我们不会从工具 -> 分区方案更改分区方案。我们将让它保持默认。

现在,在更改分区方案之前,我们编译了一个代码,在编译时显示以下消息:

观察语句“最大值为 1310720 字节”。现在,我们关闭并重新打开 Arduino IDE 并再次编译相同的草图。现在显示的消息是:

如您所见,最大草图尺寸现已更改。该消息现在显示为“最大为 4026368 字节”,您可以尝试上传大于 1310720 字节的更重的草图,它会起作用。