ESP 系列杂谈(四):ESP32 使用 flash API 擦除分区表

1. 查询对应 API

首先可以在 SPI Flash API 里查看对应的 flash API。发现使用如下 API:

//spi_flash_erase_range(start_addr, size);
spi_flash_erase_range(0x8000,0x8000);

其中第一个参数 start_addr 代表偏移量,第二个参数 size 代表需要擦除的区域大小。

2.查询分区表偏移量与大小

在 esp-idf 里运行 make flash 后,可以看到提示 esptool.py --chip esp32 -p /dev/ttyUSB0 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio --flash_freq 40m --flash_size 4MB 0x8000 partition_table/partition-table.bin 0x1000 bootloader/bootloader.bin 0x10000 hello-world.bin。可以看到其中分区表的偏移量 0x8000 partition_table/partition-table.bin。然后程序从 0x10000 开始,所以分区表大小为 0x10000 - 0x8000 = 0x8000。故在使用函数 spi_flash_erase_range(0x8000,0x8000) 即可。

3. 注意事项

在使用 spi_flash_erase_range(0x8000,0x8000) 后,有时芯片会一直复位并报错,这是因为并没有开启修改危险 flash 区域的权限。

  • 解决方法:在终端里输入 make menuconfig -> SPI flash driver -> writing to dangerous flash regions -> allowed,然后重新编译烧录即可。
发布了53 篇原创文章 · 获赞 21 · 访问量 8368

猜你喜欢

转载自blog.csdn.net/zztiger123/article/details/105507231