реклама на сайте
подробности

 
 
> STM32F051 - запуск приложения из заводского загрузчика, Команда Go запускает, но приложение работает криво
scifi
сообщение Jan 27 2016, 14:32
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



В системе есть ведущий МК и ведомые (STM32F051). У ведомых на BOOT0 подан уровень "1", так что при старте в них запускается заводской загрузчик. Ведущий проверяет наличие правильной версии прошивки и при необходимости перепрошивает их. Потом выдаёт команду "Go" для запуска прошивки. Прошивка отлажена в обычном режиме (BOOT0 = "0").
Проблема в том, что при запуске командой "Go" прошивка не работает. Она спотыкается, когда разрешаю хотя бы одно прерывание. Я бы посмотрел внутрисхемным отладчиком, но заводской загрузчик отрубает SWD (для включения USART2, видите ли). Я запускал заводской загрузчик под отладчиком, нашёл, где он блокирует SWD, отменил блокировку, но после команды "Go" что-то там расклеивается и отладчик показывает полный бред.
Что интересно, STM пишут, что команда "Go" возвращает настройки всей периферии в исходное состояние (как после сброса). Но, очевидно, что-то в МК всё-таки меняется и мешает работе прошивки.
Пока не могу угадать, где это вредное изменение и как его исправить. Имею возможность выводить на UART информацию (регистры, память), но пока нет идей, куда смотреть.

Update:
Ну вот, нужно было написать вопрос, чтобы понять, какой ответ. Видимо, дело в таблице векторов прерываний. Должно быть, там висит таблица загрузчика. Надо исправлять SYSCFG_CFGR1, поле MEM_MODE. Пойду проверять.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alechek
сообщение Jan 27 2016, 15:17
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(scifi @ Jan 27 2016, 19:32) *
Ну вот, нужно было написать вопрос, чтобы понять, какой ответ. Видимо, дело в таблице векторов прерываний. Должно быть, там висит таблица загрузчика. Надо исправлять SYSCFG_CFGR1, поле MEM_MODE. Пойду проверять.

Естественно проверять.
А SWD порт надо просто в самом начале своей программы разрешить (назначить на ноги).
Не знаю, как там с STM загрузчиком, но у NXP команды выполнения своей программы нет. Есть возможность передать управление по произвольному адресу.
Так вот я просто сделал малеький перемещаемый код, который сбрасывает камень (по собаке). Загружаю его в ОЗУ, потом даю ему управление. Работает безотказно.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 14:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01358 секунд с 7
ELECTRONIX ©2004-2016