Цитата
Иными словами, во время записи происходит какая-то чехарда с фьюзами?
Никакой чехарды нет.
Из Application-секции команда SPM
не работает ни при каких фьюзах(вернее, локах

). SPM может выполнятся
только из секции бутлоадера. А может и не выполнятся:
1. если делается попытка записи в секцию Application при выставленом [SPM prohibit in Application section] (иными словами, запрет обновления секции приложения)
2. если делается попытка записи в секцию bootloader'а при выставленом [SPM prohibit in Bootloader section] (запрет обновления секции загрузчика)
То есть, сам загрузчик (реализация его алгоритма) может размещаться где угодно (Application или Bootloader, RWW или NRWW), но непосредственно функция записи или, если еще точнее, команда spm, должна размещаться в секции Bootloader'а. Там же должен размещаться код ожидания окончания записи, если мы вызвали ее из секции приложения и пишем в секцию приложения (сорри за тавтологию)
Цитата
обновлялка загрузчика должна быть в NRWW
Позвольте уточнить - должна быть в секции bootloader'а.
Граница между NRWW и RWW - фиксированная, а Application/Boolloader section - может изменятся фьюзами. Cекция Bootloder'a всегда находится в области NRWW. При определенных фьюзах (BOOTSZ != 0) в область NRWW попадает конец секции Application (в которой spm не работает)
Как писал
IJAR, Вам нужно в секции бутлоадера зарезервировать одну страничку, которая никогда не будет обновлятся (в т.ч. и при обновлении кода загрузчика) и в ней разместить функцию непосредственной записи + ожидания окончания записи странички (при необходимости). Еще в ней можно сделать дополнительную проверку ZH:ZL, чтобы не стереть саму себя.