[i] Восстановление работы МК К1986ВЕ93У на отладочной плате
Может случиться такая ситуация, когда по неосторожности загруженная в МК программа переопределяет выводы, совмещенные с JTAG, либо выставляет некорректные настройки тактирования. После старта такой программы интерфейс JTAG работать не будет, и МК перестанет определяться программатором. В данной статье рассмотрен выход из данной ситуации на примере заблокированного интерфейса JTAG A в МК К1986BE93У с использованием среды Keil.
Чтобы восстановить работу интерфейса JTAG A, необходимо стереть зашитую в микроконтроллер программу. Используя отладочную плату для МК К1986ВЕ93У с двумя интерфейсами отладки, необходимо воспользоваться вторым интерфейсом - JTAG B. Для этого требуется:
1. Выставить режим загрузки микроконтроллера на отладочной плате перемычками BOOT SELECT SW[2:1] = 10 (EXT_ROM/JTAG_B), как показано на рисунке 1. В этом режиме загрузка К1986ВЕ93У будет происходить из внешней памяти, при этом загруженная во внутреннюю память программа не будет исполняться при подаче питания на микроконтроллер. Этот режим доступен только при работе по отладочному интерфейсу JTAG B.
Рисунок 1 - Установка режима загрузки из внешней памяти (EXT_ROM/JTAG_B) на отладочной плате
2. Подключить программатор к разъёму JTAG B.
3. Подключить питание к отладочной плате.
4. В среде Keil открыть настройки программатора "Options for target.. → Debug → Settings" и установить режим работы SW (Serial Wire), т.к. для интерфейса JTAG B, ввиду малого количества выводов корпуса микросхемы К1986ВЕ93У, реализован режим SW. Проверить, что МК определяется, как показано на рисунке 2.
Рисунок 2 - Настройки программатора в среде Keil "Options for target.. → Debug → Settings"
5. В среде Keil во вкладке "Flash" необходимо выбрать пункт "Erase" (рисунок 4). Если пункт "Erase" не активен, необходимо перейти в настройки проекта "Options for Target …", во вкладку "Utilities" и нажать кнопку "OK".
Рисунок 4 - Выполнение операции стирания Flash памяти МК в среде Keil
Теперь можно вернуть переключатели BOOT SELECT в прежнее положение и снова работать с МК через JTAG A (изменять положение переключателей следует СТРОГО при выключенном питании).
Если операция стирания памяти не выполняется
Состояние выводов MODE (BOOT SELECT) опрашивается начальным загрузчиком только один раз при старте МК после подачи питания, после чего считанный режим загрузки сохраняется в регистре BKP_Reg0E.Mode[14:12]. Далее загрузчик конфигурирует необходимый режим загрузки микроконтроллера и устанавливает бит BKP_Reg0E.FPOR. Состояние логической единицы в данном бите определяет, что загрузочная программа уже выполнялась ранее, и режим BOOT SELECT сохранен. Так как при следующем перезапуске микроконтроллера внешние выводы MODE (BOOT SELECT) уже не опрашиваются, а начальный загрузчик лишь проверяет состояние бита BKP_Reg0E.FPOR, и если FPOR = 1, то режим загрузки берётся из BKP_Reg0E.Mode[14:12]. Так как регистры батарейного домена не обнуляются при сбросе МК, а также сохраняют своё значение при наличии батарейного питания, то для смены режима загрузки важно, чтобы питание с МК было полностью снято. Необходимо, чтобы регистр BKP_Reg0E с битом FPOR обнулился!
Для этого необходимо выполнить следующие условия:
-
Регистры BKP сохраняют свои значения при отключении основного питания, если подано батарейное питания BUcc. Поэтому для сброса регистров BKP необходимо отключить батарейку, если она была установлена!
-
Если к плате подключен программатор, то этого также может быть достаточно для питания микроконтроллера. Программатор необходимо отключить!
Теперь можно выставить BOOT SELECT SW[2:1] = 10, подключить программатор и подать питание на плату. МК должен стать виден в настройках программатора (рисунок 2), операция стирания должна выполниться успешно (рисунок 4).
Дополнительные сведения приведены в статьях:
- [i] Наиболее частые ошибки программирования, пункты "Выводы, совмещенные с JTAG и SWD" и "Запись в регистры порта, выводы которого совмещенные с JTAG и SWD"
Сохранить статью в PDF