Программирование AVR: решение проблем, FAQ Как отключить JTAG? Tue, November 13 2018  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Как отключить JTAG? Печать
Добавил(а) microsin   

У микроконтроллеров AVR интерфейс JTAG по умолчанию включен (у тех AVR, у которых JTAG есть на выводах корпуса). При этом выводы JTAG совмещены с портами ввода/вывода, и при разрешенном JTAG нет возможности их использовать. Теряется целых 4 порта GPIO, соответствующих сигналам TMS, TCK, TDI и TDO интерфейса JTAG. Как отключить JTAG, чтобы можно было воспользоваться дополнительными портами ввода/вывода?

Для этого есть 2 способа: изменить значение фьюза JTAGEN, и изменить значение бита JTD регистра MCUCR.

[Фьюз JTAGEN]

По умолчанию фьюз JTAGEN запрограммирован, т. е. находится в лог. 0. Это соответствует состоянию, когда JTAG разрешен, и воспользоваться портами ввода/вывода, привязанными к сигналам JTAG, нельзя. Если перевести бит JTAGEN в незапрограммированное состояние (лог. 1), то интерфейс JTAG отключается, и можно программно управлять состоянием его портов ввода/вывода.

AVR JTAGEN fuse

Изменить состояние фьзов можно только с помощью программатора ISP или JTAG. Имейте в виду, что если Вы переведете JTAGEN в незапрограммированное состояние с помощью JTAG, то в результате JTAG отключится, и Вы потеряете управление чипом. По этой причине способ отключения JTAG с помощью фьюзов мне не нравится.

[Бит JTD регистра MCUCR]

Есть еще одна возможность отключить JTAG: программный. Бит JTD регистра MCUCR управляет рабочим состоянием JTAG.

AVR JTD bit in MCUCR register

Аббревиатура JTD названия бита соответствует сокращению от JTAG Disable. Когда бит JTD в состоянии лог. 0 (это состояние по умолчанию после включения питания и сброса), интерфейс JTAG разрешен (конечно при условии, что запрограммирован фьюз JTAGEN, о чем мы уже говорили). Если бит JTD в состоянии лог. 1, то интерфейс JTAG запрещен. В запрещенном состоянии освобождаются порты ввода/вывода, привязанные к сигналам JTAG.

Для того, чтобы избежать случайного разрешения или запрещения JTAG, существует специальная процедура модификации бита JTD. Программа должна дважды записать бит JTD в нужное значение в интервале времени 4 тактов ядра, чтобы реально поменялось значение бита JTD. Пример кода, который запрещает JTAG:

   MCUCR = (1<<JTD);
   MCUCR = (1<<JTD);

Имейте в виду, что не следует менять значение бита JTD, когда Вы применяете встроенную систему отладки микроконтроллера (On-Chip Debug, OCD).

 

Добавить комментарий


Защитный код
Обновить

Top of Page