Внутрисхемная отладка AVR через JTAG ICE. Программаторы AVR Схема подключения jtag ice atmega8

С статье подробно, начиная с процесса поиска информации рассказывается, о возникновении моей схемотехнической версии популярного программатора AVR JTAG ICE (mk!!). Данный программатор интересен тем, что для AVR-микроконтроллёров, имеющий встроенный JTAG. может производить отладку "на кристалле", чего не позволяют программаторы с универсальным для AVR интерфейсом ISP.

Захотел я сделать себе отладчик для 8-ми битных AVR контролеров серии ATMega16A/32A/64A/128/256. К сожалению имеющиеся у меня программаторы умеют прошивать микроконтроллер через низковольтный ISP интерфейс, но не умеют проводить отладку. Это же касается покупного - самого первого в моей коллекции - программатора от магазина ekits.ru . Поэтому поискав немного по интернету решил собрать себе JTAG программатор.

Итак, начнем поиск информации в интернете. Так как какую-то часть материалов я уже просмотрел в сети, то сейчас буду просто давать ссылки с кратким описанием..

У EagleCAD есть и полуофициальный сайт eaglecad.ru и там тоже есть учебник,но похоже поддерживается он энтузиастом и не слишком тщательно Также можно не лишним будет почитать пару статей сс сайта chipenable.ru :

  • EagleCAD. Создание электронной схемы .
  • EagleCAD. Создание компонента. Часть 1 .
  • EagleCAD. Создание компонента. Часть 2 .

Продолжим поиск по рунету.

  • Про встраиваемые системы", к сожалению прекративший свое развитие в 2006, содержит статью "JTAG для AVR ". Хотя информация и устаревшая, но кое какие решения в части "транзисторно-диодной" обвязки почерпнуть из материалов можно.
  • Просто шикарный обвес хоть и в другом программаторе. Пример для подражания. Без шуток. См. .
  • Известный и уважаемый ресурс - сайт "Паяльник " порадовал очень и очень хорошей статьей по тематике: "Клон AVR JTAG ICE " и этот клон довольно сильно отличается от того, что я рассматривал раньше. Ядро-то у него тоже самое - микроконтроллер Mega16A, а вот обвязка уже гораздо внушительнее. Да бы не нарушать ни чьих авторских прав, позаимствую ссылку на картинку.

Плата у авторов получилась 48 на 40,6 мм, что впечатляет. Правда авторам для этого пришлось монтировать компоненты на обе стороны платы. Что же. Я тоже так делал, когда хотел сэкономить:). Ну да начну разбор этой весьма насыщенной и грамотной схемы. С моей дилетантской точки зрения, разумеется.

  1. Независимый источник питания на линейном стабилизаторе. Буду я ставить дополнительный источник питания? USB порт только по стандарту должен питать устройства с током потребления до 500 мА. По факту современные USB- порты еще мощнее. Программировать какие-либо процессоры напряжениями более 5 В этот тип программатора не позволяет. Резюме: мне дополнительный источник питания не нужен.
  2. Использование буферной микросхемы 74FC244. Однозначно "да". Буферную микросхему введу. И размещу, если получится, на обратной стороне:).
  3. Ножки с 19 по 22 (родной JTAG МК) подтянуты к земле через резисторы 10к. У меня, как и во всех ранее рассмотренных схемах, висят. Решение: сделаю так же. В крайнем случае резисторы 0805 много места не занимают (а можно и 0603 в проект внести) и их можно просто не запаивать. Вообще я часто на платах вижу не запаянные компоненты. И считаю, что это нормально. Резерв который можно использовать, а можно оставить или заменить на перемычку.
  4. Очень трепетно "обвешены" порты питания МК. Но у меня это уже предусмотрено:).
  5. В выходных цепях использованы резисторы по 200 и 220 Ом. В предыдущих схемах по 100 Ом. Я же планировал использовать более "знакомые" мне 68 Ом... Подумаю-попробую.
  6. JTAG выводов на два больше. Дополнительно выведены сигналы VTRef и Vsup - питание целевой платы. У меня не будет отличного от 5 вольт питания.
  7. Защитный стабилитрон на питании МК - у меня предусмотрен.

(Позднее прим. Ни контактных площадок, ни перемычек, заземляющих выход enable в разводке платы я не предусмотрел. Поэтому если когда-нибудь все же возникнет желание подробно разобраться в ньансах програмной реализации протокола и подключить управление выводами буферной схемы, то придется вносить изменения. Не думаю, что это будет скоро.)

Рисуем схему по пути сразу вставляя какие-то бродящие в голове идеи.

Вариант разведения дорожек получился у меня таким (выводные компоненты: USB-B, кварцевый резонатор, штырьки, - выведены на одну сторону, разведение платы на второй стороне):

3D-модель приближенно должна выглядеть так:

В настоящий момент у меня нет в наличии ни Mega16A, ни "экзотического" кварца на 7,3728 МГц. Поэтому практическая проверка схемы пока откладывается. Как только появятся компоненты - статья будет продолжена.

Итак, заказанные компоненты наконец-то доставлены и у меня нашлось время заняться своим хобби. Внешний вид собранной платы моего клона выглядит так:

Вид сверху

Вид снизу. По отношению к синтезированной в SketchUp фактическая плата получилась визуально инвертированной - верх и низ поменялись местами. По крайней мере так можно судить по асимметрично расположенному модулю СР2102.

Нашел ссылку на коммерческую реализацию данного программатора. Просят больше 35$. Однако...

Не знаю как вы, но я считаю программатор расходником при разработке устройств. За 1.5 года в общий сложности у нас сгорело 3 программатора. К великому удивлению JTAG отладчики для AVR стоят дорого. Причем не совсем понятно за что производитель хочет почти 100 баксов. В итоге сделал несколько самодельных отладчиков, заказал их на промышленное изготовление и теперь пользуюсь ими.

Схему разводил сам по шаблонам из сети, коих множество. Но схема не уместилась в один слой, поэтому имеет смысл развести еще раз, если вы будете делать ее ЛУТом в один слой, то понадобится 4 проводка.

Теперь о вопросе прошивки, AVR Studio имеет в своем составе возможность прошивки через бутлодер. Фирменные программаторы имеют на борту бутлодер для возможности обновления прошивки. Но мы прошьем контроллер сразу прошивкой без использования бутлодера, поэтому сначала вам понадобится внутрисхемный программатор или другой отладчик. Микроконтроллер требуется при этом прошивать на другой плате, так как на этой нет ISP разъема, но в данном случае, это не особо накладно. Файл прошивки miniIce.hex внутри проекта.

Принципиальная схема:

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

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

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

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

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

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

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

Схема

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

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

Настройка

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

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

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

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

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

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

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

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

Иногда, программа зашитая в микроконтроллера работает совсем не так как надо её создателю. Тогда наступает стадия отладки (Отлаживать — избавлять программу от лажи:-) прим. автора) Кто-то использует для отладки USART, кто-то цепляет на свободную ногу мк светодиод, кто-то записывает отладочные данные в EEPROM итд. Одним словом вариантов тут масса. Но самым удобным способом отладки на мой взгляд, является отладка с использованием специальных устройств называемых отладчиками. Отладчик позволят построчно исполнять программу зашитую в микроконтроллер, ставить точки останова. В процессе отладки программисту доступны все регистры микроконтроллера. Так же с помощью него можно прошить микроконтроллер и изменить фьюзы.
Представляю вашему вниманию отладчик JTAG ICE :

Житаг штука хорошая. Но есть один маленький минус. Контроллеры поддерживающие отладку через jtag, это все контроллеры начиная с Atmega16 и старше. Для некоторых мк из семейства tiny существует отладочный интерфейс Debug Wire, но такой отладчик еще вроде-бы ни кто не делал самостоятельно. Схема отладчика состоит из двух частей:

  1. Схема согласования с ПК
  2. Непосредственно сам отладчик

При выборе первой части схемы всё зависит от того есть ли у тебя свободные COM или USB порты. Поскольку COM порт у меня всего один и находится далеко под столом, то я решил использовать usb порт используя для этого свой . Для тех кто хочет использовать COM порт я тоже нарисовал схему. В качестве преобразователя уровней там используется популярная микросхема MAX232. Главным минусов использования COM порта является отсутствие питания. В моем же варианте я беру 5 вольт прямо от USB порта,что очень удобно так как не болтается лишних проводов. Печатка разведена только под вторую часть схемы т.к. сам преобразователь usb-uart у меня уже был в наличии, и я просто соединил две платы проводками. Используемый корпус — G1068B.

Теперь немного технических нюансов. Фьюзы микроконтроллера нужно выставить следующим образом:

Вообще по идее отладчик должен обновляться из студии но я не стал заморачиваться по этому поводу и не зашивал загрузчик. Саму прошивку можно взять из папки Atmel\AVR Tools\JTAGICE\Upgrade.ebn

Но прошивка эта в хитроумном формате EBN а нам для прошивки нужен HEX. Помочь сконвертировать прошивку в нужный формат сможет программа EbnToHex. Или же можно взять готовых HEX в конце страницы.

Схема отладчика ниже:


Если планируется использовать интерфейс USB то нужно исключить из схемы все элементы находящиеся внутри прямоугольника. А выводы TxD и RxD микроконтроллера припаять к интерфейса USB-UART (TxD контроллера к RxD преобразователя и RxD контроллера к TxD преобразователя). Так же не забываем объединять земли и питание. Жду отзывов и вопросов в комментариях.