Распиновка 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 контактов
Нумерация у обоих разъёмов одна: нечётные контакты в одном ряду, чётные — в другом, контакты 1 и 2 — с краю. На плате контакт 1 отмечают треугольником, цифрой или квадратной контактной площадкой, на шлейфе — цветной полосой: у AVRISP mkII красная сторона кабеля и есть контакт 1. Схемы выше нарисованы со стороны штырей; при разводке платы со стороны пайки ряды меняются местами. На Arduino Uno разъём с такой же разводкой подписан ICSP, а рядом стоит второй, ICSP1, — для ATmega16U2, который на плате работает мостом USB–UART.
| Сигнал | 6 конт. | 10 конт. | Направление | Назначение |
|---|---|---|---|---|
| MOSI | 4 | 1 | программатор → МК | данные в кристалл |
| MISO | 1 | 9 | МК → программатор | данные из кристалла |
| SCK | 3 | 7 | программатор → МК | тактовый сигнал |
| RESET | 5 | 5 | программатор → МК | ноль на время программирования |
| VCC | 2 | 2 | — | напряжение платы, см. ниже |
| GND | 6 | 4, 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 конт. | Вывод ATmega328P | DIP-28 | TQFP-32 |
|---|---|---|---|---|---|
| MOSI | 4 | 1 | PB3 | 17 | 15 |
| MISO | 1 | 9 | PB4 | 18 | 16 |
| SCK | 3 | 7 | PB5 | 19 | 17 |
| RESET | 5 | 5 | PC6/RESET | 1 | 29 |
| VCC | 2 | 2 | VCC, AVCC | 7, 20 | 4, 6, 18 |
| GND | 6 | 4, 6, 8, 10 | GND | 8, 22 | 3, 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 — вход.
| Перемычка | Что делает | Когда нужна |
|---|---|---|
| JP1, Supply target | подаёт на контакт 2 разъёма 5 В от USB | плата питается от программатора и рассчитана на 5 В; защиты от короткого замыкания нет |
| JP2, Self programming | соединяет RESET микроконтроллера программатора с контактом 5 разъёма | чтобы обновить прошивку самого USBasp другим программатором |
| JP3, Slow SCK | SCK около 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 не подключены.
У 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, только для программирования: отладки у этих кристаллов нет.
| Сигнал | Разъём TPI | ATtiny4/5/9/10 | Вывод SOT-23-6 |
|---|---|---|---|
| TPIDATA | 1 | PB0 | 1 |
| VCC | 2 | VCC | 5 |
| TPICLK | 3 | PB1 | 3 |
| RESET | 5 | PB3 | 6 |
| GND | 6 | GND | 2 |
Энергонезависимую память этих кристаллов можно программировать только при питании 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 МГц. На клонах нумерация может быть другой, ориентируйтесь на надписи на плате.
Источники
- 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
- Microchip. Atmel-ICE User Guide (DS50002999A) — рис. 4-10, 4-12, 4-13 — разъёмы SPI, UPDI и TPI; VTG питает преобразователи уровней; напряжение цели 1,62–5,5 В; DWEN отключает SPI
- Atmel. AVRISP mkII User Guide (Atmel-42093B) — VCC только измеряет напряжение платы; 1,8–5,5 В; подтяжка RESET не сильнее 4,7 кОм, конденсатор не больше 10 мкФ; индикация перевёрнутого кабеля
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — рис. 1-1 — распиновка; разд. 28.8 — выводы и длительность SCK при последовательном программировании; разд. 29.1 — предельные напряжения
- Arduino. Arduino Uno Rev3 schematic — разъёмы ICSP (ATmega328P) и ICSP1 (ATmega16U2) с разводкой стандартного ISP на 6 контактов
- Atmel. ATmega128/ATmega128L Datasheet (2467X) — табл. 127 — программирование через PE0 (PDI), PE1 (PDO) и PB1
- Microchip. ATmega640/1280/1281/2560/2561 Data Sheet (DS40002211A) — табл. 30-15 — выводы последовательного программирования в корпусах на 100 и 64 вывода
- Thomas Fischl. USBasp — USB programmer for Atmel AVR controllers — схема, Readme и исходники версии 2011-05-28: разъём на 10 контактов, перемычки, частоты SCK, TPI
- Atmel. ATtiny4/5/9/10 Datasheet (Atmel-8127H) — выводы TPI; энергонезависимая память программируется только при 5 В
- Microchip. ATtiny1614/1616/1617 Data Sheet (DS40002204A) — вывод PA0/RESET/UPDI и фьюз RSTPINCFG, заводское значение — UPDI
Смотрите также
- РаспиновкиРазъёмы, микросхемы, модули: выводы и их назначение
- AVRATmega, ATtiny, AVR Dx/Ex: семейства, прошивка, инструменты
- ATmega328PРаспиновка, фьюзы, Optiboot, периферия, питание, схема и код на C
- ATmega128Память, распиновка, фьюзы, M103C и JTAG, ISP через PE0/PE1
- SPISCLK, MOSI, MISO, CS, режимы 0–3, daisy chain, частота, SPI в AVR
- JTAG и SWDARM JTAG 20, Cortex Debug 10, STDC14, ST-LINK