Добрый день.
Недавно увидел в процессорах stm32 с двумя банками памяти функцию SWAP банков.
И сразу загорелся добавить в приложение функцию bootloader, с возможностью откатиться предыдущую версию ПО (т.е хранение двух образов прошивки).
Основная логика работы в принципе понятна, основное приложение работает + принимает образ прошивки и записываться его во второй банк памяти, после чего проверяет CRC и выдает сообщение на перезагрузку для обновления. Вопрос встал как после перезагрузки указать с какого банка памяти грузиться? Много где находил другой алгоритм который после загрузки нового ПО копировал его в первый банк памяти и тогда такой проблемы не возникает.
Stm32F4 Bootloader dual bank
Re: Stm32F4 Bootloader dual bank
Вопрос встал как после перезагрузки указать с какого банка памяти грузиться? Много где находил другой алгоритм который после загрузки нового ПО копировал его в первый банк памяти и тогда такой проблемы не возникает.
Создать заголовок прошивки (таблицу в определённом фиксированном месте каждого банка), где хранить некий индекс. При записи новой прошивки (в другой банк) формировать таблицу для него из таблицы активного банка с индексом активного банка увеличенным на 1.
При старте достаточно считать обе таблицы обоих банков; проверить обе на валидность; выбрать ту, которая валидна; если валидны обе - выбрать ту, индекс которой больше на 1 (сравнивать с учётом перехода индекса через 0). Если обе таблицы валидны, но индексы в них отличаются не на 1, а на другое значение - считать что валидной прошивки нет.
В этой же таблице можно хранить и например CRC прошивки. И при определении валидности таблицы, подсчитывать CRC прошивки данного банка.
Re: Stm32F4 Bootloader dual bank
Что бы перезаписывать таблицу, надо выделить целый сектор а в F4 они не маленькие и как то жаба давит >16кб выделять на 100 байт
Re: Stm32F4 Bootloader dual bank
...записываться его во второй банк памяти,....
такое делал на меге128. но в стм32 - там есть возможность прошивку делать из фрагментов загрузки, осталось как при бэкапе иметь возможность полностью проапдэйтить прошивку - фулл, только одного модуля - инкреемнтально или дифф. = для этого заводиться страница описания. Там не то что две версии, там можно и поболее хранить и выбирать более последнюю устойчивую. а грузить из любого канала, даже который сам себя "переписывает"...
(круглый)
ЗЫ
Ну это типо по большому секрету, дцатилетний дзэн в разработке под мк
Re: Stm32F4 Bootloader dual bank
но в стм32 - там есть возможность прошивку делать из фрагментов загрузки
А для чего так делали ? Линкером разделить ПО на модули и эти куски закидывать ? Правда делить модули надо по размеру сектора ?
Re: Stm32F4 Bootloader dual bank
...А для чего....Линкером разделить ПО....делить модули надо по размеру сектора ?
выше основную идею и профиты которые из этого следует - уже выше вскольз описал.
каждый кусок - имеет хидер описания. бутлодырю остаёться только, опираясь на статистику отказов, загрузить более устойчивую версию..
модули не обязательно кратны. но начинаются с кратным шагом во флэше - собственно как пзу драйвера железа во времена доса, если знаете...
(круглый)
Re: Stm32F4 Bootloader dual bank
При записи новой прошивки (в другой банк) формировать таблицу для него из таблицы активного банка с индексом активного банка увеличенным на 1.
А как такое записывать в пустой процессор ?