static bool esp32_vfs_dev_partition_erase(struct mgos_vfs_dev *dev, size_t offset, size_t len) { const esp_partition_t *p = (esp_partition_t *) dev->dev_data; if (len > p->size || offset + len > p->address + p->size || offset % SPI_FLASH_SEC_SIZE != 0 || len % SPI_FLASH_SEC_SIZE != 0) { LOG(LL_ERROR, ("Invalid erase args: %u @ %u", len, offset)); return false; } mgos_wdt_feed(); esp_err_t r = spi_flash_erase_range(p->address + offset, len); LOG((r == ESP_OK ? LL_VERBOSE_DEBUG : LL_ERROR), ("%s: %s %u @ %d = %d", p->label, "erase", len, offset, r)); return (r == ESP_OK); }
int32_t hal_flash_erase(hal_partition_t pno, uint32_t off_set, uint32_t size) { uint32_t addr; uint32_t start_addr, end_addr; int32_t ret = 0; hal_logic_partition_t *partition_info; partition_info = hal_flash_get_info( pno ); if(size + off_set > partition_info->partition_length) return -1; start_addr = ROUND_DOWN((partition_info->partition_start_addr + off_set), SPI_FLASH_SEC_SIZE); end_addr = ROUND_DOWN((partition_info->partition_start_addr + off_set + size - 1), SPI_FLASH_SEC_SIZE); for (addr = start_addr; addr <= end_addr; addr += SPI_FLASH_SEC_SIZE) { ret = spi_flash_erase_range(addr, SPI_FLASH_SEC_SIZE); if (ret != 0) return ret; } return 0; }
esp_err_t IRAM_ATTR spi_flash_erase_sector(size_t sec) { CHECK_WRITE_ADDRESS(sec * SPI_FLASH_SEC_SIZE, SPI_FLASH_SEC_SIZE); return spi_flash_erase_range(sec * SPI_FLASH_SEC_SIZE, SPI_FLASH_SEC_SIZE); }