diff --git a/components/app_update/esp_ota_ops.c b/components/app_update/esp_ota_ops.c index 14b1c8c0ad..0c1a413370 100644 --- a/components/app_update/esp_ota_ops.c +++ b/components/app_update/esp_ota_ops.c @@ -184,7 +184,7 @@ static esp_err_t rewrite_ota_seq(uint32_t seq, uint8_t sec_id, const esp_partiti if (sec_id == 0 || sec_id == 1) { s_ota_select[sec_id].ota_seq = seq; s_ota_select[sec_id].crc = ota_select_crc(&s_ota_select[sec_id]); - ret = spi_flash_erase_range(ota_data_partition->address, SPI_FLASH_SEC_SIZE); + ret = esp_partition_erase_range(ota_data_partition, sec_id * SPI_FLASH_SEC_SIZE, SPI_FLASH_SEC_SIZE); if (ret != ESP_OK) { return ret; } else { @@ -305,7 +305,7 @@ esp_err_t esp_ota_set_boot_partition(const esp_partition_t *partition) if (partition->subtype == ESP_PARTITION_SUBTYPE_APP_FACTORY) { find_partition = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_OTA, NULL); if (find_partition != NULL) { - return esp_partition_erase_range(find_partition, find_partition->address, find_partition->size); + return esp_partition_erase_range(find_partition, 0, find_partition->size); } else { return ESP_ERR_NOT_FOUND; } diff --git a/components/bootloader/src/main/bootloader_start.c b/components/bootloader/src/main/bootloader_start.c index 6b92aaf346..8dd163fe33 100644 --- a/components/bootloader/src/main/bootloader_start.c +++ b/components/bootloader/src/main/bootloader_start.c @@ -272,27 +272,31 @@ void bootloader_main() bootloader_munmap(ota_select_map); if(sa.ota_seq == 0xFFFFFFFF && sb.ota_seq == 0xFFFFFFFF) { - // init status flash - load_part_pos = bs.ota[0]; - sa.ota_seq = 0x01; - sa.crc = ota_select_crc(&sa); - sb.ota_seq = 0x00; - sb.crc = ota_select_crc(&sb); + // init status flash + if (bs.factory.offset != 0) { // if have factory bin,boot factory bin + load_part_pos = bs.factory; + } else { + load_part_pos = bs.ota[0]; + sa.ota_seq = 0x01; + sa.crc = ota_select_crc(&sa); + sb.ota_seq = 0x00; + sb.crc = ota_select_crc(&sb); - Cache_Read_Disable(0); - spiRet1 = SPIEraseSector(bs.ota_info.offset/0x1000); - spiRet2 = SPIEraseSector(bs.ota_info.offset/0x1000+1); - if (spiRet1 != SPI_FLASH_RESULT_OK || spiRet2 != SPI_FLASH_RESULT_OK ) { - ESP_LOGE(TAG, SPI_ERROR_LOG); - return; - } - spiRet1 = SPIWrite(bs.ota_info.offset,(uint32_t *)&sa,sizeof(esp_ota_select_entry_t)); - spiRet2 = SPIWrite(bs.ota_info.offset + 0x1000,(uint32_t *)&sb,sizeof(esp_ota_select_entry_t)); - if (spiRet1 != SPI_FLASH_RESULT_OK || spiRet2 != SPI_FLASH_RESULT_OK ) { - ESP_LOGE(TAG, SPI_ERROR_LOG); - return; - } - Cache_Read_Enable(0); + Cache_Read_Disable(0); + spiRet1 = SPIEraseSector(bs.ota_info.offset/0x1000); + spiRet2 = SPIEraseSector(bs.ota_info.offset/0x1000+1); + if (spiRet1 != SPI_FLASH_RESULT_OK || spiRet2 != SPI_FLASH_RESULT_OK ) { + ESP_LOGE(TAG, SPI_ERROR_LOG); + return; + } + spiRet1 = SPIWrite(bs.ota_info.offset,(uint32_t *)&sa,sizeof(esp_ota_select_entry_t)); + spiRet2 = SPIWrite(bs.ota_info.offset + 0x1000,(uint32_t *)&sb,sizeof(esp_ota_select_entry_t)); + if (spiRet1 != SPI_FLASH_RESULT_OK || spiRet2 != SPI_FLASH_RESULT_OK ) { + ESP_LOGE(TAG, SPI_ERROR_LOG); + return; + } + Cache_Read_Enable(0); + } //TODO:write data in ota info } else { if(ota_select_valid(&sa) && ota_select_valid(&sb)) {