Радость и горе. Опять убил процессор.

Aug 12, 2017 19:51

Ну что, я наконец добрался до реализации обновления прошивки и успешно завершил саму стадию по обновлению.

Провел тестирование и обновление успешно завершилось.
Какой алгоритм? В целом, достаточно простой и банальный.

Есть новая прошивка, которую мы складываем в конец FLASH-памяти, выполняясь из текущей.
Когда закончили, копируем новую на место старой. Исполняясь из SRAM.

Ура, это победа!

Но, я делал это по 4 байта (т.е. по 32 бита), что в целом занимало 22 секунды для перезаписи 27 КБ.
Т.е. где-то 1 КБ в секунду.

Захотелось быстрее.
В контроллерах STM32L1 можно программировать аж по 128 байт за раз.
Ну это то, что надо! Бежать, лопатой грести!

Правда оказалось, что именно эта часть копирования какая-то бажная. И интернет пестрит сообщениями на форумах о том, что как-то хреново работает.
Бился, бился.
Короче, я отключаю прерывания и начинаю копировать 128 байт. И оно зависает.

Всё, отладчиком подцепится не могу, даже под Reset'ом не выходит.



Какой вывод?
Пока не написал финальный полностью рабочий вариант - пусть в начале загрузки стоит таймаут.
В пол-секунды. Особенно если потом сразу очень хочется прерывания отключить.
Да еще и уйти в  функцию, которая при работе запрещает доступ к FLASH-памяти.
Пока не закончит.
А она. Никогда. Не. Закончит.
Previous post
Up