Страница 1 из 1

Stm32F4 Bootloader dual bank

Добавлено: Сб мар 27, 2021 08:58:32
pokk
Добрый день.
Недавно увидел в процессорах stm32 с двумя банками памяти функцию SWAP банков.
И сразу загорелся добавить в приложение функцию bootloader, с возможностью откатиться предыдущую версию ПО (т.е хранение двух образов прошивки).
Основная логика работы в принципе понятна, основное приложение работает + принимает образ прошивки и записываться его во второй банк памяти, после чего проверяет CRC и выдает сообщение на перезагрузку для обновления. Вопрос встал как после перезагрузки указать с какого банка памяти грузиться? Много где находил другой алгоритм который после загрузки нового ПО копировал его в первый банк памяти и тогда такой проблемы не возникает.

Re: Stm32F4 Bootloader dual bank

Добавлено: Пт апр 02, 2021 13:23:48
jcxz
[uquote="pokk",url="/forum/viewtopic.php?p=4004945#p4004945"]Вопрос встал как после перезагрузки указать с какого банка памяти грузиться? Много где находил другой алгоритм который после загрузки нового ПО копировал его в первый банк памяти и тогда такой проблемы не возникает.[/uquote]
Создать заголовок прошивки (таблицу в определённом фиксированном месте каждого банка), где хранить некий индекс. При записи новой прошивки (в другой банк) формировать таблицу для него из таблицы активного банка с индексом активного банка увеличенным на 1.
При старте достаточно считать обе таблицы обоих банков; проверить обе на валидность; выбрать ту, которая валидна; если валидны обе - выбрать ту, индекс которой больше на 1 (сравнивать с учётом перехода индекса через 0). Если обе таблицы валидны, но индексы в них отличаются не на 1, а на другое значение - считать что валидной прошивки нет.
В этой же таблице можно хранить и например CRC прошивки. И при определении валидности таблицы, подсчитывать CRC прошивки данного банка.

Re: Stm32F4 Bootloader dual bank

Добавлено: Сб апр 24, 2021 17:38:56
pokk
Что бы перезаписывать таблицу, надо выделить целый сектор а в F4 они не маленькие и как то жаба давит >16кб выделять на 100 байт

Re: Stm32F4 Bootloader dual bank

Добавлено: Вс апр 25, 2021 21:03:19
kolobok0
[uquote="pokk",url="/forum/viewtopic.php?p=4004945#p4004945"]...записываться его во второй банк памяти,....[/uquote]

такое делал на меге128. но в стм32 - там есть возможность прошивку делать из фрагментов загрузки, осталось как при бэкапе иметь возможность полностью проапдэйтить прошивку - фулл, только одного модуля - инкреемнтально или дифф. = для этого заводиться страница описания. Там не то что две версии, там можно и поболее хранить и выбирать более последнюю устойчивую. а грузить из любого канала, даже который сам себя "переписывает"...

(круглый)
ЗЫ
Ну это типо по большому секрету, дцатилетний дзэн в разработке под мк :)

Re: Stm32F4 Bootloader dual bank

Добавлено: Чт апр 29, 2021 13:20:04
pokk
но в стм32 - там есть возможность прошивку делать из фрагментов загрузки
А для чего так делали ? Линкером разделить ПО на модули и эти куски закидывать ? Правда делить модули надо по размеру сектора ?

Re: Stm32F4 Bootloader dual bank

Добавлено: Сб май 01, 2021 19:46:08
kolobok0
[uquote="pokk",url="/forum/viewtopic.php?p=4024221#p4024221"]...А для чего....Линкером разделить ПО....делить модули надо по размеру сектора ?[/uquote]


выше основную идею и профиты которые из этого следует - уже выше вскольз описал.
каждый кусок - имеет хидер описания. бутлодырю остаёться только, опираясь на статистику отказов, загрузить более устойчивую версию..
модули не обязательно кратны. но начинаются с кратным шагом во флэше - собственно как пзу драйвера железа во времена доса, если знаете...

(круглый)

Re: Stm32F4 Bootloader dual bank

Добавлено: Ср май 05, 2021 11:29:55
pokk
[uquote="jcxz",url="/forum/viewtopic.php?p=4008718#p4008718"]При записи новой прошивки (в другой банк) формировать таблицу для него из таблицы активного банка с индексом активного банка увеличенным на 1.[/uquote]
А как такое записывать в пустой процессор ?