Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Stm32F4 Bootloader dual bank

Сб мар 27, 2021 08:58:32

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

Re: Stm32F4 Bootloader dual bank

Пт апр 02, 2021 13:23:48

Вопрос встал как после перезагрузки указать с какого банка памяти грузиться? Много где находил другой алгоритм который после загрузки нового ПО копировал его в первый банк памяти и тогда такой проблемы не возникает.

Создать заголовок прошивки (таблицу в определённом фиксированном месте каждого банка), где хранить некий индекс. При записи новой прошивки (в другой банк) формировать таблицу для него из таблицы активного банка с индексом активного банка увеличенным на 1.
При старте достаточно считать обе таблицы обоих банков; проверить обе на валидность; выбрать ту, которая валидна; если валидны обе - выбрать ту, индекс которой больше на 1 (сравнивать с учётом перехода индекса через 0). Если обе таблицы валидны, но индексы в них отличаются не на 1, а на другое значение - считать что валидной прошивки нет.
В этой же таблице можно хранить и например CRC прошивки. И при определении валидности таблицы, подсчитывать CRC прошивки данного банка.

Re: Stm32F4 Bootloader dual bank

Сб апр 24, 2021 17:38:56

Что бы перезаписывать таблицу, надо выделить целый сектор а в F4 они не маленькие и как то жаба давит >16кб выделять на 100 байт

Re: Stm32F4 Bootloader dual bank

Вс апр 25, 2021 21:03:19

...записываться его во второй банк памяти,....


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

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

Re: Stm32F4 Bootloader dual bank

Чт апр 29, 2021 13:20:04

но в стм32 - там есть возможность прошивку делать из фрагментов загрузки

А для чего так делали ? Линкером разделить ПО на модули и эти куски закидывать ? Правда делить модули надо по размеру сектора ?

Re: Stm32F4 Bootloader dual bank

Сб май 01, 2021 19:46:08

...А для чего....Линкером разделить ПО....делить модули надо по размеру сектора ?



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

(круглый)

Re: Stm32F4 Bootloader dual bank

Ср май 05, 2021 11:29:55

При записи новой прошивки (в другой банк) формировать таблицу для него из таблицы активного банка с индексом активного банка увеличенным на 1.

А как такое записывать в пустой процессор ?
Ответить