Сторінка ембеддера - avr dragon
Сімейство мікроконтролерів з архітектурою AVR стало де-факто стандартом для електронних виробів. Я починав вивчати контролери саме з цього сімейства, але і зараз нерідко використовую їх в домашніх конструкціях.
Ось уже більше року для налагодження прошивок я використовую AVR dragon.

AVR Dragon - найдешевший відладчик для мікроконтролерів AVR фірми Atmel, що підтримує debugWire.
Чим відрізняється програматор від відладчика?
Програматор - це просто пристрій, що записує програму в контролер. Далі програма виконується сама по собі і якщо щось піде не так, то дізнатися що саме - дуже складно. Усунення несправностей дозволяє зупинити виконання програми в будь-якій точці і дізнатися значення всіх змінних, регістрів і взагалі пам'яті, відладчик дозволяє виконувати програму покроково, подивитися стек викликів функцій і купу інших корисних речей. Вообщем, відладчик - це круто!
Щоб було зрозуміло, навіщо мені потрібно було купувати саме цей відладчик, а не зібрати, наприклад, ось такий. коротко опишу різні інтерфейси програмування і налагодження які використовуються в контролерах AVR.
ISP (In System Programming) - інтерфейс внутрисхемного програмування, дозволяє програмувати контролер НЕ випаюючи з плати. Через ISP контролер програмується з невеликою швидкістю, але ISP володіє великою гідністю для початківців - програматор для цього інтерфейсу складається з чотирьох дротів. Багато в чому завдяки цьому інтерфейсу, Atmel став лідером аматорських конструкцій. Для того, щоб запрограмувати контролер, до нього потрібно підключити 4 сигнали - MISO, MOSI, SCLK, RESET.
HV prog - високовольтне програмування. Вміє дуже швидко програмувати контролери, використовується при масовому випуску, в аматорській практиці практично не потрібен. (Може бути використаний для відновлення ISP, якщо ви його випадково відключили через неуважність). До контролера потрібно підключити 18 сигналів - PD [7 ... 0], PC [7 ... 0], XTAL, RESET.
JTAG - самий широко використовуваний оцінний інтерфейс. Про нього вже дуже багато написано, тому повторюватися не буду. Присутній в контролерах з великою кількістю ніжок. Вимагає підключення п'яти сигналів (TCK, TDO, TMS, TDI, RESET).
debugWire - пропріетарний оцінний інтерфейс Atmel, який дозволяє стежити за внутрішніми процесами контролера по одному дроту (RESET). Так, як в аматорській практиці зазвичай використовуються контролери з невеликою кількістю ніжок, це просто чудова альтернатива JTAG'у.
На жаль, Atmel трохи зіпсував всю чудові ідеї тим, що debugWire на нових контролерів відключений за замовчуванням, і включається за допомогою ISP інтерфейсу (тобто, прийдеться спочатку підключити до контролера цілих 4 контакту, включити debugWire, і тільки після цього можна відключити 3 контакту SPI ).
AVR Dragon дозволяє налагоджувати контролери з пам'яттю до 32кБайт, а програмувати вміє взагалі все контролери AVR (крім atxmega).
Звичайно, за ціну AVR dragon можна накупити дуже багато великих контролерів (33 штуки atmega16, наприклад) і використовувати їх з AVR JTAG ICE clone. так-що купувати дракона чи ні - вирішувати вам. Особисто я люблю використовувати хороший інструмент, тому купив.
Практично всі вироби я збираю на контролерах: atmega48, atmega88, atmega168 і attiny13. Це дуже збалансовані контролери! Всі вони мають debugWire інтерфейс.
Перша проблема, з якою я зіткнувся, купивши avrDragon - як-же його підключити до контролера? Справа в тому, що на самій платі відладчика виведена тільки колодка. На протилежному боці намальована карта розташування висновків, але як вони узгоджуються - далеко не очевидно! Я разок помилився з підключенням, тому викладаю розташування контактів.

Кожен сигнал потрібно підключити до такого-же на контролері. Сигнал VTG (Target Voltage) служить для підстроювання логічних рівнів відладчика до логічним рівням отлаживаемого контролера і підключається до напруги його живлення.
Друга проблема - DebugWire не працює, якщо у контролера немає тактової частоти! Я довго шукав проблему в драконі і проводах, а виявилося, просто доріжка до кварцу була пошкоджена.
Третя проблема - швидкість налагодження в AVR Studio була значно вище, ніж в IAR. Так як основне моє засіб розробки все-таки IAR, це мене зовсім не радувало. На щастя, в останніх версіях IAR'а швидкість роботи з debugWire значно збільшилася.
Для підключення дракона до контролерів, я спаяв два проводка. Одні з них припаюється прямо до доріжок, другий вставляється в роз'єм на платі. Так як на роз'ємі дракона немає ключа, я зробив свій - написав TOP. До речі, дроти дуже зручно мітити такою технологією - пишемо маркером на термоусадці назву сигналу і термоусаживающихся її - наші написи тепер стали маленькі, гарненькі і ні за що не злізуть з дротів!
Тепер типова послідовність дій. Запускаємо IAR. В опціях проекту міняємо відладчик на Dragon (Project-> Options-> Debugger, встановлюємо Dragon). Підключаємо дракона до плати, подаємо харчування. Тепер вибираємо в меню Dragon-> Fuse Handler. Встановлюємо ті фьюз, які нам подобаються, дозволяємо debugWire (фьюз DWEN). Відключаємо харчування, відключаємо ISP від контролера (можна і залишити, якщо SPI не використовується), залишаємо тільки RESET, VTG і GND підключеними. Включаємо харчування, тиснемо на кнопку "Download and Debug". вуаля:
Якщо захочеться поміняти фюзи, доведеться знову підключити ISP контакти. В переважній більшості проектів SPI не використовується, тому можна один раз підключитися і нічого не чіпати.
У дракона є кілька опцій (Project-> Options-> Debugger-> Dragon):
Supress download - якщо поставите галочку, буде питати вас - завантажувати нову програму в контролер або залишити стару? Використовується для (вельми сумнівною) економії часу і ресурсу флеш-пам'яті.
Allow download to RAM - іноді в процесі налагодження, потрібно зберегти дані ОЗУ, а потім завантажити їх назад в контролер. Ця опція дозволяє це зробити. Я ніколи їй не користувався, тому нічого толком сказати не можу.
Target consistency check - перевіряє правильність записаних даних.
Ці опції використовуються рідко і не дуже важливі, а ось на другій вкладці є дуже важлива опція:
Run timers in stopped mode - таймера контролера продовжують працювати, навіть якщо програма зупинена. Наприклад, це дуже важливо для Шимова, якщо їх зупинити в непередбачений момент, що-небуть може вийти з ладу.
У мене питали - чи можна програмувати контролер по debugWire, або це тільки оцінний інтерфейс? Відповідь - можна. Але знову-таки доведеться спочатку включити debugWire за допомогою ISP.
Нещодавно спробував використовувати JTAG з AVR ами. Враження найпозитивніші. Заливає прошивку значно швидше, ніж debugWire. Вміє програмувати фюзи.
Макетне поле
На драконі є ще макетне поле. Кажуть, якщо впаяти туди ZIF-панельку, то буде дуже зручно масово програми контролери. Особисто я цим не займався, тому нічого сказати не можу.
Проблема зі стабілізатором.
Є ще одна проблема. У схемі живлення дракона розробники допустили помилку, і мікросхема в блоці живлення деяких екземплярів згорає. Atmel дає рекомендацію випаять згорілу мікросхему і припаяти один проводок, при цьому гарантія на дракона не втрачається.
Ця проблема проявляється при дотику пальцем до мікросхеми-стабілізатора напруги, який збуджується і перегрівається. При цьому материнська плата повинна обмежити струм і відключити дракон, але дешеві материнки цього не роблять і дракон згорає. На зображенні показано, куди не варто торкатися.

В іншому, поки мікросхема не згоріла, переробкою займатися не варто. Головне - вимикати дракона коли на довго відходите від нього щоб не влаштувати пожежу. Дракон може виявитися вогнедихаючим!
Як на зло, відразу після написання цієї статті стабілізатор мого дракона згорів. Я зробив переробку, і все запрацювало (навіть краще, ніж до цього - менше розривів зв'язку). Переробка дуже проста. Потрібно випаять мікросхему стабілізатора і прокинути проводок від USB роз'єму до танталового конденсатора. Мікросхема-стабілізатор має термалпад, і тому відпоювали досить складно.

Більшість компонентів на платі мають діапазон напруг живлення 4.5-5.5 вольт. Однак, стандарт USB говорить про те, що напруга на шині USB в гіршому випадку може опускатися до 4.15 вольт (якщо використовується USB хаб з харчуванням від комп'ютера). Для того, щоб підняти напругу з 4.15 до 5 використовується стабілізатор.
Таким чином, якщо ви підключаєте дракона безпосередньо до комп'ютера або до хабу із зовнішнім живленням, то після переробки дракон буде продовжувати працювати як ні в чому не бувало.