Инструменты пользователя

Инструменты сайта


doc:doclist:bootloader

Загрузка микропроцессора и реанимация

За режим работы микроконтроллеров отвечают выводы MODE[2:0] и они должны быть выставлены до подачи питания. Значение этих выводов опрашивается только один раз при подаче питания и в дальнейшем данные выводы могут быть использованы для другого назначения. Выбранный режим работы МК при возникновении Reset не изменяется.

Диаграмма загрузки микроконтроллеров 1986ВЕ1 и 1986ВЕ3:

Диаграмма загрузки микроконтроллера 1986ВЕ4:

Диаграмма загрузки микроконтроллеров 1986ВЕ9х:

Включение питания

При включении питания первым всегда работает начальный загрузчик. Этот загрузчик настраивает порты на чтение и считывает состояние выводов MODE[2:0]. После этого он конфигурирует микроконтроллер для работы в заданном режиме и переходит в данный режим.

  • Если выбран режим Flash памяти, то происходит запуск программы с начального адреса Flash памяти. Устанавливается бит FPOR.
  • Если выбран режим внешней шины, то необходимые порты настраиваются на работу как шина и происходит запуск программы с начального адреса внешней памяти. Устанавливается бит FPOR.
  • Если выбран режим UART, то настраивается аппаратный UART с настройками, указанными в спецификации, и ожидаются команды извне. Бит FPOR не устанавливается.

Бит FPOR регистра BKP_REG_OE батарейного домена используется для индикации того, что начальный загрузчик отработал. Этот регистр не сбрасывается при последующих Reset. В 1986ВЕ9х микроконтроллерах значение выводов MODE так же записывается в этот регистр и используется в дальнейшем.

В зависимости от МК загрузчик расположен:

  • 1986ВЕ1, 1986ВЕ3, 1986ВЕ9х - в масочном ПЗУ и не может быть изменен
  • 1986ВЕ4 - в информационной памяти Flash, может быть изменен или случайно затерт. Загрузчик автоматически восстанавливается при стирании всей памяти в Keil. За это отвечает FLM файл.

Reset

При возникновении ресета микроконтроллеры ведут себя по-разному:

  • 1986ВЕ1 и 1986ВЕ3 - Бит FPOR является ChipSelect для ПЗУ с начальным загрузчиком.
    1. Если FPOR = 0, то выбрано масочное ПЗУ и снова запускается загрузчик. Бит FPOR может остаться равен "0", если при подаче питания был активирован режим UART. В тоже время, если по UART будет загружена в ОЗУ и запущена программа, которая выставляет FPOR = 1, то при выставлении данного бита происходит аппаратный Reset. ПЗУ c загрузчиком после этого становится не доступно.
    2. Если FPOR = 1, то в зависимости от вывода ITCMLAEN происходит старт программы из внутренней или внешней памяти. Вход в Bootloader не происходит.
  • 1986ВЕ9х - Запускается BootLoader, но не считывает состояние MODE c ножек, а использует это значение MODE из регистра BKP_REG_OE. Определять значение MODE по внешним выводам, или брать значение из регистра BKP_REG_OE загрузчик решает по состоянию бита FPOR. Далее загрузчик отрабатывает так же, как и при подаче питания.
  • 1986ВЕ4У - Аналогично 1986ВЕ1, с той лишь разницей, что нет варианта запуска программы из внешней памяти.

FLM файл

FLM - файл, это обычная программа для микропроцессора в среде Keil, реализованная по определенному шаблону и используемая для загрузки бинарного кода программы в Flash память процессора или, например, внешнее ПЗУ. Поскольку в разных МК для записи памяти требуется различная настройка периферии, шин, тактирования и прочего, то каждый FLM реализует требуемые настройки под необходимый режим. Так, например, для прошивки программы во внутреннюю Flash память и во внешнее ПЗУ требуются разные FLM.

Как написать свой FLM файл можно узнать в документации Keil - Creating New Algorithms.

Запуск программы из ОЗУ

Keil позволяет записать программу в ОЗУ микроконтроллера и осуществить запуск оттуда. Это позволяет сохранить ресурс Flash памяти при разработке. Поскольку, согласно спецификации,

Flash память микропроцессора допускает порядка 10000 циклов перезаписи, при этом нельзя допускать циклы "стирания-записи"/ "стирания-стирания" одной ячейки с периодом менее 4мс.

Пример реализации - Запуск программы в ОЗУ из Keil.

Кроме этого записать программу в ОЗУ и запустить можно через UART. Подробнее - Запуск программы в ОЗУ через UART.

Реанимация - как оживить "камень"

Для отладки программ на микроконтроллерах, как правило, реализовано два JTAG интерфейса JTAG_A и JTAG_B. Выводы этих интерфейсов являются выводами GPIO и могут быть использованы программистом в своих целях. Если использованы выводы JTAG_A, то остается возможность отладки через JTAG_B. Если же переопределены порты обоих портов JTAG, тогда отладка не возможна.

Случаются варианты когда программист по неосторожности отключил тактирование всех портов в своей программе и МП никак не реагирует на попытки перепрошить программу через любой JTAG.

Если посмотреть на диаграммы вначале статьи, то видно, что интерфейс JTAG ломает только программа в Flash, запущенная после отработки BootLoader. Но остается возможность после запуска BootLoader пустить исполнение по другим ветвям - на внешнюю шину или UART. Тогда пользовательская программа, переопределяющая выводы JTAG не отработает, и они останутся доступны.

Варианты "оживления" процессора:

Стирание FLASH памяти при выборе внешней шины

Выбираем выводами MODE[2:0] режим загрузки на внешнюю шину. Для 1986ВЕ9х это комбинация на переключателях демо-платы "010". Далее запускаем Keil, открываем или создаем пустой проект под данный микропроцессор. Если этого не сделать, то пункт меню Flash - Erase недоступен. При создании проекта будет выбран FLM файл, который непосредственно стирает Flash память.

Запускаем Flash - Erase и теперь наша память пуста. Можно переключиться в режимы MODE[2:0] с отладкой через JTAG.

Если кнопка Erase неактивна, то необходимо открыть опции проекта и открыть вкладку Utilites. Это видимо глюк в Кейл, если в данную вкладку не войти ни разу, то данный пункт меню неактивен.

Загрузка через UART

Второй вариант связан с применением утилит, которые загружаются в ОЗУ в режиме UART загрузчика и могут прошить во FLASH новую пользовательскую прошивку. Утилиты такие представлены на форуме пользователем Vasili. Огромное человеческое за это ему СПАСИБО!

doc/doclist/bootloader.txt · Последние изменения: 2018/02/21 18:06 — katya