Some projects need change firmware w/o access to device - only GPRS/RF access. This is a first part about common principal about FOA.
First - we can't garanty time execution to write data to flash.
Second - i want change firmware correctly (w/o lost functionality)
I have only flash and ram. In common i need double flash (for old version and second part for new). Also startup code need understand which version correct and execute it.
Now start to realize - divide flash to half (minus service areas).
For example STM32RB contain 128Kb. 20Kb per bootloader, 8 Rb for EEPROM emulation - i have 100Kb flash. Div by 2 - means 50Kb for firmware (of course i can use 256 or 512Kb flash if 50Kb not enough).
To realize FOA i need any net service (for example GPRS) on other side support partial download (it's depends on RAM size on device - i work with 1-2Kb chunk).
Next realize partial download of FW. Write block (or some blocks) to flash and if success need set flags about chunk write correctly (in a real it's the same as i make a transaction to DB).
After all chunks written - i set final flag to bootloader about FW version good.
Currently work with GPRS connection, RFM23B (868MHz adapter) and TR24 adapter.
To be continued....