Я что-то не слышал, чтобы перед записью нового апдейта хоть один "фирмач" прям вот ОЧИЩАЛ носитель.
Там механизм немного другой. Дело в том, что это т н средний МК(по их классификации, а точнее по объёму памяти). У него штатно доступна прошивка только через интерфейс программатора или по UART. А вот в старших моделях уже можно шить и по USB, и по CAN, и по Ethernet(где он есть). Но наверное в Акае посчитали и решили что так дешевле.
В результате у них задача стояла так - наладить программирование средствами самой прошивки. Зачем они сделали то что сделали, я не знаю, но получается что прошивку они кладут с адреса 5000, а при этом она же с нулевых адресов не умещается, т е она больше 5000. Почему выбрали такой адрес, непонятно, м б загнать выше и тогда было бы всё проще.
Фигня в том, что МК стартует с нулевых адресов. Более того, в руководстве прописаны адреса векторов прерываний, которые судя по всему зашиты в железе. Т е скажем идёт прерывание по таймеру - МК лезет в оговоренные адреса, а там адрес перехода.
И эта таблица тоже не м б перемещена и находится около начала прошивки.
Сейчас получается, что стартует прошивка с нулевых адресов(это зашито аппаратно), а потом переходит в 5000-е и исполняется там. При этом по идее(я не всё знаю, это предположение) в начале нужна только часть, а в 5000 адресе она не нужна, ибо там исполняться не может. А сейчас имеем 2 копии начала прошивки, в которых используется только половина.
Я далёк от мысли, что они писали прошивку в кодах, а никакой вменяемый язык после компилирования такое сделать не может(ну, мне так кажется

), если это не заложить специально.
Я сначала думал, что при перепрошивке какой-то её кусок, который исполняется в начале, кладёт новую прошивку с 5000 адреса. А потом переписывает в нулевые.
Но зачем-то в прошивке заложено так, что основная часть работает в 5000-х адресах. А для переписи в нулевые как минимум надо менять таблицу прерываний, да и адрес перехода после старта, и возможно что-то ещё, если там есть непосредственная адресация. но так глубоко я не копался, на это надо гораздо больше времени.
Собственно проблема в этом одна. Если мы исполняем код из нулевых адресов, то перезаписать его мы не можем.
Аналогично, если код исполняется из 5000 адресов, то теперь мы его переписать на лету не можем.
Ибо записи в этом МК предшествует стирание блока 1к. А только потом запись.
Как решается эта проблема, я так и не понял. Скорее всего какой-то кусок прошивки при переписи работает всё же из нулевых адресов. Раз получилось, что основная прошивка лежит с 5000.
Но как выяснить, какой и где, не знаю. По идее надо копать код на предмет каких-то характерных кусков, но каких - я ещё не знаю. А т к это потребует намного больше времени, чем то что было до этого, то боюсь что и не узнаю.

Ибо есть ещё работа.