Atmel ice как подключить

JTAG ICE

Встроенная система отладки

1 Описание

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

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

    ATmega16;
    ATmega162;
    ATmega169;
    ATmega32;
    ATMega323;
    ATMega64;
    ATmega128.

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

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

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


Рисунок 2 Внешний вид платы

Подключение

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

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

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

При запуске AVR Studio автоматически ищет поддерживаемые им устройства, обращаясь по порядку ко всем COM портам компьютера. Поиск прекратится, как только будет найдено поддерживаемое устройство. Например, если к COM1 подключен AVR Prog, а к COM2 AVR JTAG, то AVR Studio обнаружит только AVR Prog. Поэтому при запуске AVR Studio убедитесь, что остальные поддерживаемые им устройства отключены или после запуска AVR Studio вручную задайте порт, к которому подключен AVR JTAG.

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

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

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

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


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

AVR JTAG получает питание от внешнего источника питания (входит в комплект поставки) постоянного или переменного тока. Для подключения источника к AVR JTAG используется гнездо под штекер 2.5 мм. Полярность источника постоянного тока не имеет значения.

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

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

Обновление ПО AVR JTAG завершено.

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

Источник

Опыт использования Atmel ICE

Я давно хотел обзавестись фирменным программатором Atmel. Самоделки мне изрядно надоели — у avr isp mk2 при некоторых условиях слетала прошивка, остальные не поддерживает atmel studio. Я пишу именно в ней, поэтому мне хотелось комфорта без привлечения дудок и прочего. Как то раз увидел у атмела программатор отладчик Atmel ICE. Существует в нескольких исполнениях. Версия все в ажуре: Плата в коробочке + переходники = 92 бакса в сторе атмела. Версия легкая: плата в коробочке = 53 бакса. Версия бомж спартанец: голая плата без всего = 35 баксов. Разумеется, на территории России прибавляется накрутка барыг. Я выбрал последний вариант и вскоре плата была у меня. Поскольку я выбрал вариант без переходников, мне пришлось вызвонить мультиметром выводы разъема и подпаяться к площадкам на плате программатора. Наверно, вы спросите почему бы не сделать собственные переходники. Потому что атмел идет в ногу со временем и использовал 1.27мм разъемы (шаг шлейфа 0.635мм). В доступных мне магазинах не оказалось ни таких разъемов, ни шлейфов а доставка по отдельности из разных магазинов вместе со стоимостью самих частей составила бы еще тыщу рублей. Спасибо тебе, заботливый атмел. Как всегда, радуешь своими изощренными решениями. Ведь если бы разъемы были стандартные 2,54мм, плата стала бы на целый сантиметр шире и не дала бы возможности продать переходники отдельно по цене платы программатора. Про разъем micro usb я уже молчу, вещь просто незаменимая для разработчика.

Прозвонил, припаял. 7 студия сразу нашла девайс, я подключил плату, прошил фузы из приятного графического интерфейса студии, затем прошивку. Поотлаживал, попрошивал, отключил. Вновь взялся за прошивку через несколько дней. Воткнув программатор я увидел недружелюбное Unknown Device. Все попытки оживить программатор, включая обновление драйверов и попытку обновить firmware через консольную утилиту эффекта не дали. Связавшись с поддержкой атмел я получил стандартные отписки — переустановите драйверы, поставьте новейшую версию студии, заодно скачайте обновления windows, новая версия без этого работать не будет. Мои доводы что все работало без обновлений оставили без внимания. Программатор поддерживался студией еще, кажется, с шестой версии. Далее продолжать переписку смысла не вижу т.к. сегодня при очередных манипуляциях заметил, что у него нехило греется контроллер после подключения кабеля usb. Совершенно очевидно, что программатор сдох. Что с ним случилось во время лежания на столе я не знаю. Выводы делать не хочу, одно очевидно — я просрал почти 3 рубля на одноразовый программатор.
Пойду достану Discovery, что-то подзабросил я изучение микроконтроллеров STM.

READ  Как подключить телефон через айтюнс

P.S. Дискуссия затронула многих, поэтому добавлю некоторые свои мысли по поводу всего этого. Мне нравится продукция Atmel и их документация. Отчасти поэтому я приобретаю их микроконтроллеры и средства разработки, пока большинство активно осваивает STM и других игроков рынка. При изготовлении одиночных и случайных устройств нет вообще никакой разницы на чем собирать, только личные предпочтения. Отказываться от Atmel не призываю, просто учтите описываемые особенности. Если кто-то надумает брать этот программатор, берите максимально укомплектованную версию, в коробке и с переходниками, потом будет меньше головняков. Это, однако, тоже не панацея. Ничего добавить не могу, по этому отладчику я не имею никакой статистики отказов.

Комментарии ( 81 )

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

С ужасом вспоминаю светящийся красно-оранжевым светом стабилизатор у Драгона… А ведь всего-то — потрогал пальцем микросхему — не горячая ли она? (Я знаю, что такое статика. Это не был статический разряд. Я держался за общий провод на самом Драгоне.)

Я бы сказал, что в случае этой заметки мы наблюдаем типичную экономию на спичках. Т.е.:
— Курить бум?
– Бум!
– Мои сигареты – твои спички!

Топикстартеру надо было корпусированный вариант покупать. Или хотя бы изолентой страдальца обмотать.

Источник

Программирование и JTAG-отладка микроконтроллера Atmega16 на языке C в среде IAR, часть 1

Введение

По моему мнению, чтобы быстро научится программировать практически любой микроконтроллер, существующий в мире, нужно освоить язык C и пользоваться JTAG-отладкой, конечно, помимо изучения технической документации. Поясню свою мысль. Компиляторы языка C существуют практически для всех существующих микроконтроллеров. Поэтому язык С давно зарекомендовал себя, как кроссплатформенный ассемблер. Его знание освобождает от необходимости изучения ассемблерных команд для каждого нового семейства микроконтроллеров. JTAG-отладка, в свою очередь, обеспечивает не только возможность внутрисхемного поиска ошибок, но и помогает изучать микроконтроллер изнутри. Я думаю, что для всех очевиден тот факт, что при просто программировании без отладки даже простых микроконтроллеров мы подходим к изучению системы, как к черному ящику с входами и выходами. Такой подход, особенно на начальном этапе, затрудняет обучение. C другой стороны JTAG-отлдака позволяет забраться во внутрь, посмотреть как выполняется программа по шагам, посмотреть, что происходит в памяти и регистрах, запустить волнение до точек останова, выполнять дизассемблированный вариант программы. Эта возможность позволяет значительно ускорить обучение.

Такие микроконтроллеры как AVR, STM8, MSP430, AVR32, STM32, EFM32, Renesas RX имеют компиляторы языка С и возможность отладки при помощи интерфейса JTAG. Единой кроссплатформенной средой для этих многих других микроконтроллеров является Embedded Workbench. Хоть среда и платная, но есть возможность использовать 30-дневную бесплатную версию или версию с ограничением по размеру кода. Для начального изучения нового семейства месяца может быть вполне достаточно. После чего можно составить свое мнение о семействе и решить продолжить с ним работу на бесплатных инструментах, либо для небольших проектов пользоваться версией ограниченной по размеру кода. Для больших коммерческих продуктов можно и приобрести данную среду.

Также я считаю, что начинать изучение лучше с семейств AVR, STM8, MSP430. Работу этих микроконтроллеров проще понять, потому что они имеют сравнительно простую систем команд, небольшое количество регистров процессора и периферии. Начинать лучше с написания простых примеров, постепенно переходя к написанию своих библиотек. Все это хорошо охватывается головой. Для первого знакомства это очень удачно.
Для примеров, рассмотренных далее, я выбрал AVR, потому что это наиболее популярное в микроконтроллерном мире семейство. Я думаю, что с него проще начать, но не стоит им ограничиваться.

Выбор JTAG-отладчика

Для внутрисхемной отладки написанных на языке C программ нам потребуется JTAG-отладчик для микроконтроллеров AVR. Самыми доступными по цене и простыми в изготовления являются клоны фирменного отладчика AVR JTAGICE. Такой клон можно заказать по небольшой цене с eBay. Качество здесь, как лотерея.

Также клоны производит, например, фирма Olimex. Есть классический вариант, подключаемый к компьютеру через COM-порт и более новый вариант, где подключение осуществляется по интерфейсу USB.

При личном изготовлении такого клона, если нет возможности сделать свою печатную плату, можно использовать только DIP-компоненты, что упростит монтаж. Ранняя версия Evertool, который содержит в себе клон JTAGICE, была сделана именно так.

]

В основе большинства клонов JTAGICE лежит схема, изображенная на рисунке снизу. Точнее часть, которая называется JTAGICE section. Ядром отладчика является микроконтроллер Atmega16L. Если хотим получить подключение клона JTAGICE по USB, то меняем микросхему преобразования уровней MAX3232 на микросхему FTDI FT232. Однако FT232 в DIP-корпусе не выпускают, а цены на DIP-модули с данной микросхемой довольно высоки. Поэтому тут уже одной монтажной платой и DIP-компонентами не отделаешься. Придется либо, как вариант, припаять FT232 тонкими проводами к макетке, либо вытравить хлорным железом однослойную печатную плату с нормальным посадочным местом.

Прошивку можно найти в папке установки AVR Studio 4 или скачать здесь.
Недостатком клонов JTAGICE, описанных выше, является то, что в AVR Studio 6 они не поддерживаются. Однако в старой версии AVR Studio 4 и старых и новых версиях IAR для AVR данные клоны прекрасно поддерживаются.
Для отладки примеров кода на C, написанных далее, я пользовался клоном, сделанным по данной схеме. Микросхема MAX3232 в нем замена на ADM3202, что сути не меняет.

READ  Как подключить центральный замок к сигнализации конвой

Данный клон JTAGICE достался мне по наследству. Я нашел в коробке с радиотехническим мусором на работе. Он не работал, и я решил его перепрошить. Для чего потребовалось сделать специальный переходник, потому что, как видно на фото, разъем AVR ISP для программирования Atmega16L не выведен для уменьшения габаритов. После прошивки JTAGICE заработал и обрел «загробную» жизнь.
Сейчас, когда COM-порт стал немодным, я не стал бросать «старого друга» и купил кабель-преобразователь USB в RS-232.

Отладочная плата

В качестве отладочной платы я буду использовать цифровой термометр, собранный мной на макетной плате. Питается плата по USB, ядром является микроконтроллер Atmega16 в DIP-корпусе. Микроконтроллер тактируется от кварцевого резонатора частотой 16 МГц и обвязан минимально необходимым набором пассивных компонентов (конденсаторы по 22 пФ для кварца, резистор 10 кОм на подтяжку линии Reset к питанию, конденсаторы 0,1 мкФ по питанию). Для программирования и отладки микроконтроллера выведены два стандартных разъема шестиконтактный AVR ISP и десятиконтактный AVR JTAG. На плате есть аналоговый температурный датчик, статический семисегментный индикатор на три цифры, дополнительный светодиод. Индикационный светодиод и сегменты индикатора подключены к микроконтроллеру через токоограничивающие резисторы по 500 Ом. Каждый из трех семисегментных индикаторов подключен к выводам с нулевого по шестой одного из портов A, B и D. Индикационный светодиод подключен к 7-му выводу порта D. Выход аналогового датчика подключен к 7-му выводу порта A (7-й канал встроенного АЦП).

Все элементы были спаяны проводом МГТФ.

Среда разработки IAR

Для написания и отладки программ будем использовать среду IAR Embedded Workbench for Atmel AVR, а именно бесплатную ее версию с ограничением по размеру кода в 4 Кб. Для небольших проектов на языке С для микроконтроллеров семейства AVR этого вполне достаточно.
Зайдем сюда и почитаем, что обеспечивает последняя версия IAR для AVR на текущий момент времени. Отладчик JTAGICE, о котором говорилось выше, как и раньше, поддерживается.

В списке поддерживаемых семейств есть megaAVR.

Убедившись, что наш JTAG-отладчик и отладочная плата пойдут, скачаем IAR.

Установщик позволяет зарегистрироваться с лицензией Kickstart.

После установки, чтобы зарегистрировать IAR, придется заполнить анкету регистрации.

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

Создадим пустой проект для наших задач. Мы выбираем язык C и вариант AVR Studio 4 compatible output, на случай если придется зашивать выходной hex-файл средствами AVR Studio 4.

После выбора языка перед нами появится совсем пустой почти пустой source-файл.

Перейдем к настройкам нашего проекта. Т.к. мы будем писать программы для Atmega16, выберем данный микроконтроллер в графе Processor configuration.

В пункте меню Debugger выберем JTAGICE.

В пункте меню Debugger-> JTAGICE выберем номер COM-порта, к которому подключен отладчик.

Для корректной работы определений значащих битов регистров периферии микроконтроллера в библиотеках среды также необходимо поставить
галочку Enable bit definitions in I/O-Include files в пункте меню General Options->System.

Программирование и отладка

Прежде чем приступить к описанию примеров, нужно объяснить некоторые особенности среды IAR. В заголовочном файле iom16.h, который содержит определения адресов регистров для Atmega16, есть макросы, которые позволяют обращаться к конкретным битам регистров внутренней периферии, следующим образом:

По сути можно использовать любой из этих вариантов. И выбор здесь, по сути, состоит в удобстве использования конкретного варианта и простоте последующего понимания написанного.
В среде IAR есть возможность использования встроенной функции задержки __delay_cycles(x), где x — это время задержки в тактах. Для нашего случая задержка на один такт это 1/16000000 = 62,5 нс.
Теперь, когда мы знаем эти два момента, можно двинуться к первому примеру, где происходит просто мигание светодиодом, при помощи исключающего или.

Для упрощения формирования задержки требуемой длительности созданы макрофункции задержки DELAY_US(us) и DELAY_MS(ms), которые позволяют задавать задержку не в тактах, а сразу в микросекундах и миллисекундах. Далее перейдем в основную функцию программы main(), в которую мы попадаем после включения микроконтроллера или после сброса. Логично, что первое, что мы должны сделать после включения это настроить необходимые для работы периферийные блоки в нашем случае это только один вывод порта D. Чтобы настроить его на вывод достаточно установить бит DDD7 регистра направления данных DDRD в единицу. Для того, чтобы выставить на ноге «1» (5 В) необходимо установить бит PORTD7 в регистре данных PORTD, для того чтобы выставить на ноге «0» (земля) необходимо сбросить бит PORTD7. В даташите можно почитать об этом подробнее.

Для установки и записи битов управляющих регистров DDRD и PORTD нежелательно использовать просто запись (DDRD = 0x01, DDRD = 0x00) без побитовой дизъюнкции и конъюнкции (DDRD |= 0x01, DDRD &=

0x01, DDRD |= (1 Download and Debug или нажмем сочетание клавиш Ctrl+D или на иконку с красным треугольником, после этого, если нет синтаксических ошибок в коде, мы перейдем в режим отладки, в котором нам доступны команды пошагового выполнения Step Over, Step Into, Step Out, Next Statement, Go, Reset. Помимо этого есть возможность использования точек останова. Это позволяет пройти программу по шагам и посмотреть, что происходит на каждом шаге в регистрах процессора и регистрах DDRD и PORTD порта D, запустить на выполнение, затем остановить, запустить до точки останова. Все это дает не только инструмент поиска ошибок, но также помогает лучше понять работу микроконтроллера. Научится быстрей с ним работать.

READ  Как правильно подключить стиральную машину атлант

Второй пример это тоже мигание светодиодом, но уже с использованием дополнительных макрофункций.

Подход с использованием макрофункций обеспечивает удобство в двух отношениях. Первое это обеспечение улучшения читаемости кода. Второе это упрощение возможных исправлений. Теперь, если светодиод нужно перенастроить на другой вывод другого порта, достаточно поменять три определения LED_DDR, LED_PORT, LED_PIN, а не делать исправления по всему тексту программы. При написании библиотек это сильно упрощает жизнь.
Третий пример это реализация мигания светодиодом, при помощи машины состояний. Машина состояний – это один из вариантов реализации модели встраиваемого ПО микроконтроллера, в котором бесконечный цикл делится на ветки в зависимости от текущего сотояния.

В нашем примере, есть три состояния STATE_LOW_FREQ_BLINK, STATE_AVR_FREQ_BLINK, STATE_HIGH_FREQ_BLINK, которые соответствуют миганию светодиода с низкой частой, средней частотой и высокой частотой соответственно. Каждому состоянию соответствует своя величина задержки DELAY_TIME_LF, DELAY_TIME_AF, DELAY_TIME_HF, выполняемая в каждом проходе состояния. Одинаковый период нахождения в каждом состоянии обеспечивают определения LIMIT_CNT_LF, LIMIT_CNT_AF, LIMIT_CNT_HF, определяющие количество проходов-переключений для каждого состояния. Оператор switch обеспечивает переключение между состояниями в соответствии с текущим значением переменной curr_state. Переменная state_cnt инкрементируется в каждом проходе состояния до достижения предела переключений в состоянии. Оператор if определяет, достигнут ли предел переключений. Если предел достигнут, происходит переход в следующее состояние, счетчик проходов state_cnt обнуляется.

Под отладкой теперь, кроме уже описанного выше, можно в View->Watch посмотреть значение переменных curr_state и state_cnt.

Четвертый пример посвящен работе с восьмиразрядным таймером (TIMER0) микрокотроллера. В данном примере в качестве второго светодиода используется один из сегментов семисегментного индикатора, подключенный к 6-му выводу порта D.

В рассматриваемом примере в функции main() после настройки светодиодов происходит настройка нулевого таймера, которая состоит в установке битов в управляющем регистре TCCRO. Т.к. мы будем использовать режим работы таймера Normal, то биты WGM00 и WGM01 должны равняться нулю. Начальное значение и так равно нулю, поэтому просто их не трогаем. Биты CS00, СS01, СS02 устанавливаем так чтобы получить максимальный делитель (1024) частоты тактирования 16 МГц.

После деления получим частоту работы таймера 15625 Гц, что соответствует тику в 64 мкс. Наиболее близкий к 10 мс мы получим, если умножим тик на 156 (156 * 0,000064 c = 0,009984 c = 10 мс). Поэтому, чтобы получить генерацию прерывания по обработке события переполнения каждые 10 мс, необходимо загрузить в счетный TCNT0 регистр 99 (255-156 = 99). Т.к. таймер начнет считать с 99, а прерывание сгенерируется при достижении 255, то мы и получим путь в 156 тиков.

Далее в примере, чтобы генерация прерываний по переполнению нулевого таймера происходила, происходит установка бита TOIE0 в регистре маскирования прерываний TIMSK. После чего делаем глобальное разрешение всех маскируемых прерываний макрофункцией _SEI().

Определения всех векторов прерываний есть в заголовочной файле iom16.h:

Логика работы программы представляет уже описанную в первом примере систему с суперциклом, где обеспечивается квазипараллельная работа основного цикла и обработчика прерывания. В основном цикле проиходит переключение шестого вывода порта D с периодом 500 мс. Основной цикл прерывается каждые 10 мс на обработку прерывания по переполнения нулевого таймера. Обработка осуществляет при помощи функции-обработчика ISR_TickTimer(), которая вызывается по этому событию. В данной функции путем инкрементрования переменной T0_tick_cnt происходит подсчет 10-ти милисекундных тиков. Когда переменная T0_tick_cnt достигает 100 (т.е. прошла одна секунда), при помощи оператора if в обработчике определяется это событие. После чего переменная T0_tick_cnt и происходит переключение вывода 7 порта D, что обеспечивает мигание второго светодиода с периодом 1000 мс.
При отладке данного примера можо поставить точку останова, как в основном цикле, так и в обработчике прерываний.

Пятый пример представляет собой по логике работы предыдущий пример, но с использованием макрофункций.

Выставки битов в управляющем регистре нулевого таймера TCCRO, при настройке, осуществляется при помощи макрофункции TIMER0_SET_CLK_DIV(x), аргумент которой x определяет насколько будет делиться частота тактирования и выбирается из набора определений F_CPU_DIV_1, F_CPU_DIV_8, F_CPU_DIV_64, F_CPU_DIV_256, F_CPU_DIV_1024. Запись начального значения в регистре счета TCNT0 осуществляется при помощи макрофункции TIMER0_SET_CNT(x), где аргумент x – это собственно начальное значение (в нашем случае TCNT0_VALUE = 99). Установка бита TOIE0 в регистре маскирования прерываний TIMSK проиходит при помощи макрофункции TIMER0_OVF_INT_ON().
Все примеры в виде проекта IAR можно скачать здесь.

Заключение

Если этот пост вызовет интерес, то в следующей части рассмотрим примеры работы со встроенным АЦП, семисегментниками. После чего соберем все рассмотренные примеры в программный проект цифрового термометра.

Дополнение

Если есть потребность получить hex-файл программы написанной в IAR, то сделать это совсем не сложно. Достаточно в настройках проекта на вкладке Linker->Output и на вкладке Linker->Extra Output произвести настройки, как на скриншотах ниже. После этого, если произвести пересборку проекта нажав Project->Rebuild All в подпапке [название проекта]\Debug\Exe можно будет найти hex-файл. Который можно будет зашить программатором AVR910, клоном STK500 или любым другим доступным программатором.

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

Источник

Поделиться с друзьями
Как подключить и установить...
Adblock
detector