Avr jtag usb как с ним работать

Обновлено: 05.07.2024

В семействе RISC-микроконтроллеров AVR есть представители, у которых на борту имеется интерфейс JTAG (их конечно не так много, как хотелось бы, но они есть). Он предоставляет мощную возможность отладки программ, однако для этого нужно иметь специальный аппаратный адаптер. Коннектор JTAG часто реализуют на целевой плате, где стоит такой микроконтроллер. Описываемый здесь проект дает простой способ реализации интерфейса JTAG, который можно встроить прямо в Ваше целевое устройство (здесь и далее перевод статьи [1] автора HappyJTAG).

Решение состоит фактически только из стандартного драйвера FT232USB, который подключен к выводам JTAG Вашего целевого процессора AVR. Этот же FT232R также используется для стандартного последовательного обмена (через UART). Всю работу делает Ваш PC, который эмулирует интерфейс JTAG через режим BitBang чипа FT232. JTAG позволяет управлять фьюзами, битами защиты памяти (memory lock bits), и делать первоначальную загрузку firmware микроконтроллера прямо через USB, без подключения дополнительных коннекторов и лишнего оборудования. Конечно, получаемое быстродействие далеко не идеально, т. е. это работает не так быстро, как и специализированные адаптеры JTAG, но его вполне достаточно для того, чтобы через USB в чистый AVR прошить загрузчик (bootloader), и уже дальше перепрошивать AVR в штатном режиме.

Схема соединений довольно проста:

HappyJTAG SCH

Примечание: появилась новая версия идеи HappyJTAG: HappyJTAG2 [3], где вместо чипа FT232R применен FT2232D. К сожалению, автор не предоставил исходных кодов программы управления, и в новую версию HappyJTAG2 встроены некоторые ограничения.

[Тестирование с макетной платой AVR-USB-MEGA16]

На макетной плате AVR-USB-MEGA16 [4] (микроконтроллер ATmega16 или ATmega32A) как раз есть интерфейс JTAG (коннектор U3), и можно было провести эксперимент, соединив выводы этого JTAG с платой FT232R-Breakout [5]. Соединения были выполнены по следующей таблице:

HappyJTAG connect AVR USB MEGA16

В память микроконтроллера макетной платы AVR-USB-MEGA16 (ATmega16 в корпусе TQFP44) была записана какая-то старая демонстрационная программа устройства USB, которая позволяла через USB управлять светодиодами.

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

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

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

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

А далее, в разделе Debug Platform выбираем не AVR Simulator как раньше, а JTAG ICE.


В правом окне выбираем отлаживаемый кристалл, (у меня это Mega16) и жмем финиш. Все, дальше как обычно, вбиваем текст программы. Я не стал мудрить и по быстрому настрогал следующее:

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

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


Жму в студии компиляцию и запуск (Ctrl+F7). Проект по быстрому компилится, тут же через JTAGзаливается в МК (JTAG может заменить программатор) адаптер при этом весело перемигивается светодиодом. Программа встает на выполнение, бодро показывая стрелочкой начало программы.

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

Дальше решил поразвлекаться. Не меняя программу, не перекомпиливая, не выходя из режима отладки. Открываю в AVR Studio вкладку I/O View
Протыкиваю там галочки:

  • DDRD.7=1 — вывод PD7 на выход
  • Затем лезу в раздел Timer_Counter_2 и там прямыми тычками по битам выставляю:
  • COM2 = 11 — инверсный режим работы вывода OC2 в режиме FastPWM
  • WGM20 = 1, WGM21 = 1 — Режим таймера 2 устанавливаем в FastPWM
  • От балды натыкиваю число в OCR2 — от него зависит коэффициент заполнения
  • Выставляю биты CS2 = 001 — запуск таймера.

Снимаю прогу с паузы (F5 - Run). Тычу осциллографом в ногу PD7 (OC2)

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

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

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

Жмем Connect и мы в эфире, главное не забыть выйти из режима откладки в студии. AVRPROG сам определяет тип контроллера, можно выбрать файл с флешем и/или епромом и прошить их. Отдельного разговора заслуживает вкладка Fuses.
В отличии от большинства программаторов, тут уже не придется париться по поводу битов SUT:CKSEL — все выбирается из понятного списка, написанного человеческим языком:

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

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


Любой более-менее интересующийся электроникой человек сегодня знает, что такое «прошивка». Многие из этой категории встречались с ситуацией «прошивка слетела». Самым неприятным подвидом ситуации является состояние «кирпич». Под катом немного теории и практики «раскирпичивания» с использованием устройства-героя обзора.

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

Предыстория.

Как-то в гостях у знакомого я наткнулся взглядом на валяющийся в куче хлама спутниковый тюнер, еще вполне себе современный.


Выяснилось, что аппарат неисправен со следующими симптомами: когда-то грузился со второго раза, потом стал грузиться с третьего, потом с пятого, потом с десятого, потом перестал совсем. В сервисе за ремонт заломили неадекватную сумму, в результате просто был куплен новый тюнер, а этот брошен в кучу хлама. На предложение купить его за символическую сумму владелец с радостью согласился, в результате я стал обладателем неисправного тюнера Skyway Light с практически полным комплектом — нашелся пульт, блок питания и даже выносной ИК-приемник.

Первое включение.

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

Подозрение первое. Питание.

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

Подозрение второе. Прошивка.

Подозрение третье. Чип флэш-памяти.

Что делать дальше?

Беглое изучение Aliexpress показало, что такую микросхему можно купить за небольшие деньги. Но вот тут обнаружилась главная проблема: просто купить флэшку мало. Ее нужно прошить. Либо на программаторе, либо прямо на плате. В моем случае это чип Spansion S29GL256P90TFCR2 — параллельная флэш-память в корпусе TSOP-56. Поиск такого программатора ни среди друзей-электронщиков, ни в веб-магазинах по адекватной цене не увенчались успехом. Остается единственный вариант — прошить флэшку прямо на плате после запаивания. И тут впервые мысленно была произнесена фраза, которая обычно на форумах электроники звучит как приговор: «поможет только JTAG».

Немного про JTAG.

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

Заказ адаптера.

Получение, распаковка, регистрация.

Пластиковый пакет почты России, внутри обернутый пупыркой и положенный в антистатический пакет адаптер, кабель USB A male — Mini USB, шлейф с десятипиновой колодкой (будет виден на других фото, на момент съемки был подцеплен к тюнеру), переходник для прошивки последовательных флэшек самых популярных серий — 25-й, 93-й и в теории 24-й.

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

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

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


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

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

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

Чтобы программа 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 либо внешнего источника питания постоянного или переменного тока.

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

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

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

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

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

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

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

  • включите питание отлаживаемого устройства;
  • включите питание USB AVR JTAG (в случае использования внешнего источника питания);
  • запустите AVR Studio.

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

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

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

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

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

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

Читайте также: