Tronix286
Nov 27 2014, 12:53
Здравствуйте,
Нет ли готового решения бутлодера, который при старте смотрит флажок во внешней spi flash, и если он установлен, перепрошивает себя, считывая прошивку из той же spi flash?
Возможно просто велосипедю, да к тому же еще и не работает. А именно, при передаче управления в основную прошивку она не стартует. Замотался
Сергей Борщ
Nov 27 2014, 13:59
У меня готового нет. Но если вы покажете свой код передачи управления - совместными усилиями можем найти ошибку.
Если перепрошивает именно
себя, то передача управления на новую прошивку для LPC1768:
Код
__DSB();
WDT.MOD = B0 | B1;
WDT.FEED = 0xAA;
WDT.FEED = 0x55;
WDT.FEED = 0xAA;
WDT.FEED = 0xAA;
while (1);
Velund
Nov 29 2014, 13:20
Ну я бы не сказал, что вариант перешивки "себя" так уж безопасен.
У меня сделан бутлоадер, который вписан в первые 32к флеша (меньше с декомпрессором/декриптовщиком прошивки из сериального флеша, минимальной диагностикой железа и сервисным меню с загрузкой по xmodem не получилось). Он стартует, заданное время ждет с последовательного порта последовательность запроса входа в локальный режим, потом проверяет контрольные суммы основной прошивки, если порушены - смотрит нет ли готового загрузочного пакета в сериальном флеше (и прошивает его если есть), и если уж совсем плохо - выдает индикацию ошибки и ждет инициации локального режима уже до упора. Если прошивка во флеше есть - двигает векторы прерываний на начало области application и переходит по ее ресетному вектору.
Если прошивке надо удаленно обновиться, она грузит пакет в serial flash, ставит флаг в BBRAM (у часов) и передает управление бутлоадеру. Флаг снимается бутлоадером только в случае успешной прошивки или после 5 неудачных попыток (счетчик тоже в энергонезависимой памяти).
Несколько тысяч изделий "в поле" больше года, пока проблем не зафиксировано.