Програмування мікроконтролерів avr

AVR-мікроконтролери надають користувачеві кілька різних інтерфейсів для програмування. Це послідовне програмування при високій напрузі, послідовне програмування при низькій напрузі через SPI, паралельне програмування при високій напрузі і програмування по інтерфейсу JTAG. Перший тип програмування зустрічається тільки в моделях AVR сімейства ATtiny, останній - доступний деяким моделям старшого сімейства. Моделі ATmega з найбільш розвиненою периферією можуть підтримувати до трьох різних інтерфейсів програмування.

Переважна більшість AVR-мікроконтролерів мають також здатністю самопрограмування, завдяки чому вміст пам'яті програм можна модифікувати безпосередньо з призначеної для користувача програми. Крім цього FLASH-пам'ять може бути перепрограмовано в режимі налагодження через однопровідною інтерфейс dW, наявний в ряді моделей ATmega і у всіх нових моделях ATtiny.

Програмування при високій напрузі (паралельне і послідовне) вимагає значного числа висновків мікроконтролера і додаткового джерела напруги 12 В. З цієї причини конструкція программаторов досить складна. При високовольтному програмуванні досягається максимальна швидкість запису і надається максимальний доступ до ресурсів AVR. Найчастіше цей вид програмування застосовується при великосерійному заводському виробництві.

Інтерфейс JTAG дуже зручно використовувати в тих випадках, коли необхідно вести програмування і налагодження в одному циклі розробки. На жаль JTAG є далеко не у всіх моделях AVR, а фірмові програматори стоять значних грошей.

Особливості послідовного низьковольтного програмування

Для взаємодії програматора з мікро контролером при послідовному низьковольтному програмуванні використовується апаратний модуль SPI. Це дуже практичне рішення, що дозволяє використовувати мінімальне число висновків і змінювати алгоритми роботи пристрою попередньо запаяного на плату. З причини останньої причини програмування через SPI називають також ще внутрісхемним програмуванням або ISP (In System Programming).

Внутрішньосхемне програмування потребує задіяти у мікроконтролера в цілому 5 висновків. Це 3 лінії модуля SPI (MISO, MOSI, SCK), висновок RESET і загальний провід GND. У моделях сімейства ATmega, що мають на борту 64 і більше кбайт FLASH-пам'яті, замість MISO, MOSI використовуються висновки PDO і PDI, відповідно. У разі якщо програматор і мікроконтролер отримують живлення від одного джерела, то додатково знадобиться також висновок VCC, що з'єднує шини харчування. Переклад мікроконтролера в режим програмування здійснюється подачею низького логічного рівня на лінію RESET. Довжина шлейфу, що з'єднує програматор з пристроєм, не повинна перевищувати 15 ... 20 см.

Програмування мікроконтролерів avr

Рис.1 Схема підключення програматора при
внутрішньосхемне програмування одного мікроконтролера

На мал.1а показана схема з'єднання програматора з AVR-мікроконтролерів, при програмуванні через ISP. Для більш надійної роботи послідовно лініях MISO, MOSI, SCK рекомендується включати опору невеликого номіналу. Напруга живлення програматора і пристрої не повинно мати великих відмінностей. Внутрішньосхемне програмування двох і більше мікроконтролерів також можливо (рис.1б). В цьому випадку необхідно пам'ятати про одну важливу умову: в момент програмування на шині повинен знаходитися тільки один активний мікроконтролер. Тому при проектуванні плати заздалегідь потрібно передбачити перемикачі (джампера J1, J2 на рис.1б), за допомогою яких можна вибірково подавати напругу на кожен програмований мікроконтролер. Після програмування модуль SPI або лінії введення-виведення, що збігаються з MISO, MOSI і SCK, можуть бути використані за своїм прямим призначенням.

При внутрішньосхемне програмування для читання і запису доступні FLASH-пам'ять програм, EEPROM-пам'ять даних, біти захисту і керуючі FUSE-біти. Крім цього можуть бути лічені калібрувальні комірки та комірки ідентифікатора.

Програмування мікроконтролерів avr

Рис.1 Схема підключення програматора при
внутрішньосхемне програмування 2-х і більше мікроконтролерів

Зміни деяких FUSE-бітів необхідно проводити з великою обережністю. Особливо якщо демонтувати мікроконтролер вже не представляється можливим. Головним чином це стосується бітів RSTDISBL і DWEN (якщо такі є). Скидання будь-якого з них в подальшому унеможливить використання лінії RESET мікроконтролера. При RSTDISBL = 0 висновок RESET налаштовується як лінія порту введення-виведення, а при DWEN = 0 - вхід RESET служить однопровідним налагоджувальний інтерфейсом dW. Природно, що в обох випадках робота програматора з мікро контролером буде заблокована. Крім того під час внутрисхемного програмування мікроконтролери AVR повинні працювати від власного джерела тактової частоти, вибір якого здійснюється битами CKSEL3: CKSEL0. Якщо їх настройка проведена некоректно (наприклад, замість внутрішнього RC-генератора, обраний зовнішній кварцовий резонатор), то пристрій може взагалі відмовитися працювати. Ще один FUSE-біт, про який слід пам'ятати, - це SPIEN. SPIEN недоступний під час послідовного низьковольтного програмування. Однак його установка при програмуванні в будь-якому іншому режимі заборонить роботу модуля SPI. Нагадаємо, що активізованим FUSE-бітів відповідає стан лог.0.

Все що надходять у продаж мікроконтролери AVR спочатку оптимізовані для внутрисхемного програмування. Біти DWEN, RSTDISBL, SPIEN мають стан 1, 1 і 0 відповідно, а CKSEL3: CKSEL0 встановлені таким чином, що в якості джерела тактової частоти запускається внутрішній RC-генератор (як правило, на частоті 1 МГц), що не вимагає ніяких додаткових деталей .