Багато радіоаматорів знають (іноді на власному сумному досвіді), що мікроконтролер AVR можна вивести з ладу необережним програмуванням настроювальних біт (так званих ф'юзів).
Будучи запрограмованими неправильно, ці біти зберігаються в незалежній пам'яті, і можуть призвести до неможливості подальшого програмування мікроконтролера або вибору фьюзами його тактової частоти. Принаймні неможливо відновити мікроконтролер звичайними засобами, без спеціального високовольтного HVPP/HVSP програматора.
Atmega fusebit doctor, як випливає з назви, це пристрій, призначений для відновлення "вбитих" мікроконтролерів AVR ATmega (і ATtiny починаючи з версії v2.04 пристрою) шляхом запису в них коректних значень біт ф'юзів. Описаний простий і дешевий пристрій дозволить виправити Ваші мікроконтролери за долі секунди.
- HVSP (High Voltage Serial Programming) послідовне високовольтне використовується для програмування мк 8 і 14 пін і не залежить від стану ф'юзів. Потребує зовнішнє джерело 12В та транзисторний ключ для подачі високої напруги на RESET пін.
- HVPP (High Voltage Parallel Programming) високовольтне паралельне використовується для програмування мк від 20 пін і вище, не залежить від стану ф'юзів. Також вимагає зовнішнє джерело 12В та транзисторний ключ для подачі високої напруги на RESET пін.
- ISP (In-Sistem Programming) внутрішньосхемне програмування використовує 4х провідний протокол SPI для програмування і підтримується багатьма AVR мк. Головний недолік – при певних установках ф'юзів може бути непридатним для використання.
Цей пристрій використовує паралельний та послідовний принципи високовольтного програмування мікроконтролерів AVR. За допомогою цих методів можна "достукатися" до вбитих мікроконтролерів, у яких заборонено скидання або програмування ISP.
Як відновити ф'юзи "вбитого" мікроконтролера
Просто помістіть вбитий AVR у сокет, натисніть кнопку START і... і це все. Ви отримаєте відновлений, працездатний мікроконтролер у тому вигляді, як він прийшов із заводу Atmel. На платі AFD є слоти для встановлення більшості сумісних мікроконтролерів AVR, які збігаються з цоколівкою DIP-версій Atmega8, Atmega16, Attiny2313... Є також додатковий конектор, куди можна підключити адаптери.
Світлодіодна індикація
Для індикації стану на платі fuse-доктор встановлено 2 світлодіоди - зелений (GOOD) та червоний (BAD).
Зелений постійно горить – пацієнт успішно вилікований, біт фьюзи відновлено. Якщо дозволені біти захисту, то буде просто проведена перевірка стану ф'юзів - чи заводські вони, і якщо це так, то зелений світлодіод спалахує.
Червоний постійно горить - проблема з сигнатурою, її не можна прочитати, немає мікроконтролера в сокеті, або такої сигнатури немає в базі даних fuse-доктора.
Зелений блимає – сигнатура гаразд, але біти ф'юзів у неправильному стані. Причина - встановлені біти захисту, потрібний дозвіл на повне очищення відновлюваного AVR (Необхідно перевести перемикач ERASE з OFF на ON).
Червоний блимає – сигнатура прочитана, немає блокування бітами захисту, але з незрозумілої причини не можна записати нове значення для біт ф'юзів.
Якщо блимає зелений світлодіод – сигнатура вірна, конфігурація Fuse-бітів не вірна. Lock-біти встановлені, потрібна операція стирання Flash-пам'яті; тоді Стирання встановлюємо у положення ON, і натискаємо кнопку Start. При виконанні цієї операції весь вміст мікроконтролера буде знищено.
USB-UART
Також можна переглянути, що там відбувається з МК за допомогою будь-якого терміналу, завдяки вбудованому USB-UART. AFD v 2.11 має ручний режим при роботі з ПК, всі інші тільки автоматичний, остання версія v 2.14.
Перемикач "Авто" переключає порт PD0 (RXD) ATmega8 до виводу TX мікросхеми СР2102, або підключає його на мінус живлення. У режимі "auto" ви не зможете по TTL керувати роботою "AFD", тільки дивитися результат на екрані терміналу. При підключенні до ПК є можливість відновлювіти МК з нечитабельною сигнатурою і міняти ф'юзи та локбіти в ручному режимі, тільки для версії 2.11, всі вищі тільки перегляд.
Список типів мікроконтролерів AVR
1kB:
AT90s1200, Attiny11, Attiny12, Attiny13/A, Attiny15
2kB:
Attiny2313/A, Attiny24/A, Attiny26, Attiny261/A, Attiny28, AT90s2333, Attiny22, Attiny25, AT90s2313, AT90s2323, AT90s2343
4kB:
Atmega48/A, Atmega48P/PA, Attiny461/A, Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45
8kB:
Atmega8515, Atmega8535, Atmega8/A, Atmega88/A, Atmega88P/PA, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, Attiny84, Attiny85, Attiny861/A, Attiny87, Attiny88, AT90s8515, AT90s8535
16kB:
Atmega16/A, Atmega16U2, Atmega16U4, Atmega16M1, Atmega161, Atmega162, Atmega163, Atmega164A, Atmega164P/PA, Atmega165A/P/PA, Atmega168/A, Atmega168P/PA, Atmega169A/PA, Attiny167, AT90pwm216, AT90pwm316, AT90usb162
32kB:
Atmega32/A, Atmega32C1, Atmega323/A, Atmega32U2, Atmega32U4, Atmega32U6, Atmega32M1, Atmega324A, Atmega324P, Atmega324PA, Atmega325, Atmega3250, Atmega325A/PA, Atmega3250A/PA, Atmega328, Atmega328P, Atmega329, Atmega3290, Atmega329A/PA, Atmega3290A/PA, AT90can32
64kB:
Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A/P, Atmega6490A/P, Atmega640, Atmega644/A, Atmega644P/PA, Atmega645, Atmega645A/P, Atmega6450, Atmega6450A/P, AT90usb646, AT90usb647, AT90can64
128kB:
Atmega103, Atmega128/A, Atmega1280, Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128
256kB:
Atmega2560, Atmega2561