Ошибка avrdude: initialization failed, rc=-1 при прошивке ATmega328P почти всегда означает одно: программатор не видит микроконтроллер из-за неправильного подключения шести ISP-линий. Чип прошивается через интерфейс SPI по пинам MOSI, MISO, SCK, RESET, VCC и GND, и перепутанная хотя бы одна линия полностью блокирует запись прошивки.

В этой статье разберём распиновку ATmega328P в корпусах DIP-28 и TQFP-32, покажем, какие выводы используются для внутрисхемного программирования, как подключить программатор USBasp или Arduino в режиме Arduino as ISP, и что проверить, если чип не определяется.

Какие пины ATmega328P нужны для прошивки

Для прошивки через ISP (In-System Programming) задействуются линии интерфейса SPI плюс сигнал сброса и питание. Всего шесть обязательных соединений:

  • 🔌 MOSI — линия данных от программатора к микроконтроллеру (физически это пин PB3);
  • 📡 MISO — линия данных от микроконтроллера к программатору (пин PB4);
  • ⏱️ SCK — тактовый сигнал синхронизации (пин PB5);
  • 🔄 RESET — сброс, удерживается низким уровнем во время программирования (пин PC6);
  • ⚡ VCC и GND — питание чипа, без стабильного питания прошивка невозможна.

Обратите внимание: линия RESET во время прошивки должна быть подтянута к питанию через резистор (типично используют номинал порядка 10 кОм), а программатор в момент записи притягивает её к земле. Если на линии сброса висит конденсатор большой ёмкости или кнопка с замыканием на землю, прошивка может не стартовать.

💡

Для ISP-прошивки ATmega328P достаточно шести линий: MOSI, MISO, SCK, RESET, VCC, GND. Все они есть и в DIP-28, и в TQFP-32 корпусе.