Jtag программатор для avr своими руками

Jtag программатор для avr своими руками

Программатор-отладчик для 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

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

Источник

FT232H и почти универсальный USB JTAG-адаптер за 15 евро

Продолжая тему практического применения микросхемы FTDI FT232H, затронутую мной в предыдущей статье, хотелось бы рассказать об использовании отладочной платы на ней в качестве дешевого и почти универсального JTAG-адаптера с интерфейсом USB и поддержкой множества микроконтроллеров различных архитектур и производителей. Я намеренно не называю этот адаптер «JTAG-отладчиком», т.к. далеко не все устройства с JTAG TAP поддерживают отладку, но обычными пользователями JTAG-адаптер используется в большинстве случаев именно для прошивки и отладки своего кода на МК. В этой статье я опишу только собственный опыт использования FT232H в качестве JTAG-адаптера, чтобы не давать ссылок на непроверенные решения, поэтому предлагаю читателям поделиться своими (или чужими) способами использования этой микросхемы в комментариях. Уверен, что способов этих найдется намного больше, чем здесь описано.
Заинтересовавшихся прошу под кат.

Пара слов про FT232H

Если вы не знакомы микросхемой FTDI FT232H, прочтите посвященную ей статью и возвращайтесь. Если читать другие статьи не входит в ваши планы, то позволю себе немного повториться:
FT232H и его более старые, но отличающиеся большим количеством каналов братья: двухканальный FT2232D, его USB 2.0 версия FT2232H и четырехканальный FT4232H — это контролеры USB USART c дополнительным режимом работы, обеспечивающим аппаратную поддержку протоколов SPI (сборка SPI-программатора была описана в предыдущей статье), JTAG (работа с которым будет описана в этой) и I2C (который я пока не буду рассматривать).
Сам чип достаточно дешевый, и в мелких партиях стоит приблизительно 200 рублей, но выпускается он в не очень удобных для DIY корпусах LQFP и QFN, поэтому проще всего купить не сам чип, а уже готовую breakout-плату вроде такой (те самые 15 евро за двухканальный FT2232H из заголовка статьи), или такой (600 рублей без доставки), или такой (тоже 600 рублей, но в другом месте), или любой другой — чип популярный, поэтому различных плат на нем очень много. Старайтесь выбирать такую, на которой уже распаяна микросхема EEPROM для хранения настроек — намного проще будет притворяться другими устройствами, что может не раз понадобиться в дальнейшем.

Пара слов про JTAG

Если вы не знакомы с интерфейсом JTAG, прочтите вот эту статью и снова возвращайтесь. Вообще говоря, JTAG Test Access Port — это, в первую очередь, интерфейс для отладки аппаратной части устройства, а не его программы, но, «чтобы два раза не бегать», прошивку и отладку кода через него поддерживают подавляющее большинство программируемых микросхем с этим интерфейсом. С другой стороны, зачастую даже 4 свободных выводов (а для JTAG требуется не менее 4) на МК нет, да и большинство производителей страдает (а зачастую даже наслаждается) синдромом NIH, поэтому вместо JTAG встречаются разного рода проприентарные интерфейсы, такие как SWD от ARM (протокол тот же, только по 2 вывода вместо 4), BDM от Freescale и Motorola (протокол другой, достаточно одного двунаправленного вывода), Spy-Bi-Wire от Texas Instruments (еще один вариант JTAG с 2 выводами), DebugWIRE от AVR (упрощенный отладочный протокол, которому достаточно 1 вывода) и другие. Некоторые из них, при желании, можно реализовать на базе FT232H программно, используя чип как USB GPIO-адаптер, а SWD и SWV — при помощи грамотной коммутации, как это сделано в отладчике KT-Link и его эмуляторе на базе открытого отладчика BusBlaster. На «голом» FT232H из вышеупомянутых вариантов отладочных интерфейсов поддерживается только JTAG, имейте это в виду.

Прошиваем и отлаживаем ARM’ы

В силу того, что на FT232H основано много распространенных отладчиков, самым простым способом добавления поддержки нашей платы в IDE и другие утилиты является эмуляция этих самых отладчиков. Некоторые фичи, возможно, не будут работать, но и от написания своих драйверов этот трюк избавляет. Проще всего притвориться открытым отладчиком CoLink (без суффикса Ex), схема которого отличается от большинства схем breakout-плат только наличием буфера. Более того, CooCox IDE напрямую поддерживает использование любых устройств на базе FT232H в качестве отладчика после предварительной конфигурации, а для Keil uVision и IAR Workbench имеются плагины, причем ни Vendor ID, ни Product ID менять не понадобится, т.к. CoLink использует как стандартные для FT232H VID и PID, так и стандартные драйверы FTDI D2XX.
Если ваша ОС отличается от Windows и вас не интересуют ни Keil, ни IAR, ни CooCox IDE — обратите внимание на проекты UrJTAG и OpenOCD, которые имеют полную поддержку отладчиков на базе FT232H. Я работаю в Keil uVision4, и этот выбор был сделан не мной, поэтому подробнее об использовании FT232H в Linux и OS X рассказать пока не могу.
В Keil же достаточно установить плагин, выбрать правильный Target и CoLink в качестве отладчика в свойствах проекта, после чего как прошивка, так и отладка будет проходить из IDE без привлечения какого-либо стороннего софта.
К сожалению, я не могу найти полного списка совместимых с CoLink чипов (официальный есть по ссылке выше, но он далеко не полон), поэтому придется либо пробовать, либо пользоваться списком совместимости с OpenOCD. В общем, лучше всего просто попробовать, есть большая вероятность, что заработает сразу.

Читайте также:  Заправка кондиционера баллончиком своими руками
Прошиваем и отлаживаем XE166

Уверен, что даже многие «матерые волки» впервые слышат о данной 16-битной RISC-архитектуре, не очень популярной за пределами ее родины — Германии. Архитектура эта уже достаточно старая, ее начальная модификация была разработана в 1993 году концерном Siemens в сотрудничестве с ST для использования в промышленной автоматике, и называлась она тогда C166. Позднее, в 2007 году, уже вышедшая из состава Siemens компания Infineon немного доработала эту архитектуру, увеличив количество стадий конвеера с 4 до 5 и добавив 32-битный блок сложения-умножения. Чипы на получившейся в итоге архитектуре XE166 выпускаются до сих пор, широко применяются в немецкой автоматике и устаревать пока не собираются. Работу с ними преподают студентам технических ВУЗов соответствующих ИТ-специальностей, поэтому и мне пришлось столкнуться с этой архитектурой и чипами на ней.
Мое мнение — нормальные чипы для своих задач, очень много периферии (по 6 каналов CAN с поддержкой MultiCAN, к примеру), до 100 Мгц с производительностью 1 MIPS на Мгц, но не без недостатков — легко могут жрать по 120 мА на 100 Мгц без особой вычислительной нагрузки и практически полностью отключенной от тактования периферии, да и в программировании посложнее AVR, но на уровне с типичными ARM’ами того же сегмента. Ну и vendor lock-in, куда без него.
Вследствие редкости и малой распространенности на некорпоративном рынке отладчики для этой архитектуры либо невозможно купить совсем, либо на их стоимость можно приобрести сотню нормальных отладчиков для других более популярных архитектур. Но пристальное изучение схемы девкита, на которой обнаруживается все тот же FT2232D, наводит на мысль, что отладчик можно добыть малой кровью. Так и есть, но в Infineon, в отличие от CooCox, решили все-таки поменять VID, PID и серийный номер установленного на девките FT2232D, поэтому это придется сделать и нам. Подключаем девкит, ждем установки драйверов, запускаем FT_Prog, записываем VID, PID и серийный номер (я добавлю их в статью, когда доберусь до девкита, сейчас, каюсь, уже не помню), а затем прошиваем эти же значения (номер серийный можно слегка поменять) в EEPROM нашей платы (вот тут то он и понадобился). Отключаем плату от ПК, подключаем заново — новые VID и PID подхватываются драйверами и далее работа с нашей платой мало чем отличается от работы с девкитом — все те же Keil и Infineon DAS в качестве отладчика.

Другие применения

Поиском по тематическим сайтам несложно найти массу других способов применения FT232H и его братьев для прошивки и отладки МК и ПЛИС, но я пока с ними не сталкивался, поэтому писать о «практическом применении» не имею права. Что не мешает мне, однако, попросить читателей, знакомых с этими самыми способами, поделиться ими в комментариях. Заранее большое спасибо.

Читайте также:  Изготовление подошвы для обуви своими руками

Источник

Сверхмобильная прошивалка AVR по JTAG

Нередки случаи, когда оборудование, нуждающееся в обновлении ПО норовит быть в неожиданных и труднодоступных местах. Да еще и времени на обновление бывает в обрез. Хорошо, когда в оборудовании есть загрузчик, позволяющий прошиться по аплинку/радиоканалу/съемному носителю информации. А что если загрузчик устарел и его самого надо обновить? Или же у ПО напрочь слетела вся память? Тогда-то и востребуется такая штука, как «прошивалка». Маленьких размеров, питающийся от устройства хэдкраб, который сможет залить в устройство заранее подготовленный загрузчик или программу. И главное – никаких нетбуков/ноутбуков/проводов! Даже среднего образования не надо.

Итак, сверхмобильная прошивалка.
Схемотехника
Устройство представляет собой платку с разъемом JTAG (IDC-10, в том формате, который полюбился Atmel) и контроллера ATMega8. В качестве контроллера конкретно здесь может быть любой другой, совместимый по ногам, например, ATMega168.

Схема:

Плата:

Все прекрасно разводится на одном слое, без перемычек.

Принцип работы
Наш хэдкраб тактируется от внутреннего RC-генератора, т.к. JTAG — это синхронных интерфейс и тайминги не важны. Для отображения состояния на плате располагается сдвоенный красно-зеленый светодиод.
После подачи питания контроллер инициализирует линии JTAG (TMS, TCK, TDO, TDI), зажигает красный светодиод и согласно протоколу работы TAP-контроллера (Test Access Point, описание его работы можно найти в даташите на любой МК, поддерживающий JTAG) пытается ввести в режим программирования устройство, к которому он прицепился. Здесь небольшое лирическое отступление. В программе работа с TAP выглядит так:

Реализация функций TAP и shift_instruction выглядит следующим образом:

По сути, каждая операция по JTAG производится через TAP посредством этих двух функций в различных вариациях. Например так выглядит чтение байтов сигнатуры устройства:

Остальные команды можно изучить в описании TAP или же, более наглядно, в прикрепленном к посту рабочем проекте. Лирическое отступление закончилось, вернемся к описанию работы.

После входа в режим программирования прошивалка сверяет байты сигнатур устройства с зашитыми в код прошивалки (не дай Б-г не то устройство прошьем). Если байты не совпадают, прошивалка деинициализирует линии JTAG и начинает мигать обоими светодиодами, пока её не отцепят от устройства. Короче говоря, отваливает от процесса. Если устройство всё же похоже на нужное, то прошивалка делает следующее:
— стирание кристалла (chip erase);
— прошивка память программы устройства из своей собственной памяти (program flash);
— проверка памяти программы устройства со своей собственной памятью (read flash);
— программирование битов конфигурации (fuses);
— программирование битов защиты (lock bits);
— отваливается, погасив все светодиоды.

Конечно же, прошивлка сама по себе не отвалится, её надо отстыковать). Но на момент погашения светодиодов, устройство, к которому наш хэдкраб был подключен, уже должно стартовать: готово к работе!
Если на этапе программирования или проверки возникнет несовпадение или ошибка, прошивалка отлипнет от порта и замигает светодиодами, т.е. опять-таки отвалит от процесса.

Нюансы
1) Естественно, для того чтобы прошивалка все-таки прошила устройство по JTAG, этот самый JTAG должен быть активирован на данном устройстве. Иначе придется применять прошивалку уже другого рода — по ISP. Подобное так же собиралось и функционирует.
2) Собственно сама прошивка для устройства располагается в памяти контроллера прошивалки и может занимать довольно много места. Если не будет влезать в Mega8, то можно применить Mega168, там больше флеша.
3) Бинарник прошивки устройства цепляется к прошивке хэдкраба на этапе линковки, это делается различными способами, в зависимости от среды разработки. В IAR это в свойствах проекта в Linker во вкладке Config указываем Raw binary image путь к файлу бинарника, задаем Symbol, Segment и Align например как a123, SEGa и 2 соответственно. Тогда на вкладке Extra Options надо будет добавить 2 строки:
-ZSEGa=EFF
-ga123
где EFF — это адрес, по которому будет располагаться бинарник устройства в памяти прошивалки.

Вот вроде бы и всё. Устройство бывает крайне полезным, когда устройства сверхподвижны и отлавливать их приходится буквально в поле.
Снова оговорюсь, что есть подобное же устройство, но для программирования через SPI.

Источник

Оцените статью