Не работает JTAG A

Может случиться такая ситуация, когда по неосторожности зашитая в МК программа переопределяет выводы, совмещенные с JTAG А. После этого интерфейс JTAG не будет работать. Программа при запуске будет переопределять эти выводы, и прошить МК через данный интерфейс будет невозможно. Рассмотрим выход из этой ситуации на примере МК 1986BE93 в среде Keil.

Чтобы восстановить работу интерфейса JTAG A, необходимо стереть зашитую в МК программу. Используя отладочную плату с двумя интерфейсами отладки, мы воспользуемся вторым интерфейсом - JTAG B. Для этого необходимо:

1. Выставить режим загрузки МК на отладочной плате перемычками BOOT SELECT SW[2:1] = 10 (EXT_ROM/JTAG_B). В этом режиме загрузка МК будет происходить из внешней памяти, и зашитая во внутреннюю память программа не будет переопределять выводы, необходимы для отладки. Этот режим доступен только для JTAG B.

jtag_3.jpg

2. Подключить программатор к разъёму JTAG B.

3. Подключить питание к отладочной плате.

4. Проверить, определяется ли МК в Keil "Options for target1 → debug → Settings". Обязательно нужно выбирать в настройках порт SW , т.к. для интерфейса JTAG B, ввиду малого количества выводов корпуса МК 1986ВЕ93У, реализован режим SW.

Также для работы JTAG B на отладочной плате МК 1986ВЕ93У необходимо снять перемычки X31 и X33, которые определяют режим работы выводов PD0 и PD1 - либо JTAG B, либо кнопки UP, DOWN.

jtag_1.jpg

5. В Keil во вкладке "Flash" выбрать пункт "Erase". Если пункт "Erase" не активен, необходимо перейти в настройки проекта "Options for Target …", во вкладку "Utilities" и нажать кнопку "OK".

Теперь можно вернуть переключатели 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 обнулился!

Как это сделать:

Теперь можно выставить BOOT SELECT = b10, подключить обратно программатор и подать питание на плату. Контроллер должен стать виден в настройках программатора SW Device и стереться Flash-Erase.

Дополнительные сведения: