问题描述:
购买的esp32-wroom-32E的flash明明是16MB,但是为什么在烧录的时候只能显示1MB?
回答:
在platformio中选择板子的时候,给的模板默认是4MB的模板。4MB又会被分成5个区。下图是flash的一个分区表,用arduino的话,代码是存放在app0区的,也就是你的代码区仅有0x140000大小。
问题描述:
我希望我的代码区尽可能的大,不需要其他分区,应该怎么做?
回答:
在工程目录文件夹下,新建一个userFlash.csv文件,文件名随便,格式是csv。然后打开,你可以直接用vscode打开,把下面这个粘贴进去,官方给出了常见的分区。arduino-esp32/tools/partitions at master · espressif/arduino-esp32 · GitHub。一定要注意如果使用excel打开,不用逗号。因为csv文件本身是以逗号作为表格分割符的。但是你用vscode打开,他其实跟你用txt打开csv文件是一样的,一定要加逗号。分区的数值总的来说是你的实际flash大小,当然比他小也没事。
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x640000,
app1, app, ota_1, 0x650000,0x640000,
spiffs, data, spiffs, 0xC90000,0x370000,
之后在platformio.ini中添加 board_build.partitions = partitions.csv
此时你再次编译就不会出现问题了。(烧录还是会有问题的)
问题描述:
已经修改了flash分区表,编译也没问题了,但是就是烧录不了
回答:
是编绎时没接入板,与板的flash大小没关。修改配置无效,是因为编绎程序首先认为板是默认4M大小的。而pio run -t menconfig 只是修改配置项,只能在编绎成功时才能将配置一起并入目标码,可能这个编译顺序错误或提示错误。所以就要了解从哪里读到的是4M大小。plaftfromio 新建项目时,要选择板,其实每种板子都有它的配置文件。plaftfromio 先读取的是配置文件。由与是选的板子是esp32 dev module ,所以 配置文件是 esp32_dev.json。
解决: 修改 板的配置文件,这里是 esp32_dev.json.windows 一般位于{userProfile}.platformio\platforms\espressif32\boards 目录下。环境重装时记得这里要改过来,否则项目又会报错~。
"upload": {
"flash_size": "16MB",
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
},
至此,保存重启vscode 就可以了