Tengo un proyecto actualizable con stm32f407. Código producido por cubeMx. El código del actualizador comprueba la nueva actualización de Internet y, si está disponible, escriba el programa principal en 0x08020000 (sector 5) y este código del actualizador en 0x08000000 (sector 0 y sector 2 el tamaño es menor a 32kb)
Estoy escribiendo un código (será como el proyecto principal en el sector 5), puedo actualizar el código del actualizador en el sector 0
Mi problema es cuando borro el sector 0 AC6 y doy un error para ajustar la dirección y STM32 deja de funcionar. Creo que es debido a que el sector 0 tiene una situación especial. No hay problema con borrar otros sectores. ¿Hay alguna forma de borrar sector0 con un programa incrustado? El problema comienza después de eliminar 1 sector. No se que hacer. (perdón por mi mal inglés)
for(data_sayac=0;data_sayac<=filelength/2;data_sayac+=2)
{
// UPDATEDATA_ADDRESS defined 0x08040000 (sector 6 where my new updater data copied from internet)
// UPDATEDATA_ADDRESS2 defined 0x08000000 (sector 0 where my new updater program copied from sector 6)
Data1=Flash_oku_halfword(UPDATEDATA_ADDRESS+data_sayac);
if(Flash_oku_halfword(UPDATEDATA_ADDRESS2+data_sayac)!=0xFFFF) // if sector is not empty erase first
{
HAL_FLASH_Unlock();
Get_Sector= FLASH_If_GetSectorNumber(UPDATEDATA_ADDRESS2+data_sayac); // get sector number by address
FLASH_Erase_Sector(Get_Sector,VOLTAGE_RANGE_3); //erase sector
}
Flash_yaz_halfword(UPDATEDATA_ADDRESS2+data_sayac,Data1); // write halfword
}