Андрей Смирнов
Время чтения: ~9 мин.
Просмотров: 65

Что такое JTAG-программатор?

Существует довольно много конфигураций различных программаторов, которые позволяют переписать программные наработки в микроконтроллер. Они могут быть различными, рассчитанными на профессионалов или, наоборот, иметь упрощенный интерфейс. К последним программаторам относится и герой этой статьи. Вы узнаете не только, что он представляет собой, но и как сделать программатор JTAG своими руками. Вы найдёте схемы и фотографии, как должен выглядеть результат.

Чем является JTAG-программатор?

1011579.jpgОн представляет собой упрощенный вариант профессионального AVR JTAG ICE, который, как можно догадаться по его названию, предназначен для программирования микроконтроллеров семейства AVR. Его главное отличие в том, что собрать его может даже непрофессионал, и конечная стоимость будет многократно ниже, чем при покупке заводского. По сути, представленный в статье механизм – китайская реплика, поэтому этот программатор AVR ещё и можно купить. Поэтому не кривя душой можно сказать, что существует ещё и вариант покупки. Но сборка своими руками позволит избежать возможных негативных последствий вследствие дешевизны и низкого качества покупаемых деталей при производстве.

Почему выбирают именно программатор JTAG?

1013611.jpgГлавное – его низкая стоимость и лёгкость в сборке. JTAG-программатор может программировать все устройства, имеющие интерфейс JTAG. Для работы через компьютер необходима среда разработки AVR Studio 4-й или больше версии. С ними этот программатор AVR сможет работать.

Недостатки программатора

Самые последние версии семейств микроконтроллеров, без дополнительной работы, не программируются. Также существуют значительные проблемы с теми представителями, у которых меньше 40 ног и 16 Кб памяти. Как можно заметить, круг потенциальных клиентов довольно ограничен. Но несколько популярных моделей как раз подпадают под него, так что он пригодится.

Схема

1011583.jpgСхема программатора простая, для работы необходима ATMega16 и немного дополнительной электроники. В качестве интерфейса может быть использовано MAX232 (для работы с COM) и FT232RL (для работы с USB). Стоит оговориться, что при использовании второго варианта подключать питание через USB не рекомендуют. В таких случаях из-за ошибки или недосмотра могут получить напряжение защитные диоды, и на выводах FT232RL будет высокое напряжение. Это чревато выходом из строя или программатора, или объекта программирования. Решается этот нюанс подачей питания через плату.

Для большей простоты тем, кто не имеет достаточной квалификации, программатор рассчитан на MAX232, но для другого варианта требуется только установить другой разъем.

Настройка

Учитывая, что есть необходимые схемы, следует только вытравить плату. Далее всё аккуратно подсоединяется, припаивается на места, и проверяется работа программатора путём прошивки загрузчика. Затем следует с AVR Studio обновить прошивку для JTAG-программатора до последней версии или до тех пор, пока надо. К адаптеру подключается программатор. Если он работает – значит можно переходить к следующему разделу, в котором обрисованы нюансы работы и программирования. Следует учесть, что все необходимые провода есть, они только нестандартно расположены.

В качестве подготовки к работе следует выставить Fuse биты. Они зависят от нотации, в которой производится работа. Для лучшего понимания представляем вот такую таблицу:

Бит

Прямая нотация (Даташит, UniProf)

Инверсная нотация (AVR DUDE GUI, PonyProg)

OCDEN

[ ]

[1]

JTAGEN

[ ]

[1]

SPIEN

[ ]

[1]

CKOPT

[1]

[ ]

EESAVE

[1]

[ ]

BOOTSZ1

[ ]

[1]

BOOTSZ0

[ ]

[1]

BOOTRST

[1]

[ ]

BODLEVEL

[1]

[ ]

BODEN

[1]

[ ]

SUT1

[ ]

[1]

SUT0

[ ]

[1]

CKSEL3

[1]

[ ]

CKSEL2

[1]

[ ]

CKSEL1

[1]

[ ]

CKSEL0

[1]

[ ]

А как понять, какую выбрать? Ответ на вопрос прост: следует подключиться к микроконтроллеру и начать читать эти самые биты. Обратите внимание на SPIEN – если есть галочка напротив него, то это значит, что нотация инверсная. Если её нет – значит, она прямая. Если всё было сделано правильно, то программатор готов, чтобы прошивать микроконтроллеры. Но если он в последующем не сможет сделать прошивку – перечитайте и проверьте всё ещё раз.

Работа с программатором

Для большей понятливости будет приведён пример программирования мигания светодиодов. Первоначально следует запустить студию и создать новый проект. Затем выбрать язык программирования (в данном случае ассемблер) и задать имя проекта. Программа сама сможет определить, что вы используете JTAG-программатор. В качестве платформы следует выбрать его, а в окошечке рядом – программируемый им микроконтроллер. Далее всё довольно обычно – следует только вбить текст для программы. Чтобы читатели могли проверить работоспособность, предлагаем опробовать JTAG-программатор указанным в статье кодом. Можно увидеть, что диоды начали мигать очень быстро, что неудивительно, ведь здесь не предусмотрена задержка. Итак, программатор, инструкция его создания и использования есть. Вам остаётся только воплотить полёт своей фантазии.

Немного о практике. Для проверки подключите к порту А 3 светодиода. Затем к плате подключается: четыре провода интерфейса (TCK, TDI, TMS, TDO) и 2 силовых Vcc идут на плюс, а GND подключается к земле. Всё, питание есть, можно идти дальше. В студии необходимо провести компиляцию кода и его запуск. Проект быстро скомпилируется, тут же будет прошит и начнёт работать. Чтобы следить за процессом исполнения, можно нажать F11, и тогда можно наблюдать, на каком ряду кода сейчас программа. Для этого достаточно поднести курсор к ряду, который включает светодиод, и он загорится. Существует ещё много экспериментов. Помните, что для того чтобы что-то сделать, необходимо работать. Пускай продвижение будет медленным, но со временем вы сможете получить именно то, что хотите, главное — не опускать руки и продолжать экспериментирование с упором на теоретическую базу (без неё никак).

Простой самодельный адаптер USB-JTAG

« previous entry | next entry »2010 апр 20 | 23:53

Для отладки современных микропроцессоров используется интерфейс JTAG. Реже SPI, разница небольшая. Раньше можно было через тривиальную схему подцепить JTAG на параллельный порт LPT, в крайнем случае на COM. Но нету больше LPT, и COM-порты тоже на глазах исчезают из обихода. Оказывается, выход есть. Простейший самодельный адаптер USB-JTAG делается на базе микросхемы FTDI FT232R. Для простоты можно взять готовую инструментальную мини-плату, например FT232RL Breakout (ценой $15) или MMUSB232RL (1640 рублей). Особенность этой микросхемы в том, что она имеет специальный режим работы «синхронный bitbang», позволяющий с заданной частотой выдавать нужные сигналы и одновременно считывать входы. Подробности можно почитать в описании «Bit Bang Modes for the FT232R and FT245R».Объём работы минимальный: к мини-плате припаиваем шлейф из семи проводов с разъёмом на конце. Пример схемы для процессора Элвис Мультикор:Для прочих архитектур, например ARM или Atmel AVR, понадобится другая распайка разъёма JTAG.Правки для отладчика OpenOCD можно скачать здесь. Например, отладка ARM7 посредством GDB идёт на ура. Используя OpenOCD как прокси.

Ссылка | | | Пожаловаться

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

Микроконтроллеры ATmega можно условно разделить на две категории: те, что программируются только через ISP (шина из проводов MISO, MOSI, SCK + управление сбросом) и те, что имеют в дополнении к этому интерфейс JTAG. Из набора «горячо любимых» Arduino-контроллеров к первой категории относятся ATmega8, ATmega168, ATmega328P. Но и во второй категории тоже присутствует один экземпляр: ATmega2560, используемый в Arduino/Freeduino MEGA 2560.JTAG — это механизм, позволяющий автоматически контролировать качество монтажа печатных плат: не закоротилось ли чего или, наоборот, плохо припаялось. Очень полезная вещь в промышленном масштабе, особенно когда на одной плате «счастливо» уживаются микросхемы разных фирм (стандарт IEEE 1149.1, на котором базируется JTAG — открытый). Тем более логично, что многие производители микросхем добавили возможность программирования и отладки своих чипов через все тот же JTAG. Для чего может потребоваться JTAG в повседневной жизни? В моем случае — вдруг потребовалось читать и писать содержимое flash ATmega128, а вместо привычной вилочки ISP наружу торчит только JTAG. В этом случае уже простой программатор типа USBasp, увы, не поможет. Фирменное устройство от ATMEL стоит немало (а я и так уже прикупил нанопаяльник,   денег после этого осталось ноль отрицательное количество):jtagice-mk2.jpg Что же делать? Я уже говорил, что стандарт — открытый, а процесс программирования через JTAG хорошо документирован — достаточно открыть любой даташит на микроконтроллер ATMEL с JTAG-интерфейсом. Кстати, когда-то, на заре появления микроконтроллеров фирмы ATMEL, фирма-конкурент Microchipдразнила ATMEL показательно разобрала какой-то инструментальный девайс для разработчика программ микроконтроллеров ATMEL и демонстрировала, что он собран на микроконтроллерах её производства — то бишь, на PIC-ах. Впрочем, было это невероятно давно, мир теперь уже совсем другой (c). В интернете есть масса вариантов самодельных копий фирменного AVR JTAG ICE. Одну из таких упрощенных до полного безобразия можно найти, например, здесь. Что самое забавное —  работает, хотя состоит практически из одного МК: ATmega16. Оригинальный программатор использует чип, полностью совместимый с ATmega16, что делает возможным заливание в самопальный программатор прошивок от фирменного (правда, новые навряд ли будут появляться, поскольку AVR JTAG ICE дано снят с производства). Для начала надо достать основной компонент — микроконтроллер ATmega16-16PU и кварц 7.3728 МГц, после чего собрать на макетке минимальную схему для программирования:avrminiice-pu-onlymcu.png Схема — классическая, необходима для запуска ATmega. Напомню, что обычно делают в таком случае:

  • подключают питание —  все GND и VCC (обычно выводов GND не менее двух);
  • ставят между GND и VCC поближе к ножкам ATmega фильтрующий помехи конденсатор 100 нФ (или 0.1 мкФ — кому как больше нравится);
  • подключают между XTAL1 и XTAL2 кварц и соединяют их через два одинаковых конденсатора на землю (разброс номинала указан в документации, не обязательно использовать 22 пФ, можно, например, и 33 пФ);
  • притягивают линию сброса к VCC через резистор 10К и вешают конденсатор 100 нФ на землю, чтобы обеспечить небольшую задержку линии сброса после подачи питания.

Выглядеть это будет приблизительно так (всё благополучно влезает на макетку 300+100):step1.jpg Соединяем схему через вилку ISP с программатором и запитываем от него же, затем зашиваем прошивку и выставляем фьюз-биты:avrdude -C avrdude.conf -c usbasp -p m16 -U hfuse:w:0x1f:m -U lfuse:w:0xcf:mavrdude -C avrdude.conf -c usbasp -p m16 -U flash:w:miniICE.hex Если операция прошла успешно, полдела сделано. Можно аккуратно удалить ISP-разъем и преобразовать схему к следующему виду:avrminiice-pu.png На макетке это выглядит так:step2.jpg Наверное, вы обратили внимание, что в схеме я использовал USB-чип последовательного порта — FT232RL. Это гораздо удобнее, чем COM-порт, по многим причинам. Но в макетку SSOP не воткнешь, поэтому я использую самостоятельно изготовленный переходник USB-TTL:step3.jpg В классическом варианте линий JTAG чуть больше, чем на схеме:avrjtag_con_0.png Обязательные сигналы — TCK, TDO, TDI и TMS (тактовая, выход данных, вход данных и управление режимом теста). NSRST и NTRST — это управление сбросом на шине JTAG. В нашем случае не обязательны, поскольку сброс МК можно инициировать командной последовательностью на линиях обязательных сигналов. Теперь разберемся с питанием. Желательно, чтобы внутрисхемный программатор питался от программируемой схемы. Этим сразу решается проблема стыковки уровней программируемой схемы и программатора. С другой стороны, если в программаторе есть конвертер уровней сигналов, различие VCC программатора и target уже не является проблемой (не считая усложнение схемы программатора). С обязательной линии VTref должно подаваться напряжение питания устройства. По идее, он нужен вышеуказанному чипу конвертера уровней, внутри программатора. Но если JTAG ICE планирует питаться от target-а, то используется линия Vsupply. Для простоты, их можно объединить, но это не обязательно. В зависимости от положения джампера SV2 на схеме ATmega16 будет питаться либо от USB, либо от target-а. Я на макетку ставить переключающий джампер поленился, ибо предполагалось питание только от target. Зато перед включением три раза проверил, что питание с USB не подается. Для надежности, на плате USB-TTL разомкнул джампер подачи питания. Далее контакт M8RX соединяется с ножкой МК RX, M8TX — с TX. Подключаемся к программатору через AVR Studio, и если все правильно соединено, то можно будет прочитать сигнатуру и прошивку.stepl.jpg(устройство справа я обязательно рассмотрю позже, пока что могу только повторить, что внутри у него ATmega128)Единственный минус клона AVR JTAG ICE — сравнительно небольшой список поддерживаемых МК:

  • ATmega128
  • ATmega128A
  • ATmega16
  • ATmega162
  • ATmega165
  • ATmega169
  • ATmega16A
  • ATmega32
  • ATmega323
  • ATmega32A
  • ATmega64
  • ATmega64A

Еще, говорят, поддерживается AT90CAN128, но проверить это нет возможности 🙁Используемые источники:

  • https://fb.ru/article/216339/chto-takoe-jtag-programmator
  • https://ramlamyammambam.livejournal.com/122684.html
  • http://mk90.blogspot.com/2010/02/jtag.html

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации