Содержание

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

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

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

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

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

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

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

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

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

Reset

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

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. Огромное человеческое за это ему СПАСИБО!