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);
}
Exemple #2
0
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;
}
Exemple #3
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);
}