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 {
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;
}
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);
-
- 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);
+ // 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);
+ }
//TODO:write data in ota info
} else {
if(ota_select_valid(&sa) && ota_select_valid(&sb)) {