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
,然后重新编译烧录即可。