Такой вопрос: есть ли возможность перепрограммировать программную память в ходе работы программы. Программу предполагается расположить по адресам от 0 и подпрограммы самопрограммирования в области бута. При необходимости перешить программу будут вызываться соответствующие подпрограммы (page erase, page write и тп). Будет ли такое работать?
Еще железобетонный вариант - заложиться под внешний еепром, основной программой писать туда, бутом делать своп флеш/еепром, он кстати в этом случае самый маленький. Если что-то не так, откат обеспечен.