Делаем j tag программатора дебаггера сами. Программаторы AVR. й способ:Собрать программатор самому, купив готовую печатную плату и прошитый микроконтроллер

Делаем j tag программатора дебаггера сами. Программаторы AVR. й способ:Собрать программатор самому, купив готовую печатную плату и прошитый микроконтроллер
Делаем j tag программатора дебаггера сами. Программаторы AVR. й способ:Собрать программатор самому, купив готовую печатную плату и прошитый микроконтроллер

Самодельная и доступная альтернатива продаваемому программатору от STMicroelectronics. Является выдержкой и компиляцией нескольких статей и схем найденных в интернете. Реализация в минимально возможном форм-факторе.

У любого разработчика встраиваемого софта должен быть программатор для устройств которые он использует. В моём случае микроконтроллеры фирмы STMicroelectronics, а так же Milandr (российские процессоры на ядре ARM).

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

Решено было сделать программатор самостоятельно. За основу легли схемы отладочных плат для различных МК, в итоге получился полнофункциональный отладочный модуль и не только для stm32, но и для stm8 и даже миландровских чипов (проверено пока только на К1986ВЕ92, но думаю и другие тоже будут шиться и отлаживаться).

Основные функции:

  • программирование и отладка STM32;
  • программирование и отладка STM8;
  • программирование и отладка ARM Миландр.

Интерфейсы программирования:

  • SWD - до 4 МГц;
  • JTAG;
  • SWIM.

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

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


Ядром является контроллер stm32f103, который и используется во всех отладочных платах. На его входах и выходах устройства, я имею ввиду разъем для подключения программируемого микроконтроллера, установлены диоды для защиты от статики, диоды выбраны достаточно маленькие, но легко доступные и без особых сложностей впаиваемыми, даже людьми с ослабленным зрением, сам я впрочем и не жалуюсь со своими единичками на обоих глазах.

В качестве разъема для подключения к компьютеру используется microUSB, выбор пал только лишь из-за его современности по сравнению с его мини братом. У меня же самого на плате стоит именно мини, когда собирал заложенного микро не было в наличии.
Плата выглядит следующим образом:


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

Для обеспечения работы необходимо зашить по в микроконтроллер, для этого нам понадобиться usb-uart переходник, бутлоадер и утилита для прошивки .

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

Решение было найдено на одном из многочисленных форумов - бинарник прошивки. Правда была проблема, после прошивки контроллера программатор определялся, но работать не хотел, зато спокойно прошивался через st-link utility, было решено подчистить файл прошивки, удалив все лишнее, оставив только сам загрузчик.

Как можно догадаться все удалось и теперь загрузчик можно взять .

Для заливки используем разъем P1, выводы 3 и 4 которого замыкаем вместе, переводя микроконтроллер в режим загрузки по usart1. Подключаем uart переходники подаем питание на плату программатора, можно через usb разъем.

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

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

Микроконтроллеры ATmega можно условно разделить на две категории: те, что программируются только через ISP (шина из проводов MISO, MOSI, SCK + управление сбросом) и те, что имеют в дополнении к этому интерфейс JTAG .

Из набора "горячо любимых" Arduino-контроллеров к первой категории относятся ATmega8 , ATmega168 , ATmega328P . Но и во второй категории тоже присутствует один экземпляр: ATmega2560 , используемый в Arduino/Freeduino MEGA 2560 .

JTAG - это механизм, позволяющий автоматически контролировать качество монтажа печатных плат: не закоротилось ли чего или, наоборот, плохо припаялось. Очень полезная вещь в промышленном масштабе, особенно когда на одной плате "счастливо" уживаются микросхемы разных фирм (стандарт IEEE 1149.1, на котором базируется JTAG - открытый). Тем более логично, что многие производители микросхем добавили возможность программирования и отладки своих чипов через все тот же JTAG.

Для чего может потребоваться JTAG в повседневной жизни?

Фирменное устройство от ATMEL стоит немало (а я и так уже прикупил , денег после этого осталось ноль отрицательное количество):

Что же делать? Я уже говорил, что стандарт - открытый, а процесс программирования через JTAG хорошо документирован - достаточно открыть любой даташит на микроконтроллер ATMEL с JTAG-интерфейсом.

Кстати, когда-то, на заре появления микроконтроллеров фирмы ATMEL , фирма-конкурент Microchip дразнила ATMEL показательно разобрала какой-то инструментальный девайс для разработчика программ микроконтроллеров ATMEL и демонстрировала, что он собран на микроконтроллерах её производства - то бишь, на PIC-ах. Впрочем, было это невероятно давно, мир теперь уже совсем другой (c).

В интернете есть масса вариантов самодельных копий фирменного AVR JTAG ICE . Одну из таких упрощенных до полного безобразия можно найти, например, . Что самое забавное - работает , хотя состоит практически из одного МК: ATmega16. Оригинальный программатор использует чип, полностью совместимый с ATmega16, что делает возможным заливание в самопальный программатор прошивок от фирменного (правда, новые навряд ли будут появляться, поскольку AVR JTAG ICE дано снят с производства).

Для начала надо достать основной компонент - микроконтроллер ATmega16-16PU и кварц 7.3728 МГц, после чего собрать на макетке минимальную схему для программирования:

Схема - классическая , необходима для запуска ATmega. Напомню, что обычно делают в таком случае:

  • подключают питание - все GND и VCC (обычно выводов GND не менее двух);
  • ставят между GND и VCC поближе к ножкам ATmega фильтрующий помехи конденсатор 100 нФ (или 0.1 мкФ - кому как больше нравится);
  • подключают между XTAL1 и XTAL2 кварц и соединяют их через два одинаковых конденсатора на землю (разброс номинала указан в документации, не обязательно использовать 22 пФ , можно, например, и 33 пФ );
  • притягивают линию сброса к VCC через резистор 10К и вешают конденсатор 100 нФ на землю, чтобы обеспечить небольшую задержку линии сброса после подачи питания.
Выглядеть это будет приблизительно так (всё благополучно влезает на макетку 300+100):

Соединяем схему через вилку ISP с программатором и запитываем от него же, затем зашиваем прошивку и выставляем фьюз-биты:

avrdude -C avrdude.conf -c usbasp -p m16 -U hfuse:w:0x1f:m -U lfuse:w:0xcf:m

avrdude -C avrdude.conf -c usbasp -p m16 -U flash:w:miniICE.hex

Если операция прошла успешно, полдела сделано. Можно аккуратно удалить ISP-разъем и преобразовать схему к следующему виду:

На макетке это выглядит так:

Наверное, вы обратили внимание, что в схеме я использовал USB-чип последовательного порта - FT232RL . Это гораздо удобнее, чем COM-порт, по многим причинам. Но в макетку SSOP не воткнешь, поэтому я использую самостоятельно изготовленный переходник :

В классическом варианте линий JTAG чуть больше, чем на схеме:

Обязательные сигналы - TCK, TDO, TDI и TMS (тактовая, выход данных, вход данных и управление режимом теста).

NSRST и NTRST - это управление сбросом на шине JTAG. В нашем случае не обязательны, поскольку сброс МК можно инициировать командной последовательностью на линиях обязательных сигналов.

Теперь разберемся с питанием. Желательно, чтобы внутрисхемный программатор питался от программируемой схемы. Этим сразу решается проблема стыковки уровней программируемой схемы и программатора. С другой стороны, если в программаторе есть конвертер уровней сигналов, различие VCC программатора и target уже не является проблемой (не считая усложнение схемы программатора).

С обязательной линии VTref должно подаваться напряжение питания устройства. По идее, он нужен вышеуказанному чипу конвертера уровней, внутри программатора. Но если JTAG ICE планирует питаться от target-а, то используется линия Vsupply . Для простоты, их можно объединить, но это не обязательно.

В зависимости от положения джампера SV2 на схеме ATmega16 будет питаться либо от USB, либо от target-а. Я на макетку ставить переключающий джампер поленился, ибо предполагалось питание только от target. Зато перед включением три раза проверил, что питание с USB не подается . Для надежности, на плате USB-TTL разомкнул джампер подачи питания. Далее контакт M8RX соединяется с ножкой МК RX, M8TX - с TX.

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

(устройство справа я обязательно рассмотрю позже, пока что могу только повторить, что внутри у него ATmega128)

Единственный минус клона AVR JTAG ICE - сравнительно небольшой список поддерживаемых МК:

  • ATmega128
  • ATmega128A
  • ATmega16
  • ATmega162
  • ATmega165
  • ATmega169
  • ATmega16A
  • ATmega32
  • ATmega323
  • ATmega32A
  • ATmega64
  • ATmega64A
Еще, говорят, поддерживается AT90CAN128, но проверить это нет возможности:(

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

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

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

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

2019-10-11 Дата последнего обновления программы: 2019-10-11

Двуликий Янус

Мы решили назвать этот программатор "Янус ".

Почему так? Потому что в римской мифологии Янус - это двуликий бог дверей, входов и выходов, а также начала и конца. Какая связь? Почему наш программатор ChipStar-Janus двуликий ?

А вот почему:

  • C одной стороны , этот программатор - простой. Распространяется как бесплатный проект , его можно легко изготовить самому .
  • C другой стороны , он разработан фирмой, длительное время профессионально занимающейся разработкой и производством различной радиоэлектронной аппаратуры, в том числе программаторами.
  • C одной стороны , этот программатор - простой, с первого взгляда имеет не сильно впечатляющие характеристики.
  • C другой стороны , работает совместно с профессиональной программой (кстати, точно такой же, как и остальные профессиональные программаторы ChipStar).
  • C одной стороны , мы предлагаем этот программатор для свободной бесплатной сборки.
  • C одной стороны , мы его продаем и в готовом виде, как обычный бюджетный продукт.
  • C одной стороны , на самодельный программатор не распространяется гарантия (что естественно).
  • C одной стороны , если вы его смогли собрать, то и отремонтировать сможете, да и программатор настолько простой, что ломаться, собственно, нечему.
  • C одной стороны , это простой внутрисхемный программатор.
  • C одной стороны , через простые адаптеры расширения он поддерживает программирование NAND FLASH и других микросхем уже "в панельке".

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

Что нас побудило разработать этот программатор.

Есть великое множество простых специализированных программаторов, пригодных для самостоятельного изготовления .

Есть множество дешевых китайских программаторов в уже готовом виде.

Есть немало любительских разработок , часто по качеству превосходящих последние.

Казалось бы, в чем смысл очередной поделки?

Мы длительное время занимаемся разработкой производством и поддержкой универсальных программаторов , в основном назначения. У нас богатый опыт работы с самыми разными микросхемами. Часто к нам обращаются люди уже собравшие, а часто и купившие, какой-нибудь из выше названных "изделий". Нашим специалистам часто без смеха/слез/ужаса (нужное подчеркнуть) невозможно смотреть на схемные решения, качество сборки и, особенно, на программное обеспечение этих приборов. Ладно когда программатор стоит "три копейки", купил, что-то работает, что-то не работает, зато деньги не большие. Но часто соотношение цена/возможности таких приборов у нас вызывают, мягко говоря, удивление. Хочется воскликнуть: это столько не стоит!

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

Итак, программатор ChipStar-Janus в начальной конфигурации - это внутрисхемный программатор. В таком режиме он поддерживает микроконтроллеры PIC и AVR фирмы Microchip , некоторые микроконтроллеры архитектуры MCS51 , микроконтроллеры фирмы STMicroelectronics и еще ряд других, а также микросхемы последовательной памяти с интерфейсом I2C (в основном серия 24 ). К разъему расширения программатора можно подключить простейшие адаптеры и начать программировать микросхемы памяти "в панельке".

Сейчас реализовано программирование "в панельке":

  1. EPROM ) с интерфейсом I2C (серия 24xx );
  2. микросхемы последовательной флэш памяти (Serial FLASH ) с интерфейсом SPI (SPI Flash );
  3. микросхемы последовательной памяти (Serial EPROM ) с интерфейсом MW (серия 93xx );
  4. микросхемы NAND FLASH ;

Программатор и программное обеспечение поддерживает технологию самостоятельного добавления микросхем в три клика. Пока реализовано добавление микросхем NAND и I2C . В самое ближайшее время планируется реализовать эту технологию для микросхем MW (серия 93xx ) и AVR . Таким образом, вы получаете не просто программатор, а мощный инструмент для самостоятельной работы .

Три способа получить программатор ChipStar-Janus

1-й способ:
Собрать программатор самому полностью

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

Алгоритм действий:

2-й способ:
Собрать программатор самому, купив готовую печатную плату и прошитый микроконтроллер

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

Алгоритм действий:

  1. Прочитать условия использования самостоятельно собираемого программатора.
  2. Прочитать инструкцию по сборке программатора.
  3. Скачать полную документацию на программатор.
  4. Купить набор для сборки (готовую печатную плату и микроконтроллер с уже записанной прошивкой).
  5. Закупить необходимую комплектацию для сборки программатора согласно

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

Чтобы «зашить» 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.

При написании статьи использовались следующие источники:
1 http://onembedding.bialix.com/files/jtag_vit/
2. Официальное руководство пользователя AVR JTAG ICE JTAGuserguide.pdf

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

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
DD1 ИС буфера, драйвера

CD74AC244

1 В блокнот
DD2 ИС RS-232 интерфейса

MAX232

1 ST232BD В блокнот
DD3 МК AVR 8-бит

ATmega16

1 ATmega16-16PI В блокнот
DA1 Линейный регулятор

LM78L05

1 В блокнот
VD1, VD2 Выпрямительный диод

SM4007PL

2 В блокнот
VD3 Стабилитрон

BZX55C5V1

1 SMBJ5.0A В блокнот
VD4, VD5 Диод Шоттки

SM5819PL

2 В блокнот
HL1, HL2 Светодиод КР-3216-2 2 В блокнот
C1, C2, C4-C6, C9-C13, C16 Конденсатор 0.1 мкФ 10 В блокнот
C3 1 В блокнот
C7 Электролитический конденсатор 470 мкФ 10 В 1 Танталовый В блокнот
C8 Конденсатор 1200 пФ 1 В блокнот
C14, C15 Конденсатор 22 пФ 2 В блокнот
R1 Резистор

36 кОм

1 В блокнот
R2 Резистор

150 кОм

1 В блокнот
R3-R6 Резистор

10 кОм

4 В блокнот
R4, R10 Резистор

4.7 кОм

2 В блокнот
R9, R11-R15 Резистор

200 Ом

7 В блокнот
R16 Резистор