Arduino разъем isp

Для чего нужен разъем ISCP на плате ардуино UNO?

Описано назначение выводов ISCP на платах Arduino UNO, Nano и других подобных.

На самом деле ICSP — это просто повторение пинов 5V, GND, RESET, MISO, MOSI, SCK (в нумерации Arduino Uno это выводы 11-13). То есть на схеме платы эти выводы просто попарно соединены между собой: 11-MOSI, 12-MISO, 13-SCK.

Данные пины обычно используются для передачи данных через интерфейс SPI (Serial Peripheral Interface).

Распиновка ICSP:

В зависимости от ситуации бывает удобно пользоваться либо выводами 11-13, либо разъемом ICSP.

Я также часто использую разъем ICSP для подачи питания на ардуину (через выводы 5V, GND), поскольку остальные выводы обычно заняты чем-то ещё.

ICSP для прошивки

Кроме того, у разьема ISCP есть еще одно назначение. На самом деле это даже его основное назначение, хотя оно и редко используется в домашних условиях. Разьем ISCP используется для промышленного программирования основного микроконтроллера ATMEGA328P, т.е. через внешний программатор — в тех случаях, когда зашивать программу через USB-кабель неудобно, либо нецелесообразно. Собственно ISCP расшифровывается как in-circuit serial programming.

В домашних условиях для прошивки мы обычно используем USB . Для этого ардуина подключается к компьютеру, и какой-то дополнительный программатор не требуется (его роль играет чип CH340 либо вспомогательный МК ATMEGA16U2).

Подробнее про прошивку через ISCP читайте здесь:

Источник

ISP (ICSP) программатор из Arduino/Freeduino

Мы не выдаем Китай за Италию. Платы от российского производителя по сниженным ценам.

Любая версия Freeduino / Arduino может выступать в роли ISP программатора, с помощью которого можно, например, изменить bootloader в другой аналогичной плате, или прошить bootloader в новую микросхему ATmega. В описании указывается Arduino, но фактически может быть использован любой клон, включая все варианты Freeduino.

Здесь рассматривается два варианта ISP программатора на основе Arduino: Mega-ISP, который может быть собран из любой версии Arduino и его клонов, и Bit-Bang программатор, для которого подойдут только те варианты Arduino, которые имеют дополнительно выведенные на специальный разъем контакты микросхемы FT232RL.

Аббревиатуры ISP и ICSP означают In System Programming и In Circuit Serial Programming соответственно. Это означает программирование чипа уже подключенного в некоторую схему, программирование в готовом устройстве по последовательному протоколу.

Принципиально важным является то, что программируемый микроконтроллер должен успешно «завестись», и только после этого он будет в состоянии принимать данные от программатора. Для нас это означает, что он должен быть подключен к питанию, и иметь соответствующий источник тактовых сигналов. Питание проще всего подавать через сам разъем ICSP, а вот с источником тактовых сигналов есть некоторые особенности.

Источник тактовых сигналов выбирается в микроконтроллерах серии ATmega с помощью так называемых fuse-битов, которые, также как и память программ, и EEPROM доступны для изменения с помощью программатора.

Производитель перед продажей выставляет fuse-биты так, что в качестве источника тактовых сигналов выбран внутренний осцилятор, и такой микроконтроллер можно просто подключить к ISP программатору с учетом расположения его выводов, и начать работу. Однако, если с помощью ISP программатора изменить значения fuse-битов так, что изменится источник тактовых сигналов, то чтобы ISP программатор опять начал работать с микроконтроллером, придется соответствующий источник к нему подключить. Таким образом, нужно быть внимательным при изменении значений fuse-битов.

Из известных проектов по созданию ISP программатора на основе Arduino наиболее интересным нам кажется Mega-ISP. Именно этот проект включен в состав ПО Arduino в раздел с примерами под именем ArduinoISP.

После загрузки скетча в вашу плату Arduino, скорее всего потребуется тем или иным образом отключить программный сброс. Владельцы плат Freeduino 2009/2013/Nano/Mega2560 могут просто снять перемычку JRS, владельцы Arduino могут перерезать ножом ту же перемычку. Для некоторых других плат можно выпаять конденсатор CRS, но мы советуем менее радикальный способ — соединить выводы Reset и +5V резистором номиналом порядка 120 Ом (оригинал здесь). Если все сделано правильно, при открытии COM-порта не будет происходить сброс микроконтроллера (это видно по светодиоду 13), и как побочный эффект станет невозможно обновить его собственную прошивку из среды Arduino.

Во-вторых, данный ISP программатор при общении с ПК использует протокол AVRISP/STK500v1 только со скорость 19200 бит/сек, и нормально работает не со всеми вариантами ПО для ПК. Поэтому не удивляйтесь, что не удается что-либо прошить из среды Arduino. Авторы рекомендуют использовать программу avrdude из состава Win-AVR.

Сборка программатора Mega-ISP

Если Вы с помощью одной платы Arduino собираетесь прошить другую, то Вам потребуется разъем 2×3 и 6 проводков. Схема сборки:

Если нужно прошить отдельный микроконтроллер (не забываем, что его fuse-биты должны быть выставлены так, что он тактируется от внутреннего осцилятора), то нужно узнать согласно документации Atmel расположение вывовдов Gnd, Vcc, MOSI, MISO, SCK.

Соединение с Arduino такое: 10 — Reset, 11 — MOSI, 12 — MISO, 13 — SCK.

Не забываем подключить «землю» и питание.

Для примера приводим разводку для разъема ICSP и микроконтроллеров ATmega328 и ATtiny85.

На фото представлен один из вариантов реализации:

Работа с программатором Mega-ISP

Рассмотрим например, как прошить новый boot-loader.

Скачайте архив с проектом и подходящей версией avrdude. Распакуйте архив в какую-нибудь папку.

Откройте проект в среде Arduino и загрузите его в вашу плату. Либо загрузите в плату пример ArduinoISP из состава ПО Arduino. После этого можно отключать программный сброс согласно описания выше.

Подсоедините вторую плату (которую будем «прошивать») к первой.

В режиме командной строки перейдите в папку с avrdude. Теперь можно запускать avrdude с соответствующими ключами:

-q — уменьшает объем выводимой на экран отладочной информации

-C avrdude.conf — указывает расположение .conf файла (в нашем случае он в той же папке)

-p m328 — выбор типа микроконтроллера ATmega328

-c avrisp — выбор протокола

-P COM3 — выбор COM порта. Здесь нужно поставить свой

-b 19200 — выбор скорости порта

-e — Команда на предварительную очистку памяти программ

-U flash:w:ATmegaBOOT_328_diecimila.hex — указывает на .hex файл с прошивкой

В процессе работы с программатором было замечено, что иногда процесс прошивки не начинается, и avrdude завершается с ошибкой. В таких случаях нам помогал сброс программатора кнопкой Reset и повторная прошивка.

Архив с ПО также содержит файл sample.bat, в котором кроме bootloader’а программируются fuse и lock биты.

В Сети есть страничка с разведенной платой такого программатора, включающей дополнительные отладочные светодиоды: http://drug123.org.ua/mega-isp-shield/

«Сердцем» Bit-Bang программатора является микросхема FD232RL (та самая, которая реализует COM-порт на шине USB), а собственно микроконтроллер ATmega никакого участия в процессе программирования не принимает. Это позволяет программировать микроконтроллер, установленный в «панельке» Вашей Arduino – вторая плата Arduino не потребуется.

Соответственно, для данного программатора подойдут только USB версии Arduino, да и то не все, т.к. не на всех вариантах разведен разъем X3 с дополнительными выводами FT232RL.

Сборка программатора Arduino Bit-Bang

Для сборки Вам потребуются разъемы 1×4, 2×6, штекер 1×2 (для питания) и несколько проводов. Можно использовать, например пару Audio-кабелей от CD-ROM – у них удобные разборные разъемы, и в таком случае можно обойтись даже без паяльника.

Схема соединений следующая:

Провода питания и «земли» потребуются, если Вы собираетесь программировать внешнее устройство. Для программирования микроконтроллера, находящегося в панели той же самой Arduino они не нужны.

На фотографиях представлены оба варианта соединения – программирование микроконтроллера ATmega168, находящегося в панельке Arduino (провода питания и «земли» не нужны), и программирование микроконтроллера во второй плате.

Работа с программатором Arduino Bit-Bang

Аналогично рассмотрим прошивку нового boot-loader’а.

Скачайте архив с соответствующей версией avrdude. Распакуйте архив в какую-нибудь папку.

Подсоедините программатор к USB порту.

В режиме командной строки перейдите в папку с avrdude. Теперь можно запускать avrdude с соответствующими ключами:

-q — уменьшает объем выводимой на экран отладочной информации

-C avrdude.conf — указывает расположение .conf файла (в нашем случае он в той же папке)

-p m168 — выбор типа микроконтроллера ATmega168

-c diecimila — выбор программатора (он описан под таким именем в .conf файле)

-P ft0 — выбор порта. Выбрано первое устройство с чипом FTDI

-e — Команда на предварительную очистку памяти программ

-U flash:w:ATmegaBOOT_168_diecimila.hex — указывает на .hex файл с прошивкой

Архив с ПО также содержит файл sample.bat, в котором кроме bootloader’а программируются fuse и lock биты.

Более полную информацию можно найти по ссылке:

Источник

Arduino Uno: распиновка, схема подключения и программирование

Arduino Uno — флагманская платформа для разработки на языке программирования С++.

Uno выполнена на микроконтроллере ATmega328P с тактовой частотой 16 МГц. На плате предусмотрены 20 портов входа-выхода для подключения внешних устройств, например плат расширения или датчиков.

Видеообзор

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

Шаг 1

Подключите плату к компьютеру по USB. Для коммуникации используйте кабель USB (A — B).

Шаг 2

Установите и настройте интегрированную среду разработки Arduino IDE.

Что-то пошло не так?

Пример работы

В качестве примера повторим первый эксперимент «Маячок» из набора Матрёшка. На плате уже есть встроенный пользовательский светодиод L , подключенный к 13 пину микроконтроллера.

После загрузки программы встроенный светодиод L начнёт мигать раз в секунду.

Это значит, всё получилось, и можно смело переходить к другим экспериментам на Ардуино.

Элементы платы

Микроконтроллер ATmega328P

Сердцем платформы Arduino Uno является 8-битный микроконтроллер фирмы Microchip — ATmega328P на архитектуре AVR с тактовой частотой 16 МГц. Контроллер обладает тремя видами памяти:

Микроконтроллер ATmega16U2

Микроконтроллер ATmega328P не содержит USB интерфейса, поэтому для прошивки и коммуникации с ПК на плате присутствует дополнительный микроконтроллер ATmega16U2 с прошивкой USB-UART преобразователя. При подключении к ПК Arduino Uno определяется как виртуальный COM-порт.

Микроконтроллер ATmega328P общается с ПК через сопроцессор ATmega16U2 по интерфейсу UART используя сигналы RX и TX , которые параллельно выведены на контакты 0 и 1 платы Uno. Во время прошивки и отладки программы, не используйте эти пины в своём проекте.

Светодиодная индикация

Имя светодиода Назначение
ON Индикатор питания платформы.
L Пользовательский светодиод на 13 пине микроконтроллера. Используйте определение LED_BUILTIN для работы со светодиодом. При задании значения высокого уровня светодиод включается, при низком – выключается.
RX и TX Мигают при прошивке и обмене данными между Uno и компьютером. А также при использовании пинов 0 и 1 .

Порт USB Type-B

Разъём USB Type-B предназначен для прошивки и питания платформы Arduino. Для подключения к ПК понадобится кабель USB (A — B).

Разъём питания DC

Коннектор DC Barrel Jack для подключения внешнего источника напряжения в диапазоне от 7 до 12 вольт.

Понижающий регулятор 5V

Понижающий линейный преобразователь NCP1117ST50T3G обеспечивает питание микроконтроллера и другой логики платы при подключении питания через разъём питания DC или пин Vin. Диапазон входного напряжения от 7 до 12 вольт. Выходное напряжение 5 В с максимальным выходным током 1 А.

Понижающий регулятор 3V3

Понижающий линейный преобразователь LP2985-33DBVR обеспечивает напряжение на пине 3V3 . Регулятор принимает входное напряжение от линии 5 вольт и выдаёт напряжение 3,3 В с максимальным выходным током 150 мА.

Кнопка сброса

Кнопка предназначена для ручного сброса прошивки — аналог кнопки RESET обычного компьютера.

ICSP-разъём ATmega328P

ICSP-разъём выполняет две полезные функции:

ICSP-разъём ATmega16U2

ICSP-разъём предназначен для программирования микроконтроллера ATmega16U2. А подробности распиновки читайте в соответствующем разделе.

Источник

RoboCraft

Думаю, ни для кого не секрет, что первоначально программу в микроконтроллер заливают при помощи специального устройства — программатора. Конечно, ардуинщикам обычно не нужно об этом беспокоиться — у них есть bootloader (загрузчик), заранее прошитый в микроконтроллер, и прошивку он забирает по UART через COM-порт или через USB. Но чтобы прошить этот загрузчик или другую прошивку в «чистый» МК, нужен программатор.

Но в этой статье мы не будем рассматривать сборку и пайку программатора с нуля, а воспользуемся возможностями Arduino. Дело в том, что на большинстве плат Arduino до версии Uno есть микросхема FT232RL компании FTDI.

Эта микросхема представляет собой конвертор UART->USB, предоставляя операционной системе виртуальный COM-порт, работающий через USB. Но в данном случае нам нужна другая её возможность — управление отдельными выводам микросхемы, именуемое режимом bit-bang, которое позволяет «завернуть» произвольный протокол в USB. Задача состоит в том, завернуть в USB протокол прошивки МК.

Микроконтроллеры AVR, используемые в Arduino, прошиваются по уже знакомому нам протоколу SPI через разъём для внутрисхемного программирования — ISP (In-System Programming). Он так называется потому, что позволяет прошивать МК прямо в конечном устройстве. Вот как выглядит этот разъём на плате CraftDuino:

MISO, MOSI, SCK, RESET — это всё линии шины SPI, только вместо SS — RESET.

Но нам ещё нужен доступ выводам FT232RL, через которые будет осуществляться прошивка, и разработчики Arduino позаботились об этом, сделав разъём X3 (икс-три):

Если на вашей плате только контактные площадки для X3, нужно будет припаять кусок PLS-гребёнки самим.

Пины этого разъёма имеют следующее назначение для ISP-программатора:

  • 1 (CTS) — MISO
  • 2 (DSR) — SCK
  • 3 (DCD) — MOSI
  • 4 (RI) — RESET

А у CraftDuino вместо X3 есть стандартный разъём RS232, тоже соединённый с FT232RL, из которого нам нужны те же 4 вывода:

  • 1 (CD) — MOSI
  • 6 (DSR) — SCK
  • 8 (CTS) — MISO
  • 9 (RI) — RESET

Пораскинув мозгами, сделаем кабель для нашего импровизированного ISP-программатора:

С одного конца кабеля — разъёмы для Arduino X3/CraftDuino UART, и для питания:

А с другого конца — стандартный разъём ISP:

Обычно для прошивки AVR используется популярная утилита avrdude, которая поддерживает множество различных программаторов и моделей МК, её использует даже среда Arduino IDE для заливки скетча. Для этой утилиты есть патч, позволяющий прошивать МК через микросхему FT232RL, используя режим bit-bang. Нашлись добрые люди, которые уже пропатчили Windows-версию avrdude для работы с bit-bang-программатором на базе этой микросхемы, а я сделал то же и для Linux:

  • Патченая версия 5.3.1 для Windows.
  • Версия 5.10, deb-пакет для Linux i386 и amd64 (x86_64).
  • Архив с исходными кодами версии 5.10, библиотекой libftd2xx-1.0.4 с официального сайта FTDI и правлеными Makefile.in и avrdude.conf, чтобы всё это собиралось, корректно устанавливалось и работало. Проверял только на Ubuntu 11.04 (i386 и amd64).

Собственно, deb-пакеты собраны из выложенного тут патченого дистрибутива, но для параноиков есть другой вариант — пропатчить и собрать avrdude самолично, про это читайте тут. Только в avrdude.conf нужно добавить следующие строчки, а не то, что написано в статье по ссылке:

Если вы работаете в Linux, придётся сделать ещё несколько действий (FTDI нас любит):

    Убить драйвер ftdi_sio, который мешает avrdude открыть COM-порт FTDI:

Если хотите, можете занести этот модуль ядра в чёрный список, внеся в /etc/modprobe.d/blacklist.conf строчку:

Только имейте ввиду, что для работы с виртуальным портом /dev/ttyUSB0 и т.п. (нужно Arduino IDE) этот модуль должен быть запущен. Это можно делать командой

По умолчанию, система при попытке avrdude открыть виртуальный COM-порт FTDI покажет ему кукиш, а он вам — не слишком информативное сообщение об ошибке. Нужно дать себе права на полный доступ к виртуальным COM-портам, создав в /etc/udev/rules.d/ файлик с именем 80-ftdi.rules следующего содержания:

USB Vendor ID и Product ID можно для верности уточнить командой lsusb, если Arduino подключена к компу:

Потом нужно создать группу ftdi-user и добавить себя в неё:

после чего нужно перелогиниться.

Ну и, чтобы служба udev узнала про изменения, нужно либо перезагрузить комп, либо вызвать

В статье про программирование AVR на C товарищ noonv уже описал, как пользоваться avrdude, а я опишу лишь заливку загрузчика на Arduino Diecimila с ATmega168:

  1. Устанавливаем необходимые для быстрой прошивки загрузчика fuse-биты: кварц > 8 МГц, встроенный делитель на 8 выключен:
  2. Заливаем загрузчик:

Но консоль не всегда лучше гуя, особенно для задания fuse-битов, и есть гораздо более удобный и надёжный способ — воспользоваться программой SinaProg, разработанной иранскими программистами. Их сайт давно сдох, зато программа живёт и здравствует и по сей день. О её настройке подробно написано у Di Halt’а, ну а мы не будем терять времени и возьмём готовую настроенную сборку с пропатченным avrdude (в сборке Di Halt’а ошибка в одном из конфигов). Версии под Linux, увы, не существует.

В секции Hex file выбирается hex-файл, который нужно залить или считать. Записывать и считывать можно как память программ (Flash), так и энергонезависимую (EEPROM). В секции Device нужно указать конкретный МК, в секции Programmer — программатор (у нас это ftbb), порт (FTDI0) и скорость порта (9600).

Ну и то, ради чего стоит пользоваться этой программой — секция Fuses. В раскрывающемся списке можно выбрать предопределённые конфигурации fuse-битов, которые задаются в Fuse.txt. Но самое главное открывается нашему взору по нажатию кнопки Advanced:

Здесь можно набивать fuse-байты вручную, а можно нажимать на кнопки «C» рядом со значением байтов и выставлять фьюзы тыканием галочек с описаниями. Для заливки загрузчика сначала нажмём кнопку Read, чтобы считать текущие значения fuse, а затем настроим Low fuse: частота кварца — более 8 МГц, время старта МК — 65 мс, делитель на 8 выключен:

После настройки жмём кнопку Write и ждём появления надписи «Writing Fuses… OK».

Теперь можно в главном окне в секции Hex file выбирать файл загрузчика ATmegaBOOT_168_diecimila.hex и в секции Flash жать кнопку Program. Если в процессе будут возникать ошибки, то над индикатором прогресса есть кнопка «>», открывающая сбоку в окне лог работы avrdude.

А давайте-ка прошьём какой-нибудь другой МК — например, ATtiny13.

Поставим МК на макетку, подсоединим к ней все линии разъёма ISP от нашего bit-bang-программатора, прицепим светодиод через резистор на 500 Ом к 3-й ножке (DB4) и подтянем RESET к питанию резистором на 10 кОм:

Пишем в любимом текстовом редакторе простой код простой мигалки светодиодом в файл blink.c:

Делаем hex-файл прошивки:

Перевтыкаем Arduino в USB и наблюдаем мигание светодиода при условии, что нет ошибок подключения (:

Вот так, путём нехитрых манипуляций руками и мозгами, можно сделать себе USB ISP-программатор, так что не нужно париться с отсутствием LPT на современных компах и COM-порта почти на любом ноутбуке — уж USB-то есть везде.

Источник

Adblock
detector