Программирование микроконтроллеров AVR может производится несколькими способами:
Каждой модели микроконтроллеров характерны свои варианты программирования. Так, например, микроконтроллеры семейства ATiny программируются исключительно первым способом, а более поздние модели семейства ATmega поддерживают одновременно до трёх типов программирования.
У микроконтроллеров AVR также встречается возможность само программирования, что делает возможным программирование из пользовательской программы. Более поздние модели семейства ATiny позволяют производить модифицирование Flash-памяти с использованием режима отладки и одно контактного провода dW, что полезно при массовом производстве.
Также при массовом производстве часто используется высоковольтное программирование – и последовательное, и параллельное. При таком программировании задействуется большое количество выводов микроконтроллера и дополнительный источник питания. Это в свою очередь осложняет схему программатора, что делает эти способы невыгодными для «точечных» нужд.
Интерфейс JTAG удобен при отладке, поскольку он позволяет производить проверку отдельных запрограммированных циклов. Увы, используется он редко из-за высокой стоимости фирменных программаторов и узкой совместимости с устройствами (проще говоря, не все семейства микроконтроллеров его поддерживают).
Самым распространённым способом принято считать низковольтное программирование с использованием SPI. Он получил своё распространение благодаря широте использования (всего пара моделей ATtiny11x и ATtiny28x не поддерживают его) и простоте использования программаторов. Стоит отметить, что в качестве пользовательского приложения для такого программирования AVR микроконтроллеров используется полюбившаяся многим PonyProg. Второй программатор более совершённый и используется там, где важна точность программирования, и базируется на известной AVR ISP, выпущенной фирмой ATMEL, интегрируется с IDE AVR Studio.
При низковольтном программировании обычно используется интерфейс SPI, что в свою очередь тоже создаёт ряд требований: - Задействуются 5 выводов контроллера: линия вывода SPI (MISO, MOSI, SCK), RESET и GND;
Рассмотрим внутрисхемное программирование AVR микроконтроллера в количестве одной штуки.
По схеме видно, что при программировании к выводам MISO, MOSI и SCK подключаются дополнительные сопротивления малого номинала. Также важно, чтобы напряжения микроконтроллера и программатора имели максимально приближённые значения. Возможно производить и программирование нескольких микроконтроллеров, что может быть полезным, когда они уже запаяны в плату. В таком случае необходимо учесть следующее: одновременно может быть только один активный микроконтроллер. Поэтому следует заранее побеспокоится о наличии переключателя, отвечающего за активацию разных микроконтроллеров, что изображено на схеме в виде обозначений J1 и J2:
Важно! Следует помнить, что изменение значений в таких битах, как RSTDISBL и DWEN приводит к блокировке микроконтроллера. Первый бит отвечает за состояние линии RESET, превращая её в линию порта ввода-вывода. Также существуют 2 бита CKSEL3:CKSEL0, которые отвечают за выбор собственного источника тактовой частоты.
Микроконтроллеры AVR, в процессе программирования, должны работать от собственного генератора и если случайно сбить настройки этих трёх битов, то микроконтроллер потеряет всю работоспособность. Есть еще один критичный бит SPIEN, который отвечает за доступность SPI-линии. Если поменять его настройку, возможность произвести программирование AVR микроконтроллера, используя описанные 2 способа станет невозможно. К, счастью, создатели чипов выставляет по умолчанию корректные значения, поэтому их можно просто не трогать.