Біти блокування пам’яті (Lock Bits)

Історично склалося так, що навіть самі перші моделі мікроконтролерів мали програмовані осередку захисту інформації. Мікроконтролери AVR так само мають такий захист. Це спеціальні комірки, побудовані за принципом Flash-пам’яті (Тобто, незалежній пам’яті з електричним стиранням інформації). Кожен мікроконтролер має як мінімум дві захисні осередку LB1 і LB2. Запис і читання цих осередків можлива тільки в режимі програмування. При записі нуля в LB1 блокується запис даних під Flash і EEPROM пам’ять. Одночасно блокується можливість змінювати конфігураційні осередки. Якщо записати нуль ще й у LB2, То блокується і можливість читання всіх даних. Після цього прочитати вміст вашої програми стає неможливим. Для повторного використання мікроконтролера потрібно виконати команду «Стирання мікросхеми ». При цьому вся інформація, записана в мікросхему втрачається, зате здатність читання і модифікації відновлюємо. У мікроконтролерах сімейства Mega є додаткові осередки захисту BLB02, BLB01, BLB12, BLB11. Вони служать для обмеження доступу до різних областей пам’яті програм. Детальніше про це дивіться в описі конкретної мікросхеми.

Крім осередків захисту пам’яті мікросхеми мають, так звані, конфігураційні осередки. Справа в тому, що всі контролери AVR мають безліч режимів роботи. Деякі з режимів неможливо переключити програмним шляхом, використовуючи внутрішні регістри управління. Наприклад, в деяких моделях мікроконтролерів синхронізація може здійснюватися як від внутрішнього генератора з зовнішнім резонатором, так і від автономного внутрішнього генератора, що не потребує зовнішніх кіл. У таких мікросхемах два звільнилися контакту, використовувані зазвичай для підключення зовнішнього кварцового (керамічного) резонатора можна використовувати як додаткові лінії порту введення / виводу. Крім того, майже всі мікросхеми AVR не вимагають обов’язкової наявності зовнішнього сигналу скидання. Тому і цей, третій контакт так само можна перемкнути в режим, коли він буде виконувати роль додаткової лінії порту введення / виводу. Природно, що вибір цих режимів повинен проводитися ще до підключення мікросхеми до схеми налагоджуваного пристрою. Для перемикання режимів фірма Atmel ввела в свої мікроконтролери новий настроювальний елемент: програмовані перемикачі режимів. Ці перемикачі виконані у вигляді спеціальних осередків, які, в сукупності з осередками захисту, є ще одним видом перепрограммируемой незалежній пам’яті. Всі конфігураційні осередку об’єднуються в байти. Різні мікросхеми AVR мають від одного до трьох байтів конфігураційних осередків. Кожен конфігураційний перемикач призначений для того, що б змінювати який або один параметр або режим роботи мікроконтролера. У документації кожен такий перемикач має своє певне ім’я. Деякі біти конфігураційних осередків об’єднані в групи. Наприклад, група з чотирьох бітів CKSEL 3…0 дозволяє вибирати режими синхронізації. Різні моделі мікроконтролерів мають різні набори конфігураційних осередків. За термінологією фірми Atmel конфігураційні осередку називаються Fuse Bits. Тому для зручності і стислості ці осередки часто називають «фьюз», або Fuse-осередками.

Запис і читання осередків захисту і конфігураційних осередків можлива тільки за допомогою програматора в режимі програмування. Всі незапрограмовані fuse-комірки та комірки захисту містять одиницю. При програмуванні в осередок записується нуль. Деякі осередки програмуються ще на заводі (Заводська передустановка). Стан усіх конфігураційних осередків для кожної конкретної мікросхеми дивіться у документації на цю мікросхему.

Ще одна група осередків – це осередки ідентифікації. Будь мікроконтролер має три осередки ідентифікації. Ці осередки доступні тільки для читання і містять інформацію про виробника та моделі мікроконтролера.

Кварцовий генератор

XTAL1 і XTAL2 – Вхід і вихід, відповідно, інвертується підсилювача, який може бути налаштований для використання в якості вбудованого генератора. Для завдання частоти може використовуватися або кварцовий або керамічний резонатор. Конфігураційний біт CKOPT вибирає один з двох режимів підсилювача генератора. Якщо CKOPT запрограмований, то амплітуда коливань вихідного сигналу генератора буде обмежена рівнями харчування. Цей режим рекомендується використовувати при високому рівні навколишніх шумів або при використанні виходу XTAL2 в якості джерела синхронізації зовнішньої схеми. Даний режим характеризується широким частотним діапазоном. Якщо CKOPT – Незапрограммирован, то амплітуда вихідних коливань генератора знижується. Використання даного режиму дозволяє істотно знизити споживану потужність, але при цьому обмежений частотний діапазон і не можна XTAL2 використовувати для зовнішньої синхронізації.

При використанні резонаторів максимальна частота дорівнює 8 МГц, якщо CKOPT – Незапрограммирован, і 16 МГц, якщо CKOPT– Запрограмований. C1 і C2 мають бути завжди рівні незалежно від використання кварцового або керамічного резонатора. Оптимальне значення ємностей конденсаторів залежить від використовуваного кварцового або керамічного резонатора, від значення паразитної ємності і від навколишнього рівня електромагнітного шуму. Рекомендації щодо вибору номіналів конденсаторів наведені в таблиці 8. Для керамічних резонаторів необхідно використовувати конденсатори з номіналом, рекомендованим виробником.

RSTDISBL

RSTDISBL – Fuse біт, що відключає сигнал зовнішнього скидання від виведення мікроконтролера і що підключає до нього схему порту введення-виведення. Цей біт є тільки в тих МК, у яких висновок апаратного скидання RESET суміщений з одинм з портів введення-виведення. Помилкова установка цього fuse біта може відключити RESET і ви не зможете більше прошивати по ISP. Не встановлюйте цей біт, якщо мають намір продовжувати працювати з МК за допомогою послідовних программаторов. «Оживити» МК з встановленим RSTDISBL можна тільки паралельним програматором і не для всіх МК.

Режими синхронізації і затримки запуску

CKSEL (Select Clock source)

FUSE перемикачі CKSEL – В основному визначають режими роботи тактового генератора. Тактовий генератор виробляє імпульси для синхронізації роботи всіх вузлів мікроконтролера. Внутрішній тактовий генератор AVR може запускатися від декількох джерел опорної частоти (зовнішній генератор, зовнішній кварцовий резонатор, внутрішня чи зовнішня RC-ланцюжок). Мінімальна допустима частота нічим не обмежена (аж до покрокового режиму). Максимальна робоча частота визначається конкретним типом мікроконтролера і вказується Atmel в його характеристиках, хоча практично будь AVR-мікроконтроллер з заявленої робочою частотою, наприклад, в 10 МГц при кімнатній температурі легко може бути «розігнаний» до 12 МГц і вище.

Якщо вам не важлива точність витримки тактової частоти, якщо для вашого пристрою не критично, якщо тактова частота буде «плавати» в невеликих межах, то вибирайте режим в якому як частотозадающей ланцюга використовується внутрішня або зовнішня RC ланцюжок. Це дешевше кварцу. Особливо, якщо використовувати внутрішню RC ланцюг. Зовнішня ланцюжок використовується якщо в режимах роботи відсутня необхідна вам тактова частота.

Кварцовий генератор – це саме хороше рішення, якщо потрібна максимальна точність і стабільність тактової частоти. Зовнішній тактовий генератор – це окрема схема зазвичай на цифрових елементах низького ступеня інтеграції. використовується в спеціальних випадках. Наприклад, якщо потрібно програмно міняти тактову частоту.

SUT (Select start-up time)

Основне призначення перемикачів SUT – Визначення затримки після старту. Якщо ваш блок живлення забезпечує якісне харчування, то затримку можна вибрати найменшу. Якісне харчування – це харчування, яке дуже швидко досягає робочих значень після включення. Найчастіше так воно і є. Затримка включення передбачена для тих випадків, коли харчування не якісне. У будь-якому випадку перехідні процеси на виході джерела живлення повинні повністю закінчуватися до моменту закінчення обраної вами затримки включення мікроконтролера.

Захист від стирання EEPROM

EESAVE

FUSE перемикач EESAVE призначений для полегшення процесу налагодження програм. Він впливає на процес стирання пам’яті. Типово біт запрограмований. (Дорівнює 0). І тому коли від програматора на мікроконтролер надходить команда «Стерти кристал», стираються відразу і FLASH пам’ять (пам’ять програм) і EEPROM (Незалежна пам’ять даних). Це зручно у процесі виробництва деяких партій однакових пристроїв на мікроконтролері. Можна відразу стерти всю пам’ять і прошити і програму і дані.

У процесі налагодження ж зазвичай програміст змінює і перепрошивати програму. А дані в EEPROM рідко потрібно міняти. У більшості випадків ці дані взагалі записує сам мікроконтролер в процесі роботи розроблюваної вами програми, а не за допомогою програматора. Однак, перш, ніж записати нову версію програми, пам’ять програм потрібно стерти. Якщо не змінювати значення FUSE перемикача EESAVE, То при стирання програмної пам’яті так само зітреться і EEPROM. У результаті його теж доведеться щоразу заново записувати. Це займає зайвий час і витрачає ресурс пам’яті (кількість циклів запису / стирання обмежена). Тому програміст просто встановлює значення біта EESAVE в одиницю (робить незапрограмованим). Тепер при отриманні команди «Стерти кристал» мікроконтролер стирає тільки FLASH а вміст EEPROM залишає без змін.

Система контролю харчування.

Більшість мікроконтролерів AVR має вбудовану систему контролю харчування. Так званий BOD (Brown-out Detection). Призначення цієї системи – підвищення стабільності і надійності роботи мікропроцесорних систем при зниженні напруги живлення. Ця система здійснює постійне порівняння напруги живлення з якимсь пороговим рівнем. Рівень порогу спрацьовування схеми BOD можна встановлювати за допомогою fuse-перемикачів BODLEVEL. Якщо напруга знизиться нижче порога, система контролю живлення автоматично виробляє внутрішній сигнал скидання, який зупиняє виконання програми. Після того, як напруга живлення підвищиться, сигнал скидання ще діє деякий час (TTOUT) і не дозволяє процесору працювати за програмою. Будь-яке нове зниження напруги нижче порога запускає відлік затримки спочатку. Якщо напруга живлення відновить своє нормальне значення і протягом усього періоду затримки більше не впаде нижче контрольного рівня, сигнал скидання закінчується і мікроконтролер починає виконання програми. Причому програма виконується з самого початку. Тобто, з того місця, з якого вона починає роботу при початковому скиданні. Для того що б мікроконтролер міг врахувати у своїй роботи сам факт збою по напрузі харчування, багато моделей AVR мають спеціальний регістр, в якому зберігається код джерела сигналу скидання.

BODLEVEL

Значення періоду затримки TTOUT фіксоване. Його можна подивитися в документації на конкретний контролер. Поріг спрацьовування системи BOD зазвичай не один. Для перемикання декількох варіантів порогу служать FUSE перемикачі BODLEVEL. Зазвичай це кілька бітів (BODLEVEL1, BODLEVEL2 …). Режим роботи визначається різним поєднанням їх значень.

BODEN

Якщо вам не потрібен контроль напруги, ви можете її вимкнути. У деяких моделях вимикання BOD – Це один з режимів, який визначається фьюз BODLEVEL. В інших же моделях для включення і відключення BOD є спеціальний фьюз, який називається BODEN. Якщо є BODEN і його значення дорівнює нулю (він запрограмований), система працює. Якщо значення BODEN дорівнює одиниці, то BOD відключений, і стан фьюз BODLEVEL нема на що не впливає.

Рекомендації щодо вибору режимів

Якщо після прочитання всього вищесказаного ви так і не вирішили, який же режим вибрати саме вам, тоді сміливо відключайте систему контролю напруги. У процесі опробування, налагодження та доведення програми система BOD тільки може перешкодити і ввести в оману. І тільки якщо саме життя (за результатами експлуатації або на прохання замовника) зажадає від вас включення такого захисту, починайте експериментувати.

Гістерезис

Як вже було сказано вище, в систему BOD закладено кілька варіантів рівня спрацьовування. Потрібний вам рівень ви вибираєте за допомогою фьюз BODLEVEL. Однак, якби система спрацьовувала з цього одного рівня, це могло б призвести до багаторазового перезапуску програми у разі, якщо напруга живлення «гуляє» поблизу порогу спрацьовування. Тому в системі захисту введений гістерезис. І існує такий параметр, як величина гістерезису. У документації фірми Atmel ця величина називається VHYST. Для отримання ефекту гістерезису в системі BOD вводиться два порога спрацьовування. Поріг включення і поріг вимкнення. Різниця між цими порогами якраз дорівнює VHYST. Якщо вибране вами порогове напруга дорівнює VBOT, то поріг включення і поріг виключення відповідно будуть рівні:

VBOT+ = VBOT + VHYST/2
VBOT- = VBOT — VHYST/2

Система BOD спрацьовує в момент, коли напруга живлення впаде нижче VBOT- . У цей момент виробляється сигнал внутрішнього скидання і виконання програм призупиняється. Коли напруга живлення підвищиться і стане вище порогу VBOT+ , Починається відлік спеціального таймера. По закінченні цієї витримки (tTOUT) внутрішній скидання закінчується і процесор відновлює виконання програми. На малюнку нижче показаний весь процес роботи BOD.

Секція завантажувача.

FUSE перемикачі BOOTSZ, BOOTRST і SELFPRGEN

Ці два види FUSE перемикачів призначені для вибору режимів роботи так званої секції завантажувача. Секція завантажувача з’явилася після того, як у мікроконтролери була введена функція самопрограмування. Самопрограмування – Це можливість мікроконтролера самому «перешивати» свою власну програму. Це дуже зручно в тих системах, в які самі, без участі сервісних служб та спеціальних программаторов можуть самі оновлювати свою програму, отримуючи її автоматично із зовнішніх каналів. Наприклад, сучасні мобільні телефони можуть отримувати і автоматично встановлювати нові версії прошивок прямо через телефонного оператора або за USB або через Блютуз (Bluetooth) з інтернету. Використовуючи сучасні процесори ви самі можете створити подібну систему.

SELFPRGEN

У деяких моделях мікроконтролерів для включення режиму самопрограмування використовується FUSE перемикач SELFPRGEN.

У процесі самопрограмування можливий наступний конфлікт: Якщо програма сама себе переписує, то в процесі роботи вона повинна буде стерти саму себе! Адже процес запису FLASH пам’яті завжди починається зі стирання. Технологія багаторазового переться ПЗУ така, що прати потрібно відразу всі комірки. Саме з цього пам’ять доводиться ділити на дві частини: область основної програми і область завантажувача. Основна програма розташовується у своїй галузі. Вона виконує всі основні функції. Коли ж настає необхідність перезаписати основну програму, вона передає управління в область завантажувача. Програма, завантажена в цю область автоматично стирає область основної програми, отримує будь-яким із способів (через один з послідовних каналів або через будь-який з портів) побайтно коди нової версії і прошиває це все на місце старої.

BOOTSZ

Багато моделей мікроконтролерів AVR мають можливість вибирати розмір області завантажувача з декількох варіантів. Цим забезпечується певна гнучкість для розробника. Розмір області завантаження визначається за допомогою групи фьюз BOOTSZ (BOOTSZ1, BOOTSZ2…).

BOOTRST

У деяких випадках потрібно що б після скидання мікроконтролер починав виконання програми не з нульового адреси, як це встановлено за умовчанням, а з початку області завантажувача. Для того, що б включити даний режим використовується фьюз BOOTRST. Якщо цей біт прошити (зробити рівним нулю) то вектор початкового скидання зміниться і після скидання контролер почне виконання програми з початку області завантаження.

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

Сторожовий таймер.

Сторожовий таймер (по англійськи WatchDog – Сторожова собака) дозволяє підвищити стійкість мікроконтролера проти збоїв і зависань програми. Ця ідея не нова. Коли то подібні пристрої збирали у вигляді зовнішньої схеми і підключали до мікроконтролера. Мікроконтролери AVR мають у своєму складі вбудований сторожовий таймер. Коли таймер увімкнено, він постійно відраховує спеціальну затримку перезапуску. Ваша програма повинна бути періодично скидати таймер. Для цього в системі команд мікроконтролера є спеціальна команда. Ви просто включаєте в основний цикл цю команду з таким розрахунком, що б вона скидала сторожовий таймер якомога частіше, що б таймер НЕ встиг дорахувати до кінця. Якщо ж програма по якійсь причині зависне, вона перестане скидати сторожовий таймер, він дорахував до кінця свою затримку. По закінченні затримки таймер виробляє сигнал скидання. У результаті робота програми поновлюється, причому з самого початку.

WDTON

За умовчанням цей таймер вимкнено. Для включення сторожового таймера служить FUSE перемикач WDTON. Так само, як і у випадку схеми контролю напруги живлення, не рекомендую включати сторожовий таймер, якщо ваша програма ще випробувана і не до кінця налагоджена. Включайте його тільки коли він дійсно необхідний. Наприклад, якщо ваш пристрій часто зависає із за перешкод або з інших причин.

Інтерфейс JTAG

JTAG (Вимовляється «джей-таг»; скорочення від англ. Joint Test Action Group) – спеціалізований апаратний інтерфейс, розроблений для тестування зібраних друкованих плат. Через широкої функціональності JTAG став використовуватися для налагодження та програмування. На даний момент JTAG-інтерфейс застосовується при периферійному скануванні (тестування друкованих плат з встановленими на них процесорами на наявність в ланцюгах коротких замикань, непропаек, западання на 0 або 1). Управління JTAG-інтерфейсом описується в т. н. BSDL-файлі, який надається розробником кожної конкретної мікросхеми. У більшості випадків ці файли знаходяться на сайті виробника мікросхеми.

Порт тестування (TAP — Test Access Port) Являє собою чотири або п’ять виділених висновків мікросхеми: ТСК, TMS, TDI, TDO. Іноді ще TRST.

Функціональне призначення цих ліній:

TDI (Test data input – вхід тестових даних) – вхід послідовних даних периферійного сканування. Команди і дані вводяться в мікросхему з цього висновку по передньому фронту сигналу TCK;

TDO (Test data output – вихід тестових даних) – вихід послідовних даних. Команди і дані виводяться з мікросхеми з цього висновку по задньому фронту сигналу TCK;

TCK (Test clock – тестове тактирование) – тактирует роботу вбудованого автомата управління периферійним скануванням. Максимальна частота сканування периферійних осередків залежить від використовуваної апаратної частини і на даний момент обмежена 25 … 40 МГц [джерело?];

TMS (Test mode select – вибір режиму тестування) – забезпечує перехід схеми в (з) режим (а) тестування і перемикання між різними режимами тестування.
У деяких випадках до перерахованих сигналам додається сигнал TRST для ініціалізації порту тестування, що необов’язково, оскільки ініціалізація можлива шляхом подачі певної послідовності сигналів на вхід TMS.

Робота засобів забезпечення інтерфейсу JTAG підкоряється сигналам автомата управління, вбудованого в мікросхему. Стану автомата визначаються сигналами TDI і TMS порту тестування. Певне поєднання сигналів TMS і TCK забезпечує введення команди для автомата і її виконання

Якщо на платі встановлено кілька пристроїв, що підтримують JTAG, Вони можуть бути об’єднані в загальну ланцюжок. Унікальною особливістю JTAG є можливість програмування не тільки самого мікроконтролера (або ПЛІС), а й підключеної до його висновків мікросхеми флеш-пам’яті. Причому існує два способи програмування флеш-пам’яті з використанням JTAG: Через завантажувач з подальшим обміном даними через пам’ять процесора, або через пряме управління висновками мікросхеми.

JTAGEN

Для включення інтерфейсу JTAG використовується FUSE перемикач JTAGEN. Запрограмований біт JTAGEN включає канал, незапрограмований відключає. Типово канал включений. Але це не означає, що використовувані під цей канал висновки мікроконтролера не можна використовувати за їх основним призначенням. Канал активізується в потрібний момент програмно.

Рекомендації щодо застосування

Використовуйте цей інтерфейс в тому випадку, якщо вам ставиться таке завдання. Можливо вам замовили якийсь пристрій, яке має керувати ніж те саме по цьому інтерфейсу. Можливо так само, що ваш програматор працює по інтерфейсу JTAG. Є такі програматори. Але переважніше застосовувати стандартний програматор, що працює по рідному для фірми Atmel каналу SPI.

Внутрісхемних налагодження через JTAG

Ще одне застосування JTAG інтерфейсу – Це внутрісхемних налагодження (на ряду з рідним для Atmel внутрісхемних отладчиком debugWire). У режимі налагодження через JTAG адаптер мікроконтроллер підключається безпосередньо до середовища программірванія і налагодження, наприклад до AVR Studio. Після чого мікроконтролер повністю підпорядковується AVR Studio і повністю працює під її управлінням. Стає доступним покрокове виконання коду, перегляд і зміна всіх регістрів, робота з усією периферією і все це в реальному мікроконтролері, а не в його програмної емуляції. Можна ставити точки зупину (breakpoints) на різні події. На жаль в AVR мікроконтролерах JTAG доступний далеко не скрізь, як правило контролери з числом ніг менше 40 та об’ємом пам’яті менше 16КБ інтерфейсу JTAG не мають. Там, правда, часто є debugWire.

Внутрісхемний відладчик debugWIRE

Вбудована система налагодження debugWIRE використовує двонаправлений Однопровідна інтерфейс для того, щоб керувати процесом виконання програми, виконувати окремі команди центрального процесора і програмувати всі види енергонезалежною пам’яті.

DWEN

Якщо FUSE-перемикач дозволу роботи системи debug WIRE (DWEN) запрограмований (тобто дорівнює нулю), а біти блокування мікросхеми LB1 і LB2 не запрограмовані, включається система налагодження debugWIRE.

Висновок RESET в цьому режимі являє собою двосторонню відкриту шину вводу-виводу (з відкритим стоком) з підключеним внутрішнім резистором навантаження. Ця шина стає шлюзом для обміну інформації між відладжуваної мікросхемою і схемою сполучення з комп’ютером (емулятором). За допомогою цього інтерфейсу робота мікросхеми береться під контроль отладочной сліди, наприклад AVR Studio. Середа автоматично запускає програму на виконання, у момент зупинки програми отримує значення всіх його регістрів. Система підтримує автоматичну простановку точок зупину.

OCDEN

У деяких моделях AVR система налагодження включається за допомогою FUSE перемикача OCDEN. Це загальний перемикач, що включає режим налагодження як по debugWIRE, Так і по JTAG.

Точки зупинки програми

Режим debugWIRE підтримує програмні точки зупину, які формуються за допомогою спеціальної команди BREAK, Що входить в систему команд AVR. При створенні точки зупину в середовищі програмування AVR Studio в програмний код, призначеної для налагодження програми автоматично в потрібному місці вписується команда BREAK. Потім змінена програма, що містить в потрібних місцях команди BREAK, Поміщається в програмну пам’ять мікроконтролера (перепрошивати). При цьому команда, замінна на BREAK, Зберігається в пам’яті компьютера.Контроллер починає виконувати програму і призупиняється в тому місці, де стоїть BREAK. За командою BREAK мікроконтролер зупиняється і посилає в AVR Studio сигнал підтвердження останова.Получів цю команду AVR Studio зчитує значення всіх регістрів і відображає з в звичному нам вигляді.

Коли ви запускаєте перервану програму на подальше виконання, спочатку виконується збережена команда (інтерфейс debugWIRE дає таку можливість), а потім вже триває виконання команд з програмної пам’яті мікроконтролера. Ви можете також створити точки зупину вручну, поміщаючи команду BREAK в будь-якому місці вашої програми.

Особливістю даної технології є те, що пам’ять програм повинна перепрограмуватися щоразу, коли змінюється розміщення точок зупину. Середа AVR Studio робить це автоматично за допомогою debugWIRE-інтерфейсу. Використання програмних точок зупину зменшує можливу кількість циклів запису / стирання для програмної пам’яті мікроконтролера. Тому при налагодженні програм подібним способом потрібно постійно стежити, щоб відладчик не витрачену всі ресурси вашої мікросхеми.

Обмеження режиму debugWIRE

Висновок мікросхеми, що забезпечує режим debugWIRE (dW), Фізично об’єднаний з входом зовнішнього скидання (RESET). Тому при використанні режиму debugWIRE неможлива якщо вам необхідний зовнішній скидання.

Система debugWIRE дозволяє програмі в процесі налагодження точно виконувати всі функції введення-виведення і дотримуватися всі тимчасові співвідношення. Тобто швидкість виконання програми в режимі налагодження не відрізняється від швидкості в реальному режимі роботи. Але в той момент, коли центральний процесор зупинений, необхідно дотримуватися обережності при поводженні через відладчик (AVR Studio) до різних регістрів введення-виведення, щоб не порушити роботу системи. Детальний опис всіх правил роботи з регістрами в режимі debugWIRE можна знайти в спеціальній документації по цьому режиму. Її можна знайти на сайті фірми Atmel.

Якщо fuse-перемикач DWEN запрограмований (режим debugWIRE включений), то деякі тактові сигнали мікроконтролера не відключати навіть у сплячих режимах, що збільшує споживану потужність. Тому, коли режим debugWire вам більше не потрібен, не забувайте перевести в початковий стан FUSE – перемикач DWEN.

Рекомендації щодо застосування

Запевняю вас, що внутрісхемних налагодження як за допомогою debugWIRE, Так і за допомогою JTAG інтерфейсів потрібна тільки професійним розробникам при розробці та доведенні промислових зразків, керуючих складними високотехнологічними системами. Початківці і самодіяльні разработцікі цілком обійдуться отладчиками з програмною емуляцією. Тому цей режим рекомендую не включати. Тому залишайте DWEN (OCDEN) в незапрограмованого стані.

Серед любителів микроконтроллерной техніки існує думка, що при неправильному програмуванні можна мікросхему «вбити». Тобто пошкодити безповоротно. Таке переконання пов’язано з програмуванням деяких конфігураційних (Fuse) перемикачів. А точніше з програмуванням перемикачів CKSEL, Що визначають режими роботи тактового генератора.

Заводська установка обрана таким чином, що нова мікросхема працює в режимі внутрішньої синхронізації. Якщо ви використовуєте послідовне програмування, то вам достатньо лише подати живлення на мікросхему і підключити її до програматора по послідовному каналу. Однак пам’ятайте: за відсутності синхросигналу програмування мікросхеми в послідовному режимі неможливо! Якщо в процесі програмування конфігураційних осередків ви, випадково або навмисно змініть стан осередків CKSEL3…0, Ви перекладете мікросхему в один з режимів, що вимагають або наявності зовнішнього кварцового (пьезо) резонатора, або зовнішньої RC-ланцюжка, або зовнішнього тактового генератора. При цьому, якщо необхідні зовнішні ланцюга відсутні, тактові коливання зірвуться і подальше програмування мікросхеми та зміна стану конфігураційних осередків стане неможливим. Але не хвилюйтеся! Мікросхема не вийшла з ладу. Якщо мікросхема перестала відгукуватися на команди програматора, вам доведеться згадати, яке значення ви записали в перемикачі CKSEL3…0 в останньому сеансі зміни конфігураційних осередків. Зазвичай буває так: Ви забули взагалі встановити їх значення і натиснули кнопку »Write». У цьому випадку всі «пташки» були відсутні і в усі чотири осередки CKSEL3…0 були записані одиниці. Це відповідає зовнішньому кварцовогорезонатора. Підключіть до висновків XTAL0 і XTAL1 кварцовий резонатор і погоджують конденсатори у відповідності з технічною документацією. Після цього керованість мікросхемою відновиться. Якщо ви записали в осередку CKSEL3…0 інші значення, то вам доведеться підключити або зовнішню RC-ланцюжок, Або зовнішній генератор. Залежно від того, в якій режим ви випадково перевели вашу мікросхему.

Другий варіант, коли мікросхема здається «убитої» – програмування призначення виведення «Reset». У деяких мікросхемах, таких, як ATmega8, ATmega325, ATmega645, ATmega329 та деяких інших функція виведення RESET може бути змінена. Для зміни функції виведення Reset використовується Fuse-перемикач RSTDISBL. Якщо запрограмувати цей біт (зробити рівним нулю) висновок Reset перетворюється на ще одну додаткову лінію порту введення / виводу. Але одночасно мікросхема втрачає здатність послідовного програмування. Це пов’язано з тим, що в режимі послідовного програмування активно приймає участь сигнал Reset (Низький рівень на цьому вході не тільки призводить до системного скиданню, але і переводить мікросхему в режим програмування). Коли ж висновок стає входом порту, то такий режим неможливий, бо інакше від зовнішнього нульового сигналу мікросхема постійно буде переходити в режим програмування. У такому випадку мікросхему можна запрограмувати лише в паралельному режимі. Якщо ваш програматор працює тільки в послідовному режимі, то випадково прошив Fuse-перемикач RSTDISBL ви втратите зв’язок з мікросхемою і після цього таку мікросхему повернути до нормального режиму можна тільки за допомогою програматора працюючого в паралельному режимі. До речі, якщо програматор має панельку, куди ви повинні вставити мікросхему для програмування, то це ще не означає, що він працює в паралельному режимі. Підтримувані режими роботи програматора можна дізнатися з його документації.

Джерело: «Самовчитель розробника пристроїв на мікроконтролерах AVR»