За режим работы микроконтроллеров отвечают выводы MODE[2:0] и они должны быть выставлены до подачи питания. Значение этих выводов опрашивается только один раз при подаче питания и в дальнейшем данные выводы могут быть использованы для другого назначения. Выбранный режим работы МК при возникновении Reset не изменяется.
Диаграмма загрузки микроконтроллеров 1986ВЕ1 и 1986ВЕ3:
При включении питания первым всегда работает начальный загрузчик. Этот загрузчик настраивает порты на чтение и считывает состояние выводов MODE[2:0]. После этого он конфигурирует микроконтроллер для работы в заданном режиме и переходит в данный режим.
Бит FPOR регистра BKP_REG_OE батарейного домена используется для индикации того, что начальный загрузчик отработал. Этот регистр не сбрасывается при последующих Reset. В 1986ВЕ9х микроконтроллерах значение выводов MODE так же записывается в этот регистр и используется в дальнейшем.
В зависимости от МК загрузчик расположен:
При возникновении ресета микроконтроллеры ведут себя по-разному:
FLM - файл, это обычная программа для микропроцессора в среде Keil, реализованная по определенному шаблону и используемая для загрузки бинарного кода программы в Flash память процессора или, например, внешнее ПЗУ. Поскольку в разных МК для записи памяти требуется различная настройка периферии, шин, тактирования и прочего, то каждый FLM реализует требуемые настройки под необходимый режим. Так, например, для прошивки программы во внутреннюю Flash память и во внешнее ПЗУ требуются разные FLM.
Как написать свой FLM файл можно узнать в документации Keil - Creating New Algorithms.
Keil позволяет записать программу в ОЗУ микроконтроллера и осуществить запуск оттуда. Это позволяет сохранить ресурс Flash памяти при разработке. Поскольку, согласно спецификации,
Пример реализации - Запуск программы в ОЗУ из Keil.
Кроме этого записать программу в ОЗУ и запустить можно через UART. Подробнее - Запуск программы в ОЗУ через UART.
Для отладки программ на микроконтроллерах, как правило, реализовано два JTAG интерфейса JTAG_A и JTAG_B. Выводы этих интерфейсов являются выводами GPIO и могут быть использованы программистом в своих целях. Если использованы выводы JTAG_A, то остается возможность отладки через JTAG_B. Если же переопределены порты обоих портов JTAG, тогда отладка не возможна.
Случаются варианты когда программист по неосторожности отключил тактирование всех портов в своей программе и МП никак не реагирует на попытки перепрошить программу через любой JTAG.
Если посмотреть на диаграммы вначале статьи, то видно, что интерфейс JTAG ломает только программа в Flash, запущенная после отработки BootLoader. Но остается возможность после запуска BootLoader пустить исполнение по другим ветвям - на внешнюю шину или UART. Тогда пользовательская программа, переопределяющая выводы JTAG не отработает, и они останутся доступны.
Варианты "оживления" процессора:
Выбираем выводами MODE[2:0] режим загрузки на внешнюю шину. Для 1986ВЕ9х это комбинация на переключателях демо-платы "010". Далее запускаем Keil, открываем или создаем пустой проект под данный микропроцессор. Если этого не сделать, то пункт меню Flash - Erase недоступен. При создании проекта будет выбран FLM файл, который непосредственно стирает Flash память.
Запускаем Flash - Erase и теперь наша память пуста. Можно переключиться в режимы MODE[2:0] с отладкой через JTAG.
Если кнопка Erase неактивна, то необходимо открыть опции проекта и открыть вкладку Utilites. Это видимо глюк в Кейл, если в данную вкладку не войти ни разу, то данный пункт меню неактивен.
Второй вариант связан с применением утилит, которые загружаются в ОЗУ в режиме UART загрузчика и могут прошить во FLASH новую пользовательскую прошивку. Утилиты такие представлены на форуме пользователем Vasili. Огромное человеческое за это ему СПАСИБО!