======Не работает JTAG A====== Может случиться такая ситуация, когда по неосторожности зашитая в МК программа переопределяет выводы, совмещенные с JTAG А. После этого интерфейс JTAG не будет работать. Программа при запуске будет переопределять эти выводы, и прошить МК через данный интерфейс будет невозможно. Рассмотрим выход из этой ситуации на примере МК 1986BE93 в среде Keil. Чтобы восстановить работу интерфейса JTAG A, необходимо стереть зашитую в МК программу. Используя отладочную плату с двумя интерфейсами отладки, мы воспользуемся вторым интерфейсом - JTAG B. Для этого необходимо: 1. Выставить режим загрузки МК на отладочной плате перемычками BOOT SELECT SW[2:1] = 10 (EXT_ROM/JTAG_B). В этом режиме загрузка МК будет происходить из внешней памяти, и зашитая во внутреннюю память программа не будет переопределять выводы, необходимы для отладки. Этот режим доступен только для JTAG B. {{prog:jtag:jtag_3.jpg}} 2. Подключить программатор к разъёму JTAG B. 3. Подключить питание к отладочной плате. 4. Проверить, определяется ли МК в Keil "Options for target1 -> debug -> Settings". Обязательно нужно выбирать в настройках порт SW , т.к. для интерфейса JTAG B, ввиду малого количества выводов корпуса МК 1986ВЕ93У, реализован режим SW. {{prog:jtag:jtag.png}} Также для работы JTAG B на отладочной плате МК 1986ВЕ93У необходимо снять перемычки X31 и X33, которые определяют режим работы выводов PD0 и PD1 - либо JTAG B, либо кнопки UP, DOWN. {{prog:jtag:jtag_1.jpg}} 5. В Keil во вкладке "Flash" выбрать пункт "Erase". Если пункт "Erase" не активен, необходимо перейти в настройки проекта "Options for Target ...", во вкладку "Utilities" и нажать кнопку "OK". {{prog:jtag:jtag_2.png}} Теперь можно вернуть переключатели 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. Поэтому для сброса бит **необходимо отключить батарейку**, если она была установлена! * Если к плате подключен программатор, то довольно часто, этого достаточно для аварийного питания микроконтроллера. **Программатор необходимо отключить!** Теперь можно выставить BOOT SELECT = b10, подключить обратно программатор и подать питание на плату. Контроллер должен стать виден в настройках программатора SW Device и стереться Flash-Erase. Дополнительные сведения: *[[https://startmilandr.ru/doku.php/doc:doclist:bootloader#%D1%80%D0%B5%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_-_%D0%BA%D0%B0%D0%BA_%D0%BE%D0%B6%D0%B8%D0%B2%D0%B8%D1%82%D1%8C_%D0%BA%D0%B0%D0%BC%D0%B5%D0%BD%D1%8C|Реанимация - как оживить "камень"]] * [[https://startmilandr.ru/doku.php/prog:debug:mosterror#%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D1%8B_%D1%81%D0%BE%D0%B2%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81_jtag|Выводы, совмещенные с JTAG]] * [[https://startmilandr.ru/doku.php/prog:debug:mosterror#%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C_%D0%B2_%D0%BF%D0%BE%D1%80%D1%82%D1%8B_%D1%81%D0%BE%D0%B2%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%D0%BC%D0%B8_jtag_%D0%B8_swd|Запись в порты совмещенные с выводами JTAG и SWD]]