Внутрисхемный эмулятор. Внутрисхемная отладка AVR через JTAG ICE Чем является JTAG-программатор

Одним из самых мощных отладочных инструментов в микроконтроллерной среде является 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 особых проблем не возникает, поскольку существует множество схем для «заливки» прошивки в кристалл, одной из простейших таких схем является схема получившая название «пять проводов», то с отладкой программы такого богатого выбора не существует.

Для отладки программы возможно использования только двух вариантов – это программный симулятор и внутрисхемный 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

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

1 Описание

USB AVR JTAG представляет собой инструмент для отладки устройств, выполненных на основе микроконтроллеров семейства AVR фирмы Atmel. AVR JTAG является полным аналогом AVR JTAG ICE фирмы Atmel, дополненным интерфейсом USB. Для получения дополнительных сведений о работе AVR Studio с AVR JTAG может использоваться документация от Atmel.

Для работы с AVR JTAG используется программа AVR Studio от Atmel. AVR JTAG поддерживает все микроконтроллеры семейства, имеющие интерфейс JTAG, в диапазоне питающих напряжений 2.5-6 В:

  • ATmega16;
  • ATmega162;
  • ATmega169;
  • ATmega32;
  • ATMega323;
  • Atmega64;
  • ATmega128.

Поддержка новых устройств осуществляется за счет обновления встроенного ПО AVR JTAG, которое поставляется в составе AVR Studio.

Рисунок 1 Расположение соединителей и индикаторов на плате AVR JTAG

2 Комплект поставки

В комплект поставки USB AVR JTAG входят:

  • плата USB AVR JTAG;
  • кабель для подключения USB AVR JTAG к компьютеру;
  • кабель для подключения USB AVR JTAG к отлаживаемому устройству;
  • компакт-диск с ПО и справочной информацией.

3 Подключение

Чтобы программа AVR Studio могла автоматически обнаружить USB AVR JTAG, необходимо подсоединить USB AVR JTAG к компьютеру, отлаживаемому устройству и подать питание на USB AVR JTAG (в случае использования внешнего источника питания) и отлаживаемое устройство до запуска AVR Studio.

3.1Подключение к компьютеру

USB AVR JTAG подключается к стандартному USB порту компьютера. Для подключения используется стандартный USB кабель (входит в комплект поставки).

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

Для подключения к отлаживаемому устройству используются 6 линий: TCK, TDO, TDI, TMS, VTref и GND, подключение этих линий необходимо для правильной работы AVR JTAG с отлаживаемым устройством.

Дополнительно к отлаживаемому устройству может быть подключена линия nSRST (используется для управления и наблюдения за линией сброса микроконтроллера). Использование этого сигнала не является необходимым для отладки, однако, если программа микроконтроллера установит бит JTD в регистре MCUCSR, то интерфейс JTAG будет отключен и для его включения потребуется, чтобы USB AVR JTAG мог управлять линией сброса микроконтроллера.

3.3 Подключение питания


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

USB AVR JTAG получает питание от USB либо внешнего источника питания постоянного или переменного тока.

При питании USB AVR JTAG от USB существует одна проблема:

  • При измерениях целевого напряжения возможна погрешность (до 0.5 В в зависимости от построения выходных драйверов материнской платы).

Поэтому, если для Вас важна точность при измерении целевого напряжения, воспользуйтесь внешним источником питания.

Выбор источника питания осуществляется перемычкой “питание”.

Для подключения источника к USB AVR JTAG используется гнездо под штекер D 2.1 мм.

Полярность источника постоянного тока не имеет значения.

Для того чтобы AVR Studio обнаружило AVR JTAG необходимо, чтобы питание USB AVR JTAG и отлаживаемого устройства было включено до начала отладки (кнопкой Start Debugging AVR Studio).

Как источник питания пригоден любой нестабилизированный источник 6-9 В, либо стабилизированный 9-12 В.

  • включите питание отлаживаемого устройства;
  • запустите AVR Studio.

4 Обновление ПО

Обновление встроенного ПО USB AVR JTAG может быть проведено либо автоматически, либо вручную.

4.1 Автоматическое обновление

Автоматическое обновление происходит в том случае, если AVR Studio обнаружит, что версия встроенного ПО (firmware), входящего в состав AVR Studio, больше версии firmware USB AVR JTAG. В этом случае AVR Studio выдает соответствующее сообщение и предлагает выполнить обновление firmware. Если пользователь соглашается выполнить обновление ПО, то AVR Studio выдает диалог с инструкциями по обновлению ПО. Для обновления ПО выполните следующие действия:

  • снимите перемычку ”upgrade” на плате USB AVR JTAG;
  • нажмите кнопку "Ok" в диалоге AVR Studio;
  • в появившемся диалоге AVR Prog нажмите кнопку "Program";
  • Обновление ПО USB AVR JTAG завершено.

4.2 Ручное обновление

Ручное обновление ПО USB AVR JTAG может оказаться необходимым, если автоматическое обновление ПО было прервано по каким-либо причинам (сбой питания и т.п.). В этом случае AVR Studio не сможет обнаружить USB AVR JTAG, выяснить версию его ПО и начать автоматическое обновление ПО.

Чтобы выполнить ручное обновление ПО:

  • выключите питание USB AVR JTAG;
  • снимите перемычку”upgrade” на плате USB AVR JTAG;
  • включите питание USB AVR JTAG (в случае использования внешнего источника питания);
  • запустите программу AVR Prog;
  • выберите для программирования файл с расширением.EBN из папки JTAGICE, находящейся в папке, в которую установлен AVR Studio;
  • нажмите кнопку "Program";
  • после завершения прошивки firmware закройте окно AVR Prog;
  • установите перемычку”upgrade” на плате USB AVR JTAG;
  • выключите и включите питание USB AVR JTAG.
  • ручное обновление ПО USB AVR JTAG завершено.

5 Технические характеристики

Иногда, программа зашитая в микроконтроллера работает совсем не так как надо её создателю. Тогда наступает стадия отладки (Отлаживать — избавлять программу от лажи:-) прим. автора) Кто-то использует для отладки 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 преобразователя). Так же не забываем объединять земли и питание. Жду отзывов и вопросов в комментариях.

DV164045 - высокоскоростной и экономически эффективный инструмент для внутрисхемного программирования и отладки микроконтроллеров PIC и цифровых сигнальных контроллеров dsPIC от компании Microchip. Высокая скорость работы обеспечивается за счет применения в изделии 300 МГц 32-битного MCU с 2 МБ RAM и высокоскоростной ПЛИС FPGA, которая обеспечивает более скоростные коммуникации, загрузки и отладку по сравнению с предыдущими версиями устройства. Процесс отладки и программирования осуществляется с применением мощного, но простого в использовании графического интерфейса интегрированной среды разработки IDE MPLAB X. MPLAB ICD4 подключается к вашему ПК через USB 2.0 HS интерфейс и к отладочному разъему целевой платы, который также совместим с внутрисхемными эмуляторами MPLAB ICD3 и MPLAB REAL ICE™. Кроме того, MPLAB ICD4 может работать с интерфейсом JTAG.

В настоящее время программатор/ отладчик MPLAB 4 поддерживает многие, но не все PIC и dsPIC. Прошивка постоянно обновляется для расширения списка поддерживаемых микроконтроллеров. Адрес для запроса поддержки приоритетных чипов или для сообщения о возникших проблемах: [email protected] .

Если у вас инсталлирована IDE MPLAB X, вы сможете найти список поддерживаемых микросхем в папке «docs» инсталляционной директории. Имя файла “Device Support.htm”. Кроме того, список можно скачать по ссылке http://www.microchip.com/mplabx-ide-release-notes .

Рис. Внутрисхемный программатор/ отладчик DV164045

Отличительные особенности:

  • Полноскоростная эмуляция в режиме реального времени:
    • Изделие разработано для поддержки высокоскоростных процессоров, работающих на максимальных скоростях
    • Отладка приложений на вашей плате в режиме реального времени
  • Надежный интерфейс:
    • Добавлена защита цепей драйверов отладчика, чтобы обезопасить их от скачков питания на целевой плате
    • Мониторинг VDD и VPP с целью защиты от перенапряжения. Все линии защищены от перегрузки по току
    • Безопасное питание до 1 A с дополнительным источником питания
  • Microchip Standard Connectivity Plus JTAG:
    • Поставляется со стандартным отладочным разъемом Microchip. Имеется возможность использования JTAG
  • Совместимость:
    • Поддерживает все MPLAB ICD 3 разъемы
  • Портативное устройство с питанием от USB; соответствие RoHS:
    • Плата размещена в прочном черном корпусе с матовой алюминиевой крышкой и линейкой светодиодов для индикации статуса отладки
    • Питание от USB порта, не требуется внешний источник питания
    • CE- и RoHS-соответствие
  • Широкий диапазон напряжений эмуляции:
    • Поддерживает целевые напряжения от 20 В до 5.5 В
  • Высокоскоростное программирование:
    • Быстрая перезагрузка прошивки для быстрой отладки/внутрисхемного перепрограммирования
    • Включает программируемую настройку скорости отладки для оптимизации программирования
  • Тестовый интерфейсный модуль:
    • Включает модуль обратной связи для тестирования отладочного порта и кабеля
  • Простота обслуживания и обновления функций:
    • Добавьте поддержку новых микросхем и функций, инсталлируя позднейшую версию MPLAB X IDE, которая доступна для бесплатной загрузки на www.microchip.com/mplabx
    • Обновление прошивки через MPLAB X IDE
  • Экономическая эффективность:
    • Особенности и эксплуатационные характеристики на уровне стоимости сопоставимых эмуляционных систем
  • Мощная отладка:
    • Мощная отладка с MPLAB X IDE
    • Поддержка нескольких точек останова, секундомера и отладки исходного кода
    • Опция выбора подтяжки для целевого интерфейса в редакторе MPLAB X IDE для быстрой программной модификации/ отладки
  • Требования к системе:
    • MPLAB X IDE ver. 4.00 или выше
    • Доступный USB порт
    • Microsoft Windows ® 7 или выше, Mac OSX ® и Linux ®