I’ve blogged before why firmware-over-the-air (FOTA) updates are a must-have nowadays, however, my old AVR+RFM based projects were incapable of that due to the lack of external flash to temporary store the new firmware before it is flashed on the chip. The Moteino project does have FOTA capabilities and Felix has created an excellent library for this, sure by using external SPI flash chip. David Berkeley has done similar work with an I2C external chip.
I was contacted a couple of days ago by Vitezslav Vlcek, who managed to do FOTA for the Atmega32U4 + RFM69 based Funky v3 without the use of the external flash module. The catch is that you can use half of the available for custom applications 28K of internal flash. Quite a limitation, but an impressive achievement none the less. He modified the Caterina bootloader to expose a function that wraps the SPM instruction and makes a call from the application code to that function in order to re-flash.
Below is the available memory layout:
Start address | Stop address | Size | Description |
---|---|---|---|
0x0000 | 0x37FF | 14KB=14336B | Application code (app area) |
0x3800 | 0x3801 | 2B | Length of data in temp area (Length >14334 means temp area contains invalid data) |
0x3802 | 0x6FFF | 14334B | Temp area |
0x7000 | 0x7FFF | 4KB=4096 | Bootloader area (bls) |
Read all about it on Vitek’s Github page. Thanks to Vitek for documenting in such detail this!