Робимо 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 якого замикаємо разом, переводячи мікроконтролер в режим завантаження ust1. Підключаємо uart перехідники подаємо харчування на плату програматора можна через usb роз'єм.

В утиліті вибираємо послідовний порт, що використовується, і дотримуємося інших інструкцій. Цей процес у картинках описувати нема рації - все досить тривіально.

Після закінчення прошивки відключаємо всі допоміжні пристрої та підключаємо програматор до комп'ютера, він має нормально визначитись. Тепер залишилося оновити прошивку програматора за допомогою

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

З набору "гаряче коханих" Arduino-контролерів до першої категорії відносяться ATmega 8 , ATmega 168 , ATmega 328P. Але й у другій категорії теж є один екземпляр: 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 дволикий?

А ось чому:

  • З одного бокуЦей програматор - простий. Поширюється як безкоштовний проект, його можна легко виготовити самому.
  • З іншого боку, він розроблений фірмою, тривалий час професійно займаєтьсярозробкою та виробництвом різної радіоелектронної апаратури, у тому числі програматорами.
  • З одного бокуЦей програматор - простий, з першого погляду має не дуже вражаючі характеристики.
  • З іншого боку, працює спільно з професійною програмою(До речі, такий самий, як і інші професійні програматори ChipStar).
  • З одного боку, ми пропонуємо цей програматор для вільної безкоштовноюзбирання.
  • З одного боку, Ми його продаємо і в готовому вигляді, як звичайний бюджетний продукт.
  • З одного боку, на саморобний програматор не поширюється гарантія (що природно).
  • З одного бокуЯкщо ви його змогли зібрати, то і відремонтувати зможете, та й програматор настільки простий, що ламатися, власне, нема чому.
  • З одного боку, це простий внутрішньосхемнийпрограматор.
  • З одного боку, через прості адаптери розширення він підтримує програмування 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-22 До блокноту
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 Резистор