Перейти к содержанию

Распиновка AVR ISP, UPDI и TPI

Стандартные разъёмы программирования AVR по документации Microchip: ISP на 6 и 10 контактов, что делать с выводом VCC, подключение к ATmega328P, разъём и перемычки USBasp, а также UPDI для новых AVR и TPI для ATtiny4–10.

Обновлено Редакция GAW

ISP (In-System Programming) — прошивка AVR прямо на плате через выводы SPI: программатор удерживает RESET в нуле и обменивается с кристаллом по линиям MOSI, MISO и SCK. Для этого у Atmel, а теперь у Microchip, есть два стандартных разъёма — на 6 и на 10 контактов с шагом 2,54 мм. Новые AVR прошивают уже не по ISP, а по однопроводному UPDI, самые маленькие ATtiny — по TPI, и у этих интерфейсов свои шестиконтактные разъёмы.

Коротко

  • ISP, 6 контактов: 1 — MISO, 2 — VCC, 3 — SCK, 4 — MOSI, 5 — RESET, 6 — GND.
  • ISP, 10 контактов: 1 — MOSI, 2 — VCC, 5 — RESET, 7 — SCK, 9 — MISO; 4, 6, 8, 10 — GND; контакт 3 не подключён.
  • VCC у AVRISP mkII и Atmel-ICE — вход: программатор измеряет напряжение платы и не питает её.
  • SCK — ниже четверти тактовой частоты кристалла: для нового ATmega328P на 1 МГц это меньше 250 кГц.
  • UPDI: 1 — UPDI, 2 — VCC, 6 — GND. TPI: 1 — TPIDATA, 2 — VCC, 3 — TPICLK, 5 — RESET, 6 — GND.

Разъёмы ISP на 6 и 10 контактов

Разъём AVR ISP на 6 контактов: 1 MISO, 2 VCC, 3 SCK, 4 MOSI, 5 RESET, 6 GNDКонтакты: 1 — MISO, 2 — VCC, 3 — SCK, 4 — MOSI, 5 — RESET, 6 — GND6 контактов1MISO2VCC3SCK4MOSI5RESET6GNDвид сверху на штыришаг 2,54 мм
Разъём AVR ISP на 10 контактов: 1 MOSI, 2 VCC, 3 не подключён, 5 RESET, 7 SCK, 9 MISO, 4, 6, 8 и 10 GNDКонтакты: 1 — MOSI, 2 — VCC, 3 — NC, 4 — GND, 5 — RESET, 6 — GND, 7 — SCK, 8 — GND, 9 — MISO, 10 — GND10 контактов1MOSI2VCC3NC4GND5RESET6GND7SCK8GND9MISO10GNDвид сверху на штыришаг 2,54 мм
Разъёмы ISP по AN2519 и руководствам AVRISP mkII и Atmel-ICE: вид сверху на штыри вилки на плате, контакт 1 — слева вверху

Нумерация у обоих разъёмов одна: нечётные контакты в одном ряду, чётные — в другом, контакты 1 и 2 — с краю. На плате контакт 1 отмечают треугольником, цифрой или квадратной контактной площадкой, на шлейфе — цветной полосой: у AVRISP mkII красная сторона кабеля и есть контакт 1. Схемы выше нарисованы со стороны штырей; при разводке платы со стороны пайки ряды меняются местами. На Arduino Uno разъём с такой же разводкой подписан ICSP, а рядом стоит второй, ICSP1, — для ATmega16U2, который на плате работает мостом USB–UART.

Сигнал6 конт.10 конт.НаправлениеНазначение
MOSI41программатор → МКданные в кристалл
MISO19МК → программаторданные из кристалла
SCK37программатор → МКтактовый сигнал
RESET55программатор → МКноль на время программирования
VCC22—напряжение платы, см. ниже
GND64, 6, 8, 10—общий провод
NC—3—не подключён

В документации названия немного различаются: VCC в AN2519 называется VTG (target voltage), RESET — RST или /RESET, а в руководстве Atmel-ICE MISO и MOSI подписаны как PDO/MISO и PDI/MOSI — PDO и PDI называются выводы программирования у ATmega128. Сигналы при этом те же. Переходник с 10 на 6 контактов — это шесть проводов по названиям: 1 на 4, 2 на 2, 5 на 5, 7 на 3, 9 на 1 и любой из 4, 6, 8, 10 на 6. Atmel-ICE работает и с уменьшенными разъёмами с шагом 1,27 мм — через плату-переходник, которая есть не во всех комплектах.

Вывод VCC: питание платы или опорное напряжение

Контакт 2 у разных программаторов работает по-разному, и от этого зависит, как подключать плату:

  • AVRISP mkII не подаёт питание на VCC, а только измеряет по нему напряжение платы, поэтому плату питают от своего источника. От этого же напряжения работают преобразователи уровней программатора: без провода VCC сигналы на линиях ISP неправильные. Поддерживается 1,8–5,5 В.
  • Atmel-ICE тоже только измеряет напряжение платы и питает им свои преобразователи уровней, потребляя меньше 1 мА. Диапазон — 1,62–5,5 В.
  • STK600 может сам питать плату через VTG. AN2519 предупреждает: в этом случае собственный источник платы должен быть выключен.
  • USBasp по схеме автора работает с уровнями 5 В, а перемычка JP1 подаёт на VCC напряжение USB, 5 В, без защиты от короткого замыкания (подробнее — в разделе об USBasp ниже).

Отсюда правило: VCC подключают всегда, а если программатор питает плату, сначала убедитесь, что все микросхемы на ней выдерживают его напряжение.

Подключение к ATmega328P

У ATmega328P выводы последовательного программирования совпадают с аппаратным SPI порта B (табл. 28-17 даташита): MOSI — PB3, MISO — PB4, SCK — PB5, а сброс — вывод PC6/RESET.

СигналISP 6 конт.ISP 10 конт.Вывод ATmega328PDIP-28TQFP-32
MOSI41PB31715
MISO19PB41816
SCK37PB51917
RESET55PC6/RESET129
VCC22VCC, AVCC7, 204, 6, 18
GND64, 6, 8, 10GND8, 223, 5, 21

Те же выводы ISP у ATmega48, ATmega88, ATmega168 и у предшественника ATmega8 в том же корпусе. Чтобы кристалл ответил программатору:

  • AVCC подключён к питанию, даже если АЦП не нужен: даташит требует, чтобы AVCC отличалось от VCC не больше чем на 0,3 В.
  • Есть тактовый сигнал того источника, который выбран фьюзами CKSEL. С завода это внутренний RC-генератор, но после записи фьюзов «под кварц» без кварца кристалл молчит. Как вернуть такой кристалл, рассказано в статье об ATmega328P.
  • SCK не слишком быстрый. Высокий и низкий уровни SCK должны длиться дольше двух тактов процессора (при тактовой частоте от 12 МГц — трёх), то есть частота SCK — ниже четверти тактовой. Новый кристалл работает на 1 МГц: внутренние 8 МГц с делителем на 8, значит, SCK — меньше 250 кГц.
  • RESET подтянут, но не сильно. По руководству AVRISP mkII подтяжка RESET к питанию не должна быть сильнее 4,7 кОм — иначе, когда программатор опустит RESET в ноль, сработает его защита от короткого замыкания, — а конденсатор на RESET не должен превышать 10 мкФ. AN2519 рекомендует подтяжку 4,7 кОм и больше, а для debugWIRE — не меньше 10 кОм.
  • Другие микросхемы на линиях SPI развязаны. Если к MOSI, MISO или SCK подключены, например, флеш-память или дисплей, AN2519 советует отделить их последовательными резисторами около 330 Ом, чтобы они не мешали программатору.

Распиновка обоих корпусов, фьюзы и команды avrdude для ATmega328P — в статье о кристалле, сравнение семейств и программаторов — в разделе об AVR.

ATmega128: ISP не на выводах MOSI и MISO

Не каждый AVR программируется через выводы своего SPI. У ATmega128 данные ISP идут через PE0 (PDI, вывод 2) и PE1 (PDO, вывод 3), а не через PB2 и PB3; SCK — как обычно, PB1 (вывод 11). MOSI программатора подключают к PDI, MISO — к PDO. Так же устроены 64-выводные ATmega1281 и ATmega2561, а у 100-выводных ATmega1280 и ATmega2560 программирование идёт через PB2 и PB3 (табл. 30-15 их общего даташита). Дополнительная сложность в том, что PE0 и PE1 — это ещё и RXD0 и TXD0 USART0: выход преобразователя UART на линии RXD0 мешает программатору. Схема подключения и рецепты — в статье об ATmega128.

USBasp: распиновка разъёма и перемычки

USBasp — открытый программатор Томаса Фишля на ATmega8 или ATmega88 с программной реализацией USB. Его 10-контактный разъём совпадает со стандартным ISP по сигналам MOSI, VCC, RESET, SCK и MISO, но по схеме автора контакты 4 и 6 соединены не с общим проводом, а с линиями TXD и RXD микроконтроллера программатора — это задел под последовательный канал, который прошивка 2011 года не поддерживает. Общий провод у USBasp — только контакты 8 и 10. С обычной платой, где 4 и 6 соединены с землёй, это совместимо: линия TXD идёт через резистор 1 кОм, а RXD — вход.

Разъём USBasp на 10 контактов: 1 MOSI, 2 VCC, 3 не подключён, 4 TXD, 5 RESET, 6 RXD, 7 SCK, 8 GND, 9 MISO, 10 GNDКонтакты: 1 — MOSI, 2 — VCC, 3 — NC, 4 — TXD, 5 — RESET, 6 — RXD, 7 — SCK, 8 — GND, 9 — MISO, 10 — GNDUSBasp, 10 контактов1MOSI2VCC3NC4TXD5RESET6RXD7SCK8GND9MISO10GNDвид сверху на штыришаг 2,54 мм
Разъём USBasp по схеме автора (версия 2011-05-28), вид сверху на штыри. Серым — контакты, которые в стандартном ISP не используются или заземлены
ПеремычкаЧто делаетКогда нужна
JP1, Supply targetподаёт на контакт 2 разъёма 5 В от USBплата питается от программатора и рассчитана на 5 В; защиты от короткого замыкания нет
JP2, Self programmingсоединяет RESET микроконтроллера программатора с контактом 5 разъёмачтобы обновить прошивку самого USBasp другим программатором
JP3, Slow SCKSCK около 8 кГц вместо 375 кГцтактовая частота цели ниже 1,5 МГц, а прошивка USBasp не умеет задавать частоту по команде

С версии прошивки 2009-02-28 частоту SCK задаёт программа на компьютере — в avrdude ключом -B. Без JP3 и без этого ключа USBasp работает на 375 кГц, а всего в прошивке есть ступени от 500 Гц до 1,5 МГц. Если avrdude сообщает, что не может установить период SCK, и советует обновить прошивку USBasp, в программаторе старая прошивка — тогда остаётся перемычка медленного режима.

Нумерация перемычек менялась даже у автора: на старой схеме с сайта JP1 — медленный SCK, а JP3 — питание цели. На клонах подписи и разводка могут отличаться ещё сильнее, поэтому проверяйте надписи на своей плате. И главное ограничение исходной схемы: она рассчитана только на платы с питанием 5 В, для других напряжений, как сказано в её описании, нужен преобразователь уровней.

Прошивка 2011-05-28 умеет программировать по TPI кристаллы ATtiny4–10. По её исходникам TPIDATA подключается к контакту MOSI, TPICLK — к SCK, сброс — к RESET.

UPDI: однопроводной интерфейс новых AVR

UPDI (Unified Program and Debug Interface) — однопроводной полудуплексный интерфейс на основе UART для программирования и отладки. Им прошивают tinyAVR 0, 1 и 2, megaAVR 0 и серии AVR Dx и Ex; какие кристаллы к ним относятся, показано в разделе об AVR. Рекомендованный Microchip разъём — тот же шестиконтактный корпус: 1 — UPDI, 2 — VCC, 6 — GND, контакты 3–5 не подключены.

Разъём UPDI на 6 контактов: 1 UPDI, 2 VCC, 3, 4 и 5 не подключены, 6 GNDКонтакты: 1 — UPDI, 2 — VCC, 3 — NC, 4 — NC, 5 — NC, 6 — GNDUPDI1UPDI2VCC3NC4NC5NC6GNDвид сверху на штыришаг 2,54 мм
Разъём TPI на 6 контактов: 1 TPIDATA, 2 VCC, 3 TPICLK, 4 не подключён, 5 RESET, 6 GNDКонтакты: 1 — TPIDATA, 2 — VCC, 3 — TPICLK, 4 — NC, 5 — RESET, 6 — GNDTPI1TPIDATA2VCC3TPICLK4NC5RESET6GNDвид сверху на штыришаг 2,54 мм
Разъёмы UPDI и TPI по руководству Atmel-ICE, вид сверху на штыри. Корпус тот же, что у ISP на 6 контактов, сигналы другие

У tinyAVR вывод UPDI совмещён с RESET и линией порта PA0, а его роль задаёт фьюз RSTPINCFG; с завода выбран UPDI. Если перевести вывод в режим RESET или GPIO, включить UPDI снова можно только импульсом 12 В, а Atmel-ICE, например, такого напряжения не выдаёт. У AVR DA и ATmega4809 вывод UPDI отдельный и других функций не имеет. ISP-программатор UPDI-кристалл не прошьёт: это другой протокол.

У XMEGA свой двухпроводной интерфейс PDI на том же шестиконтактном разъёме: 1 — DATA, 2 — VCC, 5 — CLK (это вывод RESET), 6 — GND.

TPI: ATtiny4, ATtiny5, ATtiny9 и ATtiny10

TPI (Tiny Programming Interface) — трёхпроводной интерфейс самых маленьких ATtiny, только для программирования: отладки у этих кристаллов нет.

СигналРазъём TPIATtiny4/5/9/10Вывод SOT-23-6
TPIDATA1PB01
VCC2VCC5
TPICLK3PB13
RESET5PB36
GND6GND2

Энергонезависимую память этих кристаллов можно программировать только при питании 5 В. Детали на плате, не рассчитанные на 5 В, даташит советует защитить, например последовательными резисторами. На линии TPIDATA не должно быть подтяжки к земле — интерфейс работает с внутренней подтяжкой к питанию. Если фьюзом RSTDISBL превратить RESET в линию порта, для TPI понадобится 12 В на этом выводе, а такое напряжение дают немногие программаторы.

Типичные ошибки

  • Разъём повёрнут на 180°. Контакт 1 встаёт на место 6, 2 — на место 5, 3 — на место 4: MISO программатора попадает на общий провод платы, а его RESET — на питание. AVRISP mkII в таком случае мигает оранжевым — так он сообщает о перевёрнутом кабеле или неправильной подтяжке RESET. Ищите метку контакта 1 на плате и цветную полосу на шлейфе.
  • Нет общего провода. Плата питается от своего блока, а GND программатора к ней не подключён — уровни сигналов не с чем сравнивать. Руководство Atmel-ICE требует подключать все контакты GND разъёма.
  • VCC не подключён. AVRISP mkII и Atmel-ICE без него не знают напряжения платы: mkII горит красным, что означает «нет питания цели».
  • 5 В от программатора на 3,3-вольтовую плату. Перемычка JP1 у USBasp подаёт 5 В: сам ATmega328P выдерживает 5,5 В, а радиомодули, датчики и карты памяти на 3,3 В — нет. Даже без перемычки сигналы исходного USBasp имеют уровень 5 В, а на любом выводе ATmega328P, кроме RESET, допускается не больше VCC + 0,5 В.
  • Слишком быстрый SCK. Программатор видит кристалл через раз или не входит в режим программирования — руководство AVRISP mkII в этом случае первым делом советует снизить частоту ISP. Это частая проблема с новыми кристаллами на 1 МГц.
  • Длинные провода. ISP — это SPI, и на длинных проводах фронты SCK искажаются. Делайте шлейф коротким, а если без длинных проводов не обойтись, снижайте частоту SCK. Почему так происходит, объяснено в статье об SPI.
  • Включён debugWIRE. Запрограммированный фьюз DWEN отключает программирование по SPI, даже если SPIEN тоже запрограммирован. Вернуть ISP можно командой отключения debugWIRE из отладочного сеанса, например в Atmel-ICE.
  • Перепутаны разъёмы ISP и JTAG на 10 контактов. Корпус тот же, а разводка другая: у разъёма AVR JTAG на контакте 1 — TCK, на 4 — VTref (AN2519, рис. 4-3). Таблица JTAG для ATmega128 — в статье о нём.

Как устроен сам SPI — режимы, частоты, несколько ведомых на шине — в статье об SPI. Отладочные разъёмы ARM разобраны отдельно: распиновка JTAG и SWD.

Частые вопросы

Какая распиновка у 6-контактного разъёма AVR ISP?

1 — MISO, 2 — VCC, 3 — SCK, 4 — MOSI, 5 — RESET, 6 — GND. Это нумерация Microchip при взгляде на штыри сверху: нечётные контакты в одном ряду, чётные в другом, контакт 1 на плате отмечают треугольником, цифрой или квадратной площадкой, на шлейфе — цветной полосой. На Arduino Uno такой разъём подписан ICSP.

Чем 10-контактный разъём ISP отличается от 6-контактного?

Сигналы те же, расположение другое: 1 — MOSI, 2 — VCC, 3 — не подключён, 5 — RESET, 7 — SCK, 9 — MISO, а 4, 6, 8 и 10 — общий провод. Переходник между разъёмами — шесть проводов по названиям сигналов: 1 на 4, 2 на 2, 5 на 5, 7 на 3, 9 на 1 и любой общий на 6.

Нужно ли подключать VCC программатора к плате?

Да, но этот провод работает по-разному. AVRISP mkII и Atmel-ICE плату не питают: по VCC они измеряют её напряжение и подстраивают уровни сигналов, без этого провода они не работают. USBasp с установленной перемычкой питания, наоборот, подаёт на VCC 5 В от USB. Плату, которую питает программатор, нельзя одновременно включать от собственного источника.

Почему программатор не видит новый ATmega328P?

Чаще всего из-за частоты SCK. С завода кристалл работает от внутреннего RC-генератора 8 МГц с делителем на 8, то есть на 1 МГц, а высокий и низкий уровни SCK должны длиться дольше двух тактов процессора. Значит, SCK должен быть ниже 250 кГц, а USBasp по умолчанию даёт 375 кГц: нужна перемычка медленного режима или ключ -B в avrdude.

Можно ли прошить ATtiny1614 или AVR128DA обычным ISP-программатором?

Нет. Новые AVR — tinyAVR 0, 1 и 2, megaAVR 0, AVR Dx и Ex — программируют по однопроводному UPDI, программирование через MOSI, MISO и SCK у них не предусмотрено. Нужен программатор с UPDI, например Atmel-ICE, PICkit 4 или MPLAB Snap, либо переходник USB–UART по схеме SerialUPDI.

Что делают перемычки на USBasp?

По схеме автора 2011 года JP1 подаёт на контакт VCC разъёма 5 В от USB, чтобы питать плату, JP2 нужна для прошивки самого USBasp другим программатором, а JP3 включает медленный SCK — около 8 кГц вместо 375 кГц — для кристаллов с тактовой частотой ниже 1,5 МГц. На клонах нумерация может быть другой, ориентируйтесь на надписи на плате.

Источники

  1. Microchip. AN2519: AVR Microcontroller Hardware Design Considerations (DS00002519B) — бывшая AVR042: рис. 4-1 — разъёмы ISP на 6 и 10 контактов, рис. 4-3 — JTAG, рис. 4-6–4-8 — PDI, TPI и UPDI; резисторы на общих линиях SPI, подтяжка RESET
  2. Microchip. Atmel-ICE User Guide (DS50002999A) — рис. 4-10, 4-12, 4-13 — разъёмы SPI, UPDI и TPI; VTG питает преобразователи уровней; напряжение цели 1,62–5,5 В; DWEN отключает SPI
  3. Atmel. AVRISP mkII User Guide (Atmel-42093B) — VCC только измеряет напряжение платы; 1,8–5,5 В; подтяжка RESET не сильнее 4,7 кОм, конденсатор не больше 10 мкФ; индикация перевёрнутого кабеля
  4. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — рис. 1-1 — распиновка; разд. 28.8 — выводы и длительность SCK при последовательном программировании; разд. 29.1 — предельные напряжения
  5. Arduino. Arduino Uno Rev3 schematic — разъёмы ICSP (ATmega328P) и ICSP1 (ATmega16U2) с разводкой стандартного ISP на 6 контактов
  6. Atmel. ATmega128/ATmega128L Datasheet (2467X) — табл. 127 — программирование через PE0 (PDI), PE1 (PDO) и PB1
  7. Microchip. ATmega640/1280/1281/2560/2561 Data Sheet (DS40002211A) — табл. 30-15 — выводы последовательного программирования в корпусах на 100 и 64 вывода
  8. Thomas Fischl. USBasp — USB programmer for Atmel AVR controllers — схема, Readme и исходники версии 2011-05-28: разъём на 10 контактов, перемычки, частоты SCK, TPI
  9. Atmel. ATtiny4/5/9/10 Datasheet (Atmel-8127H) — выводы TPI; энергонезависимая память программируется только при 5 В
  10. Microchip. ATtiny1614/1616/1617 Data Sheet (DS40002204A) — вывод PA0/RESET/UPDI и фьюз RSTPINCFG, заводское значение — UPDI