STM32F(1) Embedded Bootloader (Как?)

Все о микроконтроллерах: AVR, PIC, STM8, STM32, Arduino, Altera, Xilinx, все что угодно. Этот раздел для всего что клацает байтиками.
Qic
Сообщения: 985

Сообщение Qic » 19 апр 2017, 14:11

Доброго времени суток.
Столкнулся с необходимостью программировать удалённый контроллер (в частности stm32f103vet6) желательно через RS-485.
Следовательно требуется загрузчик. В принципе понятно что можно сделать в основной программе задачу в которую попадёт при объявлении сигнала. Которая потушит всё остальное и обновит прошивку.
Однако меня беспокоит что что-то может пойти не так (связь/питания) и очередная страница не сойдется по crc или еще чего. И получится кирпич.
Как это делают?

Аватара пользователя
BSVi
Адепт
Сообщения: 3508
Откуда: Киев

Сообщение BSVi » 19 апр 2017, 14:55

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

Qic
Сообщения: 985

Сообщение Qic » 19 апр 2017, 17:17

Но например прикладную программу мне надо сделать с адресом попозже? Т.е. вопрос к комплиятору, делать как простую программу но указывать стартовый адрес позже загрузчика?
Есть ли необходимость делать загрузчик целиком на одной странице памяти чтобы он не участвовал в прошивке?

Например загрузчик работает из начала при сбросе. Загружается, проверяет хэш, если в порядке то ждет какое-то запланированное время, скажем 50мс, и если ничего не происходит делает переход на исполняемую программу.
Например ведущий говорит всем заткнуться (если это CAN) и ведомому говорит сброс. Пока происходит сброс, ведущий стучится в порт флаг-фреймом. Загрузчик видит флаг-фрейм и мы прошиваемся.

А еще наверное можно сделать обновление загрузчика из основной программы? И впринципе тиражирование своей прошивки соседям.
Если всё так то впринципе понятно.

P.S. Заблокированный от считывания через SWD флеш можно разблокировать из программы?

Аватара пользователя
BSVi
Адепт
Сообщения: 3508
Откуда: Киев

Сообщение BSVi » 19 апр 2017, 17:25

Т.е. вопрос к комплиятору, делать как простую программу но указывать стартовый адрес позже загрузчика?

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

Есть ли необходимость делать загрузчик целиком на одной странице памяти чтобы он не участвовал в прошивке?

Конечно.

А еще наверное можно сделать обновление загрузчика из основной программы?

Можно.

Заблокированный от считывания через SWD флеш можно разблокировать из программы?

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

Qic
Сообщения: 985

Сообщение Qic » 19 апр 2017, 17:50

Спасибо за ответы. Про флеш стмки почитал, проблем не должно возникнуть. Поскольку программа передаётся открытым текстом не думаю блокировать флеш от считывания. (Но как говориться "А вдруг")

Вернуться в «Микроконтроллеры и ПЛИС»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя