微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

@H_502_5@1. 查询对应 API

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

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

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

@H_502_5@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) 即可。

@H_502_5@3. 注意事项

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

  • 解决方法:在终端里输入 make menuconfig -> SPI flash driver -> writing to dangerous flash regions -> allowed,然后重新编译烧录即可。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐