ESP32 MicroPython 调整分区大小
Posted
技术标签:
【中文标题】ESP32 MicroPython 调整分区大小【英文标题】:ESP32 MicroPython resize partitions 【发布时间】:2021-07-29 16:44:33 【问题描述】:我正在使用 ESP32 和带有 Mu 的 MicroPython。 我的代码需要更多闪存空间,通常我会在 Arduino 菜单中选择“Huge APP”,这样会删除 OTA 和 spiff。
如何使用 MicroPython 固件做到这一点?我可以想象,可以通过终端,使用 esptool.py 或 Ampy,但无法弄清楚。
谢谢
【问题讨论】:
【参考方案1】:在 MicroPython 中更改分区没有简单的方法。您将需要修改分区 表并从源代码编译 MicroPython。这是设置 MicroPython 构建的方法 环境使用 Ubuntu 20.04.2。您可以使用适用于 Linux 版本 2 的 Ubuntu 的 Windows 子系统 20.04.2 也是如此。
如果您使用的是新安装的 Ubuntu 或 Windows,请使用 apt-get 更新和升级 Ubuntu Linux 子系统。
sudo apt-get -y update
sudo apt-get -y upgrade
使用 apt-get 安装所需的构建工具。
sudo apt-get -y install build-essential libffi-dev git pkg-config cmake virtualenv python3-pip python3-virtualenv
使用 git 克隆 esp-idf SDK repo 并安装 -- 这需要一段时间。
git clone --recursive https://github.com/espressif/esp-idf.git
cd esp-idf/
./install.sh
获取 esp-idf export.sh 脚本以设置所需的环境变量。重要的是 您获取文件而不是使用 ./export.sh 运行它。您需要先获取此文件 编译 MicroPython。
source export.sh
cd ..
使用 git 克隆 MicroPython 存储库。
git clone https://github.com/micropython/micropython.git
更新 git 子模块并编译 MicroPython 交叉编译器
cd micropython/
git submodule update --init
cd mpy-cross/
make
cd ..
cd ports/esp32
您可以通过编辑 ports/esp32 中的partitions.csv
文件来更改 ESP32 分区大小。那里
在更改 partitions.csv 文件时,您应该注意一些事项。 factory
partition 是 MicroPython 应用程序所在的位置。这个分区必须足够大
MicroPython 固件,它必须放置在与 0x10000 (64K) 对齐的偏移处。 vfs
分区
是虚拟文件系统所在的位置。
通用 partitions.csv 文件针对 4MB 闪存设备配置,如下所示:
默认 partitions.csv 文件内容
# Notes: the offset of the partition table itself is set in
# $IDF_PATH/components/partition_table/Kconfig.projbuild.
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 0x180000,
vfs, data, fat, 0x200000, 0x200000,
factory
分区从 0x10000(根据需要对齐到 64K)开始,大小为 0x180000。
这会将factory
分区的末尾放置在 (0x10000 + 0x180000) 或 0x190000 处。下一个
分区是vfs
分区,它从 0x200000 (2MB) 开始,大小为 0x200000 (2MB)。这
在factory
分区结束和vfs
分区开始之间留下 0x200000 - 0x190000 = 0x70000 或 448K 字节未使用的闪存。将未使用的闪存添加到factory
分区
导致新的factory
分区大小为 0x180000 + 0x70000 = 0x1F0000 或 64K 小于 2MB。
修改 partitions.csv 文件内容
# Notes: the offset of the partition table itself is set in
# $IDF_PATH/components/partition_table/Kconfig.projbuild.
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 0x1F0000,
vfs, data, fat, 0x200000, 0x200000,
如果需要更多的“工厂”闪存空间,您可以减小vfs
分区的大小并
将其偏移量增加相同的量,然后将新释放的空间添加到工厂分区。
修改了 3MB 工厂分区和 960K 虚拟文件系统的 partitions.csv 文件内容 分区。
# Notes: the offset of the partition table itself is set in
# $IDF_PATH/components/partition_table/Kconfig.projbuild.
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 0x300000,
vfs, data, fat, 0x310000, 0xF0000,
确定分区大小后,构建 MicroPython 固件。
make all
firmware.bin 文件将位于 build-GENERIC 目录中。如果您一直在运行其他 固件或已修改分区表,您必须在将新固件刷新到之前擦除 你的设备。设置 PORT= 为 ESP32 的 USB 串口。
make PORT=/dev/ttyUSB0 erase
make PORT=/dev/ttyUSB0 deploy
此时,您应该使用新的分区大小在 ESP32 设备上运行 MicroPython。 您可以使用以下方法通过 USB 端口连接到 REPL:
make PORT=/dev/ttyUSB0 monitor
【讨论】:
【参考方案2】:最简单的选择是使用带有 SPIRAM 的 ESP32 并使用支持它的固件之一。 虽然 LoBo 是第一个,但现在大多数 MicroPython 家族都很好地支持它。
https://micropython.org/download/esp32/
通用SPIRAM:esp32spiram-20210418-v1.15.bin【讨论】:
【参考方案3】:我一直在搞同样的事情,只是还没有真正做到。
我在这里找到了用于不同固件内容的选项: https://github.com/loboris/MicroPython_ESP32_psRAM_LoBo
您可以选择一些预构建的固件选项,我发现它们的大部分内容非常有用。
如果这不是您想要的,我认为您需要使用 esptool 中的选项更改分区布局。
首先确保您使用的 ESP 具有正确的闪存大小分配。 (有些可以有我找到的外部芯片,不知道你用的是什么板)
我以前从未这样做过,所以我没有资格向您提供有关它的信息。
【讨论】:
LoBo 前叉很棒,但目前相当陈旧,不再维护。大多数(但不是全部)功能现已进入维护良好的家庭。以上是关于ESP32 MicroPython 调整分区大小的主要内容,如果未能解决你的问题,请参考以下文章