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