Внутрисхемный эмулятор. Программаторы AVR Почему выбирают именно программатор JTAG



При разработке и отладке программ под микроконтроллеры, возникают вопросы, связанные с программированием и отладкой программы в реальной схеме. Если с программированием микроконтроллеров AVR особых проблем не возникает, поскольку существует множество схем для «заливки» прошивки в кристалл, одной из простейших таких схем является схема получившая название «пять проводов», то с отладкой программы такого богатого выбора не существует.

Для отладки программы возможно использования только двух вариантов – это программный симулятор и внутрисхемный JTAG эмулятор-программатор. Программный симулятор, как правило, не может учитывать всех особенностей работы схемы, таких как внешние воздействия, совместная работа с другими устройствами и прочее. С аппаратными программаторами-отладчиками JTAG появляется возможность пошаговой отладки программы напрямую в самом микроконтроллере установленном непосредственно в схему, просмотра и изменения всех регистров микроконтроллера, установка breakpoints и конечно же внутрисхемного программирования микроконтроллера. Но стоимость оригинального AVR JTAG ICE MkII выпускаемого Atmel колеблется в районе 300 евро, а его аналога AVRDRAGON выпускаемого серийно около 3000руб., что является очень дорогим для людей, занимающихся созданием устройств на микроконтроллерах AVR «для себя».

Но к счастью удалось создать клон, оригинального AVR JTAG ICE , который стоит существенно дешевле оригинала и позволяет проводить программирование и отладку микроконтроллеров AVR с интерфейсом JTAG.

Рис 1. Принципиальная электрическая схема клона AVR JTAG ICE

Принципиальная электрическая схема приведена на рис. 1. Основой данного JTAG служит микроконтроллер DD3 AVR ATMega16. Микросхема DD2 MAX232 выполняет роль преобразователя интерфейса RS232 в ТТЛ уровни UART. Микросхема DD1 предназначена для защиты входных и выходных цепей микроконтроллера DD3 и согласования напряжения логических уровней при использовании внешнего питания.

Питание JTAG может браться от цепей питания отлаживаемого устройства через четвертый контакт vTref XP3, а также может использоваться внешнее через разъем XP1 и ХР2. Внешнее напряжение может быть в диапазоне от 7 до 15В. При использовании внешнего источника питания, вывод vTref разъема XP3можно не подключать.

Светодиод HL2 отображает наличие питания, HL1 режим работы JTAG.

Подключение JTAG к отлаживаемому микроконтроллеру осуществляется через стандартный десяти выводной разъем. Схема подключения которого изображена на рис. 2.

Рис 2. Схема подключения AVR JTAG ICE к отлаживаемому устройству

Существует несколько вариантов BootLoader загрузчиков для прошивки JTAG, но на мой взгляд наиболее удачный вариант получился у Кротевич Виталия (Vit). Его загрузчик наиболее близко повторяет фирменный и позволяет обновлять микропрограмму JTAG непосредственно из AVRStudio без перезагрузки JTAG и входа в режим программирования через BootStart. В случае если не планируется производить обновление прошивки JTAG`a , то загрузчик можно не прошивать, а «зашить» только оригинальную прошивку от AVRStudio.

Чтобы «зашить» bootloader в JTAG можно воспользоваться программатором AVReal, PonyProg, STK200, «пять проводов», любо любым другим имеющимся в наличии и совместимым с AVR ISP. Подключение программатора производится к ISP разъему программирования ХР4. Файл прошивки JTAG_ICE.hex.

Пример программирования фьюзов показан на рисунке 3.

Рис 3. Установка фьюзов для AVR JTAG ICE

Пример работы AVR JTAG ICE показан на рисунке 4. В качестве примера произведено считывание сигнатуры ATMega128

Рис 4. Чтение сигнатуры микроконтроллера ATMega128 с помощью AVR JTAG ICE

Рис 5. Изображение верхнего слоя трассировки печатной платы, с нанесенными элементами

Рис 6. Изображение нижнего слоя трассировки печатной платы, с нанесенными элементами

Фотографии готового устройства:

P.S. Схема и трассировка печатной платы разработаны автором статьи, загрузчик использован Кротевич Виталия (ака Vit), прошивка от оригинальной AVRStudio.

При написании статьи использовались следующие источники:

2. Официальное руководство пользователя AVR JTAG ICE JTAGuserguide.pdf

Скачать прошивку, файлы печатных плат

С статье подробно, начиная с процесса поиска информации рассказывается, о возникновении моей схемотехнической версии популярного программатора 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$. Однако...

  • Официальный программатор, выпускаемый фирмой Atmel стоит примерно 300 евро (без доставки и растаможивания). Вариант подешевле — можно найти неофициальные «клоны» по цене примерно $150 .
  • Вариант еще дешевле, но требующий усилий, т.к. из разряда «сделай сам»:
    в сети через поисковик (clone AVR-JTAGICE mkII ) без проблем можно найти схему с прошивкой программатора сопровождаемые инструкцией по сборке.

Характеристики программатора

  • Полная поддержка JTAG программирования, поддерживает также интерфейсы ISP и DebugWire.
  • Подключение к PC осуществляется с помощью USB 1.1 или RS-232 интерфейса
  • Точки останова по адресам памяти программ и памяти данных
  • Все операции и точки останова выполняются в режиме реального времени
  • Напряжение подаваемое в отлаживаемую схему 1.8-5.5 В
  • Напряжение внешнего источника питания 9-12В, так же отладчик может питаться от USB порта

Программатор AVR-JTAGICE3

Официальный программатор для микроконтроллеров фирмы Atmel семейства AVR, поддерживающих интерфейс для отладки и программирования JTAG.

Думаю для отладки AVR микроконтроллеров в среде AVR Studio 5 является лучшим выбором. Кстати, неофициальных клонов найти не смог. Если кто знает, прошу сообщить в комментариях к странице.

При начале эксплуатации я испытывал некоторые трудности с его использованием — казалось что он страшно глючит, при этом приходилось постоянно перезагружать среду AVR Studio чтобы он «ожил».

В принципе, все оказалось просто — не стоит во время запущенной отладки пытаться производить какие-либо иные действия с программатором, например, вызывать окно с настройкой фьюзов. Со временем я к нему приспособился и совершенно без проблем его использую.

Из преимуществ выделю его малые габариты (по сравнению с его предшественником AVR-JTAGICE mkII) и универсальность — кроме интерфейса JTAG также доступны и aWire, SPI и PDI.

Из сложностей — его стоимость. Считаю, что она достаточно прилична — около 15000 рублей через официальных дилеров в России.

Характеристики программатора:

  • Поддержка интерфейсов JTAG, aWire, SPI и PDI
  • 3 аппаратных точки останова и 1 маскируемая
  • Символьная отладка сложных типов данных
  • До 128 программных точек останова
  • Поддержка микросхем с напряжением питания от 1.8 до 5.5В
  • Высокая скорость работы (загрузка 256KB программы ~14 сек. (XMEGA по интерфейсу JTAG) interface)
  • Питание от USB.

Программатор AVR-JTAG-USB

Применяется данный программатор для микроконтроллеров фирмы Atmel семейства AVR, поддерживающих интерфейс для отладки и программирования JTAG. Данный программатор является клоном оригинального Atmel’евского программатора. Производит его фирма Olimex и отличается он от официального более выгодной ценой (приблизительно 4000 рублей через официальных дилеров в России, и естественно, можно дешевле напрямую из-за бугра), при этом по функциональности вполне надежный и во время работы с ним нареканий у меня не возникало. Работает и питается от USB порта компьютера.

Единственная особенностью на которую стоит обратить заранее — это то, что при использовании в качестве средства разработки AVR Studio работать будет только под AVR Studio 4. Если вы собираетесь работать на AVR Studio 5 то он для отладки абсолютно бесполезен, т.к. не поддерживается. Поэтому для пятой версии я купил другой программатор — AVR-JTAGICE3.

Характеристики программатора

  • Программирование всех AVR микроконтроллеров с поддержкой JTAG интерфейса;
  • Целевое напряжение 3,0 — 5,0В;
  • Питание от USB интерфейса;
  • JTAG коннектор совместим с Atmel 2×5 пин коннектором JTAG;
  • Совместим с Atmel AVR STUDIO для программирования, эмуляции в режиме реального времени, отладки, выполнения программы в пошаговом режиме, установки точек останова, дампа памяти и т.д.;
  • Полная эмуляция всех аналоговых и цифровых функций;
  • Полная поддержка программирования через JTAG порт;
  • Обновление через AVR STUDIO;
  • Разъём USB интерфейса – типа «А».

Комплектация: программатор/эмулятор AVR-JTAG-USB.
Для работы может понадобиться USB кабель «А-А» — SCUAA-1

Одним из самых мощных отладочных инструментов в микроконтроллерной среде является JTAG — внутрисхемный отладчик .

Суть тут в чем — через JTAG адаптер микроконтроллер подключается напрямую к среде программирвания и отладки, например к AVR Studio . После чего микроконтроллер полностью подчиняется студии и дальше шагу не может ступить без ее разрешения. Доступна становится пошаговое выполнение кода, просмотр/изменение всех регистров, работа со всей периферией и все это в реальном микроконтроллере, а не в программной эмуляции. Можно ставить точки останова (breakpoints) на разные события — для ICE1 три штуки. В общем, сказка, а не инструмент.

К сожалению в AVR микроконтроллерах JTAG доступен далеко не везде, как правило контроллеры с числом ног меньше 40 и обьемом памяти меньше 16КБ такого удовольствия лишены (там, правда, часто бывает debugWire, но на коленке сделать его адаптер еще никому не удалось, а фирменный JTAG ICEII или AVRDragon стоят довольно больших денег). А поскольку у меня в ходу в основном Tiny2313, Mega8, Mega8535 и прочая мелочевка, то мне JTAG что собаке пятая нога — не поддерживается он в этих МК.

Тем не менее, поддашвись многочисленным просьбам, я сварганил этот агрегат и сейчас покажу вам как им пользоваться.
Велосипед изобретать я не стал и взял широко известный проект от scienceprog.com

Однако я не обломался развести плату и под FT232RL суть та же.


Теперь надо прошить контроллер. Вообще, по науке, сначала прошивается bootloader , потом из AVR Studio делается обновление прошивки JTAG ICE до последней версии. Но я нашел путь проще, на сайте pol-sem.narod.ru был обнаружен уже готовый HEX файл который просто надо залить в МК и все.

Поэтому цепляем к нашему адаптеру программатор, благо все штыри нужные (MISO, MOSI, GND, RST, SCK, Vcc ) есть. А то что они не в нужном порядке стандартного AVR ISP разьема, так это не беда — я временно распотрошил колодку своего программатора и одел отдельные пины как надо. Однократная же процедура, чего мучаться разводить еще и ISP разъем.

Заливаем прошивку.
Выставляем Fuse биты.

Тут надо быть внимательными, так как существует несколько нотаций FUSE — прямая (по даташиту, где 0 = ON, 1=OFF) и инверсная (1 = ON, 0 = OFF). В прямой нотации работает UNIPROF, в инверсной нотации работает PonyProg и USBASP _AVRDUDE_PROG.
Определить в какой нотации работает твой программатор очень просто. Дjстаточно подключиться к своему МК и нажать кнопку чтения Fuse битов и посмотреть на бит SPIEN если галка стоит — нотация инверсная . Потому как по дефолту SPIEN включен всегда (без него невозможно прошить МК через ISP внутрисхемно).

Прошиваются Fuse следующим образом:


Бит Прямая нотация (UniProf, Даташит) Инверсная нотация (PonyProg, AVR DUDE GUI)
OCDEN [v]
JTAGEN [v]
SPIEN [v]
CKOPT [v]
EESAVE [v]
BOOTSZ1 [v]
BOOTSZ0 [v]
BOOTRST [v]
BODLEVEL [v]
BODEN [v]
SUT1 [v]
SUT0 [v]
CKSEL3 [v]
CKSEL2 [v]
CKSEL1 [v]
CKSEL0 [v]

Если прошивать голый бутлоадер, то надо включить бит BOOTRST и подключившись через студию сделать обновление прошивки JTAG, залив через AVRProg файл upgrade.ebn (лежит он где то в каталоге AVR Studio). А после прошивки выключить BOOTRST.

Все, девайс готов к работе. Теперь осталось его только испытать в деле.

Работа с JTAG AVR ICE
Особо заморачиваться я не буду, так что покажу на простом примере мигания светодиодов.
Запускаем студию, создаем новый проект.
Выбираем язык программирования, пусть это будет Assembler.
Задаем имя проекта.

Include "m16def.inc" ; Используем ATMega16 LDI R16,0xFF ; Порт А на выход. OUT DDRA,R16 Main: SEI ; Разрешаем прерывания. SBI PORTA,0 ; Зажгли диод 0 SBI PORTA,1 ; Зажгли диод 1 SBI PORTA,2 ; Зажгли диод 2 NOP CBI PORTA,0 ; Погасили диод 0 CBI PORTA,1 ; Погасили диод 1 CBI PORTA,2 ; Погасили диод 2 NOP RJMP Main ; Зациклились

Вот так вот просто. Если ее скомпилить, прошить и запустить, то диоды будут моргать с бешеной частотой, так как никаких задержек не предусмотрено. А что же будет из под JTAG ?

Беру свою новоиспеченную отладочную плату на Mega16 , подключаю к порту А три светодиода.
Подключаю к плате JTAG адаптер — четыре провода интерфейса (TDO,TDI,TMS,TCK ) и два силовых Vcc на плюс и GND на землю — JTAG адптер запитан от целевой платы и все готово к работе.

Можно трассировать! Тыкаю по F11 — прога исполняется по одной команде, показывая стрелочкой где я нахожусь в данный момент. После каждого выполнения команды SBI — у меня на плате зажигается соответствующий светодиод. Круто, блин! Как в каком-нибудь только без глюков и все вживую! Пробежался дальше по тексту — после CBI диоды погасли, как и положено. Вот как это выглядит вживую:

ЫЫЫ!!! ШИМ!!! Ставлю прогу на паузу, меняю биты в OCR2 запускаю снова — коэффициент заполнения изменился. Хы. Ручное управление:)

Так что с JTAGом если хочешь получить по быстрому какую нибудь фиговину вроде генератора даже не надо прогу писать — взял и включил вручную что тебе нужно. Богат AVR периферией:)

Прошивка микроконтроллера через JTAG
JTAG ICE можно также использовать для прошивки микроконтроллера и установки FUSE битов. Для этого надо запустить AVR PROG (Tools — Program AVR — Connect…) и выбрать там JTAG ICE ну и COM порт, хотя обычно канает Auto.

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

Файлы к статье:

Вот так и развращаютя эмбеддеры. Сначала к JTAG пристрастятся, потом ради одного лишь JTAG прееходят на более мощный кристалл там, где хватит и Tiny, а дальше Си, Си++, потом.NET какой нибудь на виртуальной машине… И вот уже операционная система весом в несколько гигабайт и требующая гигазы ОЗУ ни у кого не вызывает шока и ужаса. А ведь это страшно, господа! Прогресс, мать его. Не развращайтесь благами цивилизации, будте аскетичны и разумны. И не забывайте об оптимизации как программной, так и аппаратной.

-Что они хотят?

-«Ку» они хотят...

(Кин-цза-цза)

Итак, есть спрос - сделать несложный (относительно, конечно) внутрисхемный эмулятор для AVR. На этот спрос есть предложение.

AVR Studio поддерживает JTAG ICE, умеет зашивать в него обновления firmware. Этим мы и воспользуемся. Конечно, на коленке собрать это устройство затруднительно, довольно много деталюшек, но если Вы собираетесь писать программы посложнее, чем «Hello Word», то внутрисхемник быстро становится предметом первой необходимости.

Поддерживаемые устройства.

ATmega16(L), ATmega162(L), ATmega169(L or V), ATmega32(L), ATmega323(L), ATmega64(L), ATmega128(L).

По мере выхода новых версий firmware этот список расширяется. Проверить его можно на сайте www.atmel.com .

Возможности

  • Полностью совместим с AVR Studio
  • Поддерживает все устройства AVR с интерфейсом JTAG
  • Эмулирует все цифровые и аналоговые функции, реализованные на кристалле
  • Точки останова, в том числе по изменению значения переменных
  • Точки останова в памяти программ и данных
  • Интерфейс программатора для flash, eeprom, fuses and lock-bits.
  • USB интерфейс с компьютером (виртуальный COM-порт)
  • Питание устройства JTAG ICE от USB
  • Напряжение питания отлаживаемого устройства от 1.8 до 6 вольт

Подключение к отлаживаемому устройству

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

Это - схема подключения кабеля отладчика к устройству. SRST можно и не использовать.

Connecting JTAG ICE to STK500 with an ATmega323 or an ATmega16

Индикация

На устройстве стоят аж пять светодиодов. Назначение их следующее:

  • VD1, VD2 - индикация обмена с PC
  • VD3 - индикация питания отлаживаемого устройства
  • VD4 - питание JTAG ICE с USB порта
  • VD5 - обмен с устройством через JTAG

Реализация.

Схема, печатная плата, прошивка для U1 - приводятся в приложении . Формат - как обычно, PCAD-2002 ASCII. Есть функциональное отличие от фирменной реализации - введен преобразователь USB->COM. Вообще-то документация не рекомендует такого подключения, но я его пользовал несколько лет, и не видел дополнительных глюков, кроме обычных. AT90S2313 (U1) уже снята с производства, но ее можно заменить AtTiny2313, не забыв запрограммировать нужные фузы, чтобы обеспечить совместимость. Собственно, она нужна только для программирования D2 (AtMega16), как это сделать - читайте HELP на AVR Studio, раздел «JTAG ICE Manual Firmware Upgrade». Возможно, при программировании U1 возникнут проблемы, тогда стоит замкнуть на землю вход RESET D2, а может быть и отсоединить его вывод MISO, чтобы не мешал. В любом случае, это одноразовое мероприятие.

Заключение.

Итак, собираем плату, программируем U1 программатором через разъем XP1, затем подключаем всё это к USB, ставим драйвера от FTDIchip (скачиваем распоследние драйвера виртуального COM-порта с www.ftdichip.com). Программируем D2. Подключаем всё это безобразие к отлаживаемому устройству. Радуемся, ликуем, плюем в сторону недоброжелателей J

Всем пацакам надеть намордники! И радоваться!

(Кин-цза-цза)


Принципиальная схема внутрисхемного эмулятора JTAG ICE

Размещение элементов на печатной плате эмулятора

Плата печатная - вид со стороны компонентов (Comp)

Плата печатная - вид со стороны пайки (Solder)