Ошибка 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 корпусе.