I'm wondering, is it possible? This is what I think it will be like if it were going to be implemented:
Acquire the firmware from a host somewhere.
Since the payload would have a max of 31 bytes, let's use only 16, for the sake of playing it safe.
Let's say the new firmware, the hex file, has a size of 60kb.
Which means that there will be 60,000/16= 3750 times of transfer minimum.
The new firmware will be downloaded to a clean section of the flash memory, and integrity checks will be performed.
Then the self-programming begins.
Clearly it has some major flaws, right away I can think of one: what if the firmware is much larger, for example, 90kb? If I had only a flash of 128kb, woudln't that make the whole thing impossible?