Stm32F4 Bootloader dual bank

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Stm32F4 Bootloader dual bank

Сообщение pokk »

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

Re: Stm32F4 Bootloader dual bank

Сообщение jcxz »

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

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

Re: Stm32F4 Bootloader dual bank

Сообщение pokk »

Что бы перезаписывать таблицу, надо выделить целый сектор а в F4 они не маленькие и как то жаба давит >16кб выделять на 100 байт
kolobok0
Грызет канифоль
Сообщения: 296
Зарегистрирован: Ср дек 30, 2009 09:55:39

Re: Stm32F4 Bootloader dual bank

Сообщение kolobok0 »

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


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

(круглый)
ЗЫ
Ну это типо по большому секрету, дцатилетний дзэн в разработке под мк :)
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: Stm32F4 Bootloader dual bank

Сообщение pokk »

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

А для чего так делали ? Линкером разделить ПО на модули и эти куски закидывать ? Правда делить модули надо по размеру сектора ?
kolobok0
Грызет канифоль
Сообщения: 296
Зарегистрирован: Ср дек 30, 2009 09:55:39

Re: Stm32F4 Bootloader dual bank

Сообщение kolobok0 »

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



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

(круглый)
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: Stm32F4 Bootloader dual bank

Сообщение pokk »

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

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

Вернуться в «ARM»