РадиоКот >Схемы >Цифровые устройства >Примочки к ПК >

Теги статьи:

Программатор-отладчик для AVR микроконтроллеров STK-ICE

Автор: Serj_K
Опубликовано 29.04.2013
Создано при помощи КотоРед.

Как-то раз, в один не очень прекрасный день, мне понадобилось отловить проблему в реальном времени на работающем устройстве. У меня не было отладчика, только программатор STK-200. Но я знал о существовании клонов отладчика AVR JTAG-ICE. За два дня быстро повторил один из вариантов. Проблему отловил, а отладчик лёг в стол на долгое хранение. Распаять его рука не поднялась.

Имеющийся у меня программатор STK-200 прост и дёшев но использует устаревший и не очень удобный в работе LPT порт. Поэтому я решил изготовить новый программатор под интерфейс USB. Встал вопрос – изготавливать программатор непосредственно с USB интерфейсом или с использованием преобразователя USB-RS232? Я выбрал второй вариант, так как решился изготовить его на базе имеющегося JTAG-ICE. И вдруг меня посетила мысль – а нельзя ли просто дополнить JTAG-ICE дополнительной поддержкой программатора?

Для возможности такого варианта в прошивке JTAG-ICE должно оставаться достаточно свободного места, которое может включать имеющийся загрузчик, который будет уже не нужен. Поиск готового решения на просторах Интернет дал положительный результат. Буквально за несколько месяцев до меня такая же идея пришла в голову ещё одному человеку - ali_asadzadeh - и он её реализовал – поместил в JTAG-ICE свою реализацию программатора STK-500 - https://www.sonsivri.to/forum/index.php?topic=19994.0 . Эта страничка с моим переводом находится в архиве с исходниками прошивки. Главное достоинство этой реализации – использование аппаратной шины SPI и аппаратного формирования тактового сигнала для программируемого МК.

Скачав исходники и повторив данное решение, я обнаружил наличие некоторых проблем, в частности ошибки при работе с EEPROM на АТMega-128. Кроме того, не были реализованы некоторые функции программатора STK-500. Но метод, КАК это сделать, был рабочим.

Для проверки правильности работы программатора STK-500 я изменил исходники известного клона STK-500 от Petka под имеющуюся у меня схему JTAG-ICE. Всё заработало отлично, но данный вариант программатора тоже имел свои недостатки, главные из которых - программное формирование шины SPI и размер кода, который не помещался в свободное пространство JTAG-ICE. И здесь так же не были реализованы некоторые функции программатора.

Так как в исходниках ali_asadzadeh была явная ошибка, то я взял исходники от Petka и очень сильно их перелопатил, используя положительные наработки из обоих вариантов с добавлением недостающего функционала. С целью уменьшения размера кода напряжение целевого микроконтроллера не измеряется, а просто  выдаётся константа, соответствующая напряжению 3,3В.

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

Схема содержит три независимые части:

1) Преобразователь интерфейса U1 – у меня выполнен на преобразователе USB-UART FT323RL. Может быть любым, главное получить сигналы RxD и TxD с правильными уровнями.
2) Гальваническая развязка U2 – у меня выполнена на ADuM1201. Выполняет две функции – собственно гальванической развязки и преобразователя уровней, когда целевой микроконтроллер питается напряжением, отличным от 5В. Гальваническая развязка отключается, если замкнуть хотя бы один джампер JPGND. Если данная функция не нужна, то можно U2 не ставить. Если нужно, то целевой микроконтроллер можно запитать и от программатора, для чего необходимо замкнуть джамперы JPVCC и JPGND.
3) Собственно программатор-отладчик U3. Для выбора режима работы служит джампер JP1. В замкнутом состоянии включается режим программатора STK-500, а в разомкнутом – отладчика JTAG-ICE. Джампер устанавливается в нужное положение до подачи питания на U3. Для подключения целевого микроконтроллера служат два разъёма для соответствующих интерфейсов  - JTAG и ISP. На моей плате разъём для JTAG установлен сверху, а для ISP – на торце.

Изначально я не ставил USB разъём, а подпаял тонкий USB шнур прямо на плату. Затем случайно увидел и сразу же купил печатную плату для преобразователя USB-UART под FT323RL и немного переделал конструкцию, получив более универсальный вариант с отсоединяемым преобразователем USB-UART, который можно использовать и для других задач.

Для того, чтобы запрограммировать микроконтроллер U3, понадобится внешний программатор, который подключается к разъёму Х2. При  этом нужно замкнуть джампер JP_SPRG и подать питание на U3, замкнув джамперы JPVCC и JPGND и подключив USB разъём к ПК. Выбрать файл прошивки stk-ice.hex и записать его. После записи прошивки нужно отключить внешний программатор, снять джампер JP_SPRG и передёрнуть USB разъём. Если используется преобразователь USB-UART и установлен его драйвер, то можно проверять работу STK-ICE в нужном режиме.

В режиме программатора STK-500 имеется возможность устанавливать тактовую частоту ISP до 1,845МГц и частоту внешнего генератора до 3,686МГц.



После проделанной работы имеем два стандартных устройства в одном, которые официально поддерживаются ПО как от самой Atmel, так и от сторонних разработчиков.

Для обсуждения программатора лучше использовать имеющуюся тему, например https://radiokot.ru/forum/viewtopic.php?f=20&t=73283

В архивах исходники прошивки и схема с платой в Альтиуме и под ЛУТ.


Файлы:
Архив RAR
Архив RAR


Все вопросы в Форум.