Isp программирование что это такое
Перейти к содержимому

Isp программирование что это такое

  • автор:

Решение для внутрисхемного программирования

ООО «Остек-Электро»
Молдавская ул., д. 5, стр. 2, Москва, Россия, 121467
Тел.: +7 (495) 788-44-44, факс: +7 (495) 788-44-42,
www.ostec-group.ru, info@ostec-group.ru
ИНН 7731483966, КПП 773101001, ОГРН 5147746324754,
ОКПО 17184889

Решение для внутрисхемного программирования Решение для внутрисхемного программирования

  • Описание
  • Технические характеристики

FlashRunner — универсальное средство для внутрисхемного программирования (ISP) в процессе производства электроники.

  • универсальность — поддержка программируемых компонентов от разных производителей;
  • скорость — уменьшение времени программирования, означающее уменьшение себестоимости;
  • гибкость — быстрое изменение программной конфигурации;
  • надежность — гарантия целостности данных, их защита и непрерывность производственного процесса.

Что такое внутрисхемное программирование InSystem Programming (ISP)

Внутрисхемное программирование — это технология программирования компонентов уже после монтажа их на плату посредством различных интерфейсов.

Внутрисхемное программирование (ISP) устраняет традиционные ограничения, связанные с необходимостью программирования компонентов до установки их на плату и обеспечивает следующие преимущества:

  • процесс становится проще и дешевле;
  • программирование компонентов происходит на уже спаянной плате (модуле);
  • есть возможность оперативного обновления прошивок без дополнительных затрат;
  • происходит сокращение производственных затрат, есть совместимость с системами внутрисхемного и функционального контроля.

Flash Runner Series

A — Верхняя панель защищает основные аппаратные средства и содержит индикацию состояния программатора. Панель может быть легко удалена, если необходимо уменьшить занимаемое пространство — при интеграции с системами тестирования.

B — Встроенные часы реального времени/календарь дают возможность вести регистрацию процессов с привязкой по времени, позволяя отследить момент возникновения производственных проблем.

C — FlashRunner использует стандартную SD карту (до 2 ГБ) для хранения файлов прошивок, проектов и файлов системного журнала.

D — Легко интегрируется с тестовыми системами разных производителей, адаптерными устройствами и оснастками

E — Плата со средствами коммуникаций обеспечивает подключение к внешним системам программирования/тестирования. Включает оптоизолированные цепи, Ethernet для взаимодействия с хост-системой.

F — Основная плата программатора (едина для всей серий инструментов Flashrunner) обеспечивает основные функции программирования Flashrunner.

FlashRunner создан для ускорения процесса программирования. Аппаратные и программируемые средства спроектированы для обеспечения эффективного взаимодействия для устранения узких мест в коммуникациях. Развитые программные алгоритмы позволяют достигать технологических ограничений по скорости работы с памятью программируемого устройства. Это делает FlashRunner одним из самых быстрых универсальных внутрисхемных программаторов на рынке, позволяя значительно сократить себестоимость.

Широкая база поддерживаемых компонентов. Устройства FlashRunner полностью реконфигурируемые, имеют гибкие аппаратные средства, способные к программированию огромного количества основанных на FLASH памяти микроконтроллеров и памяти с последовательным интерфейсом. В настоящее время поддерживается больше чем 4500 устройств, и их список непрерывно увеличивается. Благодаря сотрудничеству с основными производителями программируемых компонентов идет постоянное обновление технической информации из первых рук, что дает возможность наиболее быстро и всесторонне обеспечить поддержку устройств.

FlashRunner компактен и надежен, с высокой гибкостью интеграции и расчетом способности работы в тяжелых производственных условиях. Оптоизолированные входы, ESD защита, проверка данных на ошибки при передаче и подробные отчеты делают FlashRunner отличным выбором, когда уверенность в качестве программного потока имеет особо важное значение.

Легкая интеграция с ATE и адаптерными устройствами. Универсальная интерфейсная система позволяет FlashRunner легко и эффективно интегрироваться в автоматизированные тестовые системы (ATE). FlashRunner работает как в автономном режиме, так и управляется по Ethernet или RS 232 интерфейсу.

Система защиты данных FlashRunner имеет дополнительную защиту, которая при несанкционируемом доступе делает содержание файлов для прошивки не читаемым и не копируемым. Кроме того, система защиты распространяется и на программный цикл, препятствуя вмешательству производственного персонала в процесс.

Программирование групповых заготовок. FlashRunner поддерживает программирование модулей в групповых заготовках. Многоканальные выходы ISP позволяют осуществлять программирование как нескольких устройств на одной плате, так и каждый модуль на групповой заготовке.

Особенности аппаратной части

FlashRunner разработан на современной элементной базе, обеспечивает высокую гибкость интеграции в компактном размере.

Открытая архитектура FlashRunner позволяет легко обновлять внутреннее программное обеспечение для поддержки новых устройств и новых функций.

Особенности программного обеспечения

FlashRunner управляется через систему базовых ASCII команд. FlashRunner может получать и выполнять команды двумя способами:

  • через RS-232 or Ethernet соединение (Host mode);
  • через скрипты (scripts), сохраненные в SD карте (Автономный режим).

В первом случае FlashRunner управляется хост-системой (например, через Windows HyperTerminal); во втором — работает в автономном режиме и полностью независимо.

FlashRunner поставляется с ПО под OS Windows, которое позволяет общаться с инструментом и выполнять наиболее распространенные операции: отправка команд, управление файлами на SD-карте, обновление внутренней прошивки оборудования и т.д.

  • Полная независимость в автономном режиме благодаря SD карте.
  • Управление через любую хост-систему посредством терминальных утилит и простого ASCII протокола.
  • Неограниченное количество проектов (скриптов).
  • Создание файлов-отчетов.
  • Очистка, проверка чистоты, программирование, чтение, верификация, oscillator trimming и т.п.
Входное питание 9-24V DC 512 bytes динамической памяти
Пять цифровых линий I/O Встроенные часы и календарь
Две цифровые I/O или аналоговые выходные линии Защита по входам I/O
Два программируемых уровня выходного напряжения (0-15V, 0.25A и 0-5V, 0.5A) Оптоизолированные входы для выбора проекта
Входная линия очистки и сброса Две оптоизолированные командные линии (START, STOP)
Одна аналоговая входная линия Три оптоизолированных линии выхода (FAIL, PASS, BUSY)
Один программируемый выход синхронизации Оптоизолированные каналы RS232/ETHERNET
SD карта памяти (до 2GB)

Внутрисхемное программирование Текст научной статьи по специальности «Компьютерные и информационные науки»

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Гаврилюк Дмитрий

Метод внутрисхемного (внутрисистемного) программирования (ISP — In-System Programmability) на сегодняшний день является основным способом программирования микроконтроллеров, ПЛИС и других приборов, в состав которых входит память Flash или EEPROM. В основе внутрисистемного программирования лежит идея использования какого-либо стандартного интерфейса, интегрированного в программируемую микросхему для последовательного занесения в нее программных или конфигурационных данных.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Гаврилюк Дмитрий

AVR – микроконтроллеры: семь ярких лет становления. Что дальше? Часть 3. Программные и аппаратные средства поддержки разработок для микроконтроллеров AVR

AVR – микроконтроллеры семь ярких лет становления. Что дальше? Часть 2. Ядро и перефирийные блоки AVR второго поколения

Avr – микроконтроллеры семь ярких лет становления. Что дальше? Часть 1. Текущее положение avr на мировом рынке микроконтроллеров

AVR микроконтроллеры: аппаратные средства разработчика
8-разрядные микроконтроллеры AVR корпорации Atmel: новинки и тенденции развития
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Внутрисхемное программирование»

Компоненты и технологии, № 8’2003

Метод внутрисхемного (внутрисистемного) программирования (ISP — In-System Programmability) на сегодняшний день является основным способом программирования микроконтроллеров, ПЛИС и других приборов, в состав которых входит память Flash или EEPROM. В основе внутрисистемного программирования лежит идея использования какого-либо стандартного интерфейса, интегрированного в программируемую микросхему для последовательного занесения в нее программных или конфигурационных данных.

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

• специализированные программаторы, ориентированные на работу с определенными сериями микроконтроллеров, ПЛИС, DSP или CPLD (Complex Programmable Logic Device — комплексное программируемое логическое устройство);

• интерфейсные платы или так называемые «загрузочные кабели» для программирования с использованием персонального компьютера;

• тестовое оборудование (ATE — Automated Test Equipment), позволяющее помимо тестирования платы проводить также и программирование с использованием JTAG-интерфейса.

Основные преимущества использования ISP-технологии отражены в таблице 1.

Для понимания особенностей внутрисхемной отладки и программирования по ISP-технологии далее будут рассмотрены три основных интерфейса, используемых для этих целей:

Таблица 1. Достоинства технологии ISP

Момент использования Возможности Преимущества

Разработка и проектирование Программирование выполняется при рабочем напряжении микросхемы Не нужно использовать источник на 12 В или другое напряжение, не используемое при нормальной работе микросхемы

Микроконтроллер или ПЛИС программируется непосредственно в устройстве Снижается риск повреждения микросхемы от электростатики и механических воздействий

Сборка устройства осуществляется до окончания написания готовой программы Сокращается время выхода изделия на рынок, так как сборка устройства может проходить параллельно с написанием программы

Производство Программное обеспечение может быть загружено в микросхему с другого устройства на плате или во время производства печатной платы Упрощается и сокращается производственный цикл

Микросхема, поддерживающая ^-программирование, становится одним из многих устройств на плате и не требует к себе особого внимания

Микросхема может программироваться тестовой программой Расширяются возможности тестирования и внутрисхемной отладки

Эксплуатация Микросхема перепрограммируется непосредственно в составе работающего оборудования Возрастают функциональные возможности устройства и привлекательность для потребителя

• JTAG/IEEE 1149.1 — 4-проводной интерфейс, обеспечивающий тестирование и программирование микросхем, смонтированных на печатной плате;

• SPI — интерфейс, позволяющий реализовать высокоскоростной полнодуплексный синхронный обмен данными по 3-проводной шине и программирование в последовательном режиме;

• DebugWIRE — однопроводной интерфейс, используемый в новейших микроконтроллерах ATMEL, ориентированный на программирование встроенной памяти и отладку в составе готового устройства.

Бурное развитие электронной техники и связанный с этим рост степени интеграции микросхем к концу 70-х годов привели к необходимости разработки механизма тестирования, способного обеспечить полноценное тестирование сложных и функционально насыщенных печатных плат. В 1980 году группой JTAG (Joint Test Automation Group — объединенная рабочая группа по автоматизации тестирования) была начата разработка спецификации граничного (периферийного) сканирования, стандартизованная в 1990 году институтом IEEE. Получившийся стандарт известен как IEEE Std.1149.1-1990. В дальнейшем было выполнено несколько пересмотров стандарта. В 1994 году в него было добавлено описание языка BSDL (Boundary-Scan Description Language — язык описания устройств, поддерживающих периферийное сканирование). С этого момента стандарт был принят ведущими электронными компаниями во всем мире. В настоящее время многие небольшие фирмы, которые по экономическим причинам не могут воспользоваться дорогими внутрисхемными тестерами, используют технологию граничного сканирования. Последний раз стандарт был пересмотрен в 2001 году [1]. Текст стандарта можно приобрести в IEEE (http://shop.ieee.org).

Архитектура граничного сканирования (Boundary-Scan Test) обеспечивает тестирование соединений между интегральными схемами на плате без ис——-www.finestreet.ru—————————

Компоненты и технологии, № 8’2003

Приложения для тестирования и программирования

Рис. 1. Внутренняя организация микросхемы с поддержкой JTAG

пользования физических тестовых пробников. Предполагается, что тестируемые микросхемы имеют поддержку JTAG-интерфейса. Стандарт IEEE 1149.1 определяет 4-провод-ной (опционально 5-проводной) последовательный интерфейс доступа к микропроцессорам, DSP, CPLD. Любая совместимая с JTAG-интерфейсом микросхема (рис. 1) имеет регистры сдвига и модуль поддержки функций граничного сканирования. Ячейки регистра сдвига (BS-регистра) располагаются непосредственно между внешними выводами и функциональным ядром микросхемы.

Данные, поступающие в кристалл через вывод TDI, сохраняются в регистре инструкций или в одном из регистров данных. Последовательные данные выводятся из микросхемы через вывод TDO. Логический модуль интерфейса тактируется сигналом на входе TCK, не зависимом от системной тактовой частоты. Сигналы на входе TMS управляют состоянием порта TAP (Test Access Port). Вывод TRST является необязательным и служит для сброса логики интерфейса JTAG.

Множество микросхем, совместимых со стандартом IEEE 1149.1, могут последовательно соединяться друг за другом на печатной плате, формируя цепь граничного сканирования (рис. 2).

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

При тестировании или внутрисхемном программировании с помощью JTAG-интерфейса можно воздействовать на логическое ядро микросхемы, выдавать логические сигналы на выводы микросхемы, считывать выходные сигналы от внутренней логики или значение логических уровней на выводах, впаянных в печатную плату.

Технология граничного сканирования позволяет испытывать плату на наличие структурных производственных ошибок и выполнять ISP-программирование почти всех устройств на плате, независимо от типа и размера встроенной памяти, через стандартный

JTAG TAP-интерфейс. В результате происходит значительное сокращение необходимых точек тестирования на плате. Это приносит много выгод: упрощается разводка печатной платы, снижаются затраты и время тестирования [2], сокращается время выхода готового изделия на рынок.

Файлы, содержащие описание поддерживаемых инструкций и конфигурационных параметров регистров сдвига JTAG-совместимых микросхем на языке BSDL, бесплатно доступны на сайтах фирм-производителей.

Интерфейс SPI (Serial Peripheral Interface — последовательный периферийный интерфейс) обеспечивает высокоскоростную передачу информации в синхронном режиме между ведущим и ведомыми устройствами. На рис. 3 показано включение ведущего и ведомого устройств с использованием SPI.

Ведущее устройство содержит 8-разрядный регистр сдвига и генератор синхроимпульсов. Инициирование цикла обмена данными происходит, когда ведущий устанавливает на выводе SS ведомого устройства лог. «0». Ведущее устройство генерирует необходимую тактовую последовательность на выводе SCK для обмена данными между сдвиговыми регистрами устройств. Данные побитно сдвигаются от ведущего к ведомому по линии MOSI (Master Out — Slave In) и от ведомого к ведущему по линии MISO (Master In — Slave Out). В итоге содержимое регистра сдвига ведущего оказывается в регистре сдвига ведомого и наоборот. После передачи каждого пакета

данных ведущий синхронизируется с ведомым установкой лог. «1» на линии SS.

Следует учитывать, что если устройство сконфигурировано как ведущее, модуль SPI-интерфейса автоматически не управляет линией SS. Передача нового байта данных происходит сразу же после его записи в регистр сдвига. При необходимости использования линии SS управлять ее состоянием должно программное обеспечение пользователя.

В AVR-микроконтроллере ATmega8 фирмы Atmel модуль SPI-интерфейса обладает следующими возможностями [3]:

• полнодуплексная 3-проводная синхронная передача данных;

• работа в режиме ведущего или ведомого;

• возможность определения порядка передачи: первым передается либо младший, либо старший бит;

• семь программируемых величин скорости передачи;

• флаг прерывания окончания передачи;

• флаг защиты от коллизий записи;

• система «пробуждения» из режима Idle;

• максимальная тактовая частота интерфейса в два раза ниже тактовой частоты процессорного ядра.

С помощью SPI легко организуется внутрисхемное программирование микроконтроллеров Atmel (рис. 4).

Для этого используется три линии интерфейса: MISO, MOSI и SCK. Вывод RESET подключается к «земле» у AVR-серии или к положительному источнику — у серии AT89Sx. В этом режиме обеспечивается программирование (запись и чтение) памяти программ и данных, а также конфигурационных битов кристалла.

8-битный регистр сдвига

Тактовый генератор SPI

8-битный регистр сдвига

Рис. 3. Подключение ведущего и ведомого устройств через SPI

Компоненты и технологии, № 8’2OO3

Выход данных -• Вход инструкций-Вход тактирования —

РВ 6 (MISO) РВ 5 (MOSI) РВ 7 (SCK)

Рис. 4. Внутрисхемное программирование микроконтроллеров Atmel через SPI-интерфейс

Рис. 5. Подключение микроконтроллера к интерфейсу DebugWIRE

В мае 2003 года Atmel анонсировала интегрированный в устройства ATtiny13 [4] и ATtiny2313 интерфейс DebugWIRE (One-Wire Debug Interface — однопроводной отладочный интерфейс). Он представляет собой встроенный в кристалл механизм отладки на основе одной двунаправленной линии передачи информации, позволяющий управлять программным потоком, выполнять AVR-инструкции ядра микроконтроллера и осуществлять программирование интегрированной энергонезависимой памяти.

Основные возможности интерфейса DebugWIRE:

• комплексное управление программным потоком;

i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

• эмулирование всех функций кристалла, включая цифровые и аналоговые, за исключением вывода RESET;

• работа в реальном времени;

• поддержка символьной отладки (на основе исходных кодов ассемблера, С или других языков высокого уровня);

• неограниченное число программных точек останова;

• работа в «теневом» режиме (интерфейс не препятствует работе основной программы);

• электрические характеристики идентичны реальному устройству;

• автоматическое конфигурирование системы;

• высокая скорость работы;

• программирование энергонезависимой памяти.

Режим отладки в устройстве активируется установкой бита DWEN (debugWIRE Enable) и сброса Lock-битов микроконтроллера. Физическое подключение эмулятора интерфейса к микроконтроллеру производится через вывод RESET, который работает как двунаправленный вывод с открытым стоком с подтягивающим к шине питания резистором. На рис. 5 показана схема подключения отлаживаемого микроконтроллера в режиме debugWIRE к эмулятору.

Тактовая частота определяется установками битов CKSEL и не зависит от debugWIRE.

Когда разрабатывается система, в которой будет использоваться debugWIRE, необходимо соблюдать следующие требования:

• если используется «подтягивающий» резистор на выводе dW(RESET), величина его сопротивления должна лежать в диапазоне от 10 до 20 кОм;

• соединение вывода RESET напрямую с источником питания Vcc недопустимо;

• конденсаторы, подключенные к выводу RESET, должны быть отключены при использовании debugWIRE;

• все внешние источники сброса микроконтроллера должны быть отключены. Поддержка программных точек останова

в debugWIRE реализуется при работе с интегрированной средой разработки AVR Studio. При установке точки останова в исходной программе в AVR Studio в программную память микроконтроллера будет вставлена инструкция BREAK. Инструкция, замещенная инструкцией BREAK, будет сохранена. Когда выполнение программы будет продолжено, сначала будет выполнена инструкция, сохраненная из памяти программ. Команду останова можно вставить вручную, поместив инструкцию BREAK в программную память микроконтроллера. Следует учитывать, что Flash-память микроконтроллера перепрограммируется при каждом изменении точки останова. Этот процесс автоматически выполняет AVR Studio через интерфейс debugWIRE. Использование точек останова уменьшает ресурс Flash-памяти. Устройства, применявшиеся в отладке системы, не должны передаваться конечным пользователям.

Использование интерфейса debugWIRE накладывает некоторые ограничения на устройство, в котором он применяется. Коммуникационный вывод интерфейса dW физически совмещен с выводом внешнего сброса. Поэтому источники внешнего сброса не поддерживаются при работе debugWIRE.

Система debugWIRE точно эмулирует все входные и выходные функции на полной скорости, когда выполняется программа в CPU. Если процессорное ядро остановлено, необходимо проявлять осторожность при доступе к некоторым регистрам ввода-вывода через отладчик AVR Studio.

При установке бита DWEN (активации debugWIRE), некоторые части системы тактирования остаются в активном состоянии при переходе в режим «sleep», что приводит

к увеличению потребляемой мощности. Поэтому необходимо отключать DWEN, когда debugWIRE не используется. При работе с debugWIRE микроконтроллер использует 8-разрядный регистр DWDR, образующий коммуникационный канал между исполняемой в микроконтроллере программой и отладчиком. Этот регистр доступен только интерфейсу debugWIRE и не может быть использован как регистр общего назначения при нормальной работе.

Дальнейшее развитие идея внутрисхемного программирования получила в 8-разрядной серии AVR микроконтроллеров Atmel. В ней реализован механизм самопрограммирования Flash-памяти программ через интегрированные интерфейсы SPI, UART или TWI. Все операции по программированию и перепрограммированию процессорное ядро выполняет по программе, находящейся в загрузочной области программной памяти. Когда происходит самопрограммирование, данные считываются в оперативную память через внешний интерфейс и затем записываются в программную память блоками по 10, 128 или 256 байт. Особенности такого подхода состоят в следующем:

• возможно перепрограммирование готового изделия непосредственно в условиях его применения;

• снижаются затраты, поскольку нет необходимости использовать дополнительные компоненты;

• программирование может выполняться значительно быстрее, поскольку каждый сектор памяти стирается и программируется индивидуально;

• перепрограммирование осуществляется через различные периферийные интерфейсы;

• работа в режиме самопрограммирования осуществляется в полном температурном диапазоне и при любом допустимом напряжении питания.

Комплексы внутрисхемного программирования

Практическое применение ISP-технологии возможно с использованием аппаратно-программных комплексов самых разных производителей. Наиболее развитым направлением в этой сфере является производство разнообразных модулей и программных средств для решений на основе технологии JTAG/IEEE 1149.1. Гамма предлагаемых устройств включает контроллеры, подключаемые к портам ПК, а также устанавливаемые в слоты ISA, PCI, USB, PXI. Программное обеспечение этих приборов функционирует на платформе Windows (некоторые версии адаптированы для UNIX) и позволяет проводить тестирование, отладку модулей и перепрограммирование пользовательских микросхем на плате через стандартный TAP-интерфейс. Оборудование для работы с технологией граничного сканирования производят:

1. Corelis Inc., США (www.corelis.com).

2. JTAG Technologies, Нидерланды (www.jtag.com).

Компоненты и технологии, № 8’2003

Isp программирование что это такое

&nbsp AVR910: Внутрисистемное программирование Оригинал: Application Note AVR910 фирмы ATMEL перевел: Sinbad &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp г.Самара. &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp 20.10.2000 г

  • Программирование любого AVR MCU установленного в готовом устройстве
  • Перепрограммирование Flash памяти данных и EEPROM памяти
  • Исключается панелька из устройства
  • Простой 3-х проводной SPI интерфейс программирования

Интерфейс программирования
&nbsp &nbsp &nbsp Для внутрисистемного программирования, программатор подключается к программируемому устройству как можно меньшим числом проводов. Для программирования любого AVR MCU в любом устройстве, используется простой 6-ти проводной интерфейс для подключения программатора к плате программируемого устройства. Рисунок 1, внизу, показывает необходимые соединения.

Рисунок 1. 6-ти проводное соединение программатора и программируемого устройства.
&nbsp &nbsp &nbsp Последовательный периферийный интерфейс (SPI) представляет собой 3 провода: последовательный тактовый сигнал (SCK), главный вход — подчиненный выход (MISO) и главный выход — подчиненный вход (MOSI). При программировании AVR, внутрисистемный программатор всегда функционирует как главный, а программируемое устройство как подчиненный.
&nbsp &nbsp &nbsp Внутрисистемный программатор (главный) формирует на линии SCK тактовый сигнал для связи. Во время каждого импульса на линии SCK, передается один бит от программатора (главный) к программируемому устройству (подчиненный) по линии MOSI. Одновременно, по каждому импульсу на линии SCK передается один бит от программируемого устройства (подчиненный) к программатору (главный) по линии MISO.
&nbsp &nbsp &nbsp Для обеспечения нормальной связи по трем SPI линиям, необходимо соединить земли на программаторе и программируемом устройстве (GND).
&nbsp &nbsp &nbsp Для входа и нахождения в режиме последовательного программирования, сброс программируемого AVR MCU должен удерживаться в активном состоянии (низкий уровень). Также, при стирании чипа, на сбросе должен быть сформирован импульс в конце цикла стирания. Чтобы упростить процедуру программирования, желательно предоставить программатору контроль над линией сброса программируемого MCU, для автоматизации этой процедуры используется четвертая управляющая линия (RES).
&nbsp &nbsp &nbsp Для программирования устройства работающего при любом разрешенном напряжении питания (2.7 — 6.0 V), программатор может питаться от программируемого устройства (Vcc). Это освобождает от необходимости, иметь отдельный источник питания для программатора. Аналогично, программируемое устройство может запитываться от программатора во время программирования, избавляя от необходимости питания устройства через разъем его постоянного источника питания, в течение цикла программирования.

&nbsp &nbsp &nbspТаблица 1. Контакты необходимые для программирования в системе.

КОНТАКТ НАЗВАНИЕ КОММЕНТАРИЙ SCK Тактовый сигнал Тактовый сигнал программирования, вырабатываемый внутрисистемным программатором (главным) MOSI Главный выход-подчиненный вход Линия передачи данных от программатора (главный), к программируемому MCU (подчиненный) MISO Главный вход-подчиненный выход Линия передачи данных от программируемого MCU(подчиненный) к программатору (главный) GND Общая земля Оба устройства должны иметь общую землю RES
Сброс программируемого MCU Для входа в режим последовательного программирования, сброс программируемого AVR MCU должен удерживаться в активном состоянии. Чтобы упростить процедуру программирования, внутрисистемный программатор должен контролировать сброс программируемого AVR MCU. Vcc Питание программируемого MCU Для программирования при любом разрешенном напряжении питания (2.7 — 6.0 V), внутрисистемный программатор может питаться от программируемого устройства. Аналогично, программируемое устройство может питаться через разъем внутрисистемного программирования во время цикла программирования.

Рисунок 2. Рекомендуемая схема разъема, для интерфейса внутрисистемного программирования

&nbsp &nbsp &nbsp Рисунок 2 показывает стандартный разъем, используемый всеми внутрисистемными программаторами фирмы ATMEL для подключения к программируемому устройству. Стандартный кабель снабжен 2 Х 3 ножечным разъемом, с расстоянием между ножками 100 mils.

АППАРАТНЫЕ ОСОБЕННОСТИ ПРОЕКТИРОВАНИЯ
&nbsp &nbsp &nbsp Для возможности программирования в системе AVR MCU, нужные выводы подчиненного MCU должны быть освобождены подчиненным устройством по требованию. Этот раздел описывает детально каждый вывод использоваемый при программировании.

GND
&nbsp &nbsp &nbspСистемному программатору и программируемому устройству необходимо работать с одинаковым опорным напряжением. Это достигается соединением земли программируемого устройства с землей программатора. Ни какие специальные требования к этому выводу не предъявляются.

RESET
&nbsp &nbsp &nbspПодчиненный AVR MCU войдет в последовательный режим программирования, только когда его линия сброса в активном состоянии (низкий уровень). При стирании чипа, линия сброса должна быть переключена в конце цикла стирания. Для упрощения этой операции, рекомендуется, чтобы сброс программируемого устройства контролировался внутрисистемным программатором. Немедленно, после активизации RESET , внутрисистемный программатор начнет обмениваться по трем предназначенным для SPI проводам — SCK, MISO и MOSI. Чтобы избежать конфликта выходов, активный RESET должен немедленно отключить любой чип, управляющий этими линиями в программируемом устройстве. Обратите внимание, что AVR MCU автоматически устанавливает все эти I/O выводы как входы, с отключенными подтягивающими резисторами, когда RESET активен. Чтобы избежать проблем, внутрисистемный программатор должен быть способен удерживать полный сброс программируемого устройства в течение цикла программирования. Программируемое устройство, никогда не должно пытаться управлять тремя SPI линиями, пока сброс активен. Если использование системного программатора для контролирования сброса программируемого устройства невозможно, сброс может управляться вручную. Программатор должен просить оператора формировать сброс, когда это необходимо. Процедура будет проходить безопаснее и быстрее, если внутри системному программатору позволят считывать значение с линии сброса, чтобы проверить, что пользователь выполняет требуемые задачи. С изменением в программном обеспечении, программаторы произведенные ATMEL, могут поддерживать этот недостаток управления. Однако этот способ не рекомендуется.

SCK
&nbsp &nbsp &nbspПри программировании в последовательном режиме, внутрисистемный программатор выдает тактовый сигнал на SCK ножке. Этот вывод всегда управляется программатором, и программируемое устройство не должно пытаться управлять этим проводом, когда сброс активен. Немедленно, после того как вывод RESET становиться активным, на этом выводе программатором формируется ноль. В течение первой фазы цикла программирования предохраняйте SCK линию от пульсаций, так как они будут причиной потери синхронизации с программатором. Когда синхронизация потеряна, единственный способ восстановить синхронизацию, это освободить линию сброса больше чем на 100 миллисекунд. Программируемый AVR MCU всегда будет устанавливать SCK вывод как вход без подтягивающего сопротивления, всякий раз, когда RESET активен. Смотри также описание линии RESET. Минимальные длительности низкого и высокого уровня для входного последовательного тактового сигнала определяются как:
&nbsp &nbsp &nbspНизкий: >1 XTAL1 период тактовой частоты
&nbsp &nbsp &nbspВысокий: >4 XTAL1 периода тактовой частоты

MOSI
&nbsp &nbsp &nbspПри программировании AVR в последовательном режиме, внутрисистемный программатор выдает данные для программируемого устройства на вывод MOSI. Этот вывод всегда управляется программатором, и программируемое устройство некогда не должно пытаться управлять этим проводом, когда активен сброс программируемого устройства. Программируемый AVR MCU всегда будет устанавливать MOSI вывод как вход без подтягивающего сопротивления, всякий раз, когда RESET активен. Смотри также описание линии RESET.

MISO
&nbsp &nbsp &nbsp Когда формируется сброс программируемого AVR MCU, вывод MISO устанавливается как вход без подтягивающего сопротивления. Только после того, как команда «Programming Enable» (Программирование разрешено) была правильно передана программируемому устройству, программируемый AVR MCU устанавливает свой вывод MISO как выход. Вначале, внутрисистемный программатор применяет свое подтягивающее сопротивление, для удержания MISO линии стабильной до тех пор, пока она не будет под управлением программируемого MCU.

V CC
&nbsp &nbsp &nbsp При программировании MCU, сигнала на выводах программатора, должны оставаться в пределах указанных в DC характеристиках. Для упрощения адаптации к любому напряжению питания программируемого устройства, программатор может получать необходимое питание от программируемого устройства. Это допустимо, так как внутрисистемный программатор будет потреблять очень маленькую энергию от программируемого устройства, обычно не больше 20 mA. Программатор представленный ATMEL работает именно в этом режиме. Как альтернатива, программируемое устройство может запитываться от программатора, через тот же разъем, который используется для связи. Это позволяет программируемому устройству быть запрограммированным без подключения внешнего источника питания.

&nbsp &nbsp &nbspТаблица 2. Рекомендации при разработке устройства поддерживающего внутрисистемное программирование

ВЫВОД РЕКОМЕНДАЦИИ GND Соединение земли программируемого устройства с землей внутрисистемного программатора RESET Позволяет внутрисистемному программатору сбрасывать программируемое устройство SCK Когда сброс программируемого AVR MCU активен, эта линия не должна управляться программируемым устройством. Перепады на этой линии после установки на RESET низкого уровня, будут причиной потери синхронизации с программатором. При программировании, колебания на этом выводе должны допускаться окружающей системой, когда сброс активен. MOSI Когда активен сброс программируемого AVR MCU, эта линия не должна управляться программируемым устройством. При программировании, колебания на этом выводе должны допускаться окружающей системой, когда сброс AVR активен. MISO
Когда активен сброс программируемого AVR MCU, эта линия должна иметь возможность быть выходом. При программировании, колебания на этом выводе должны допускаться окружающей системой, когда сброс AVR активен. Vcc Можно питать внутрисистемный программатор от программируемого устройства, для адаптации к любому допустимому программируемым устройством напряжению. В зависимости от максимально необходимого потребляемого программатором тока, проявляйте осторожность при использовании программатора.

Протокол программирования
&nbsp &nbsp &nbsp Немедленно, после того как RESET программируемого AVR MCU становиться активным, микропроцессор готов к входу в режим программирования. Внутренний Последовательный Периферийный Интерфейс (SPI) активирован, и готов к приему инструкций от программатора.
&nbsp &nbsp &nbsp Очень важно удерживать вывод SCK стабильным, поскольку один единственный перепад станет причиной потери синхронизации с программатором. После установки сброса в низкий уровень, ждать минимум 20 ms перед выдачей первой команды.

Формат команд
&nbsp &nbsp &nbsp Все команды имеют одинаковый формат, всегда состоящий из четырех байт. Первый бит содержит код команды, выбранной операции и памяти. Второй и третий биты содержат адрес выбранной ячейки памяти, Четвертый бит содержит данные, которые могут передаваться в любом направлении. Данные, возвращаемые программируемым устройством, обычно данные, посланные ему в предыдущем байте. В таблице 3 приведен пример, где передаются две последовательные команды. Обратите внимание, что все возвращаемые байты равны только что посланным. Некоторые команды возвращают один байт данных из памяти программируемого устройства. Этот байт всегда возвращается последним (байт 4).

Разрешение доступа к памяти
&nbsp &nbsp &nbsp После того, как вывод RESET становиться активным, доступна только команда «Programming Enable» для SPI интерфейса. Только эта команда открывает доступ к Flash и EEPROM памяти, и без этой команды любые другие команды будут игнорироваться. В таблице 3 (см. выше) приведен пример, где разрешается доступ к памяти в первой посланной команде.
&nbsp &nbsp &nbsp После того как команда «Programming Enable» была послана в программируемое устройство, разрешается доступ к энергонезависимой памяти микроконтроллера, в соответствии с текущими установками защитных Lock — бит. Программируемое устройство не подтверждает команду «Programming Enable». Чтобы убедиться, что команда была принята программируемым AVR MCU, мы можем попробовать считать код устройства, также и известный как сигнатура.

&nbsp &nbsp &nbspТаблица 3. Пример разрешение доступа к памяти и стиранию чипа.

ДЕЙСТВИЕ MOSI, ПОСЛАННЫЕ ПРОГРАММИРУЕМОМУ AVR MISO, ПРИНЯТЫЕ ОТ ПРОГРАММИРУЕМОГО AVR Разрешение программирования $9C 53 xx yy $zz 9C 53 xx Чтение кода устройства $1E по адресу $00 $30 nn 00 mm $yy 30 nn 1E

&nbsp &nbsp &nbspТаблица 4. Формат команд последовательного программирования

ИНСТРУКЦИЯ БАЙТ 1 БАЙТ 2 БАЙТ 3 БАЙТ 4 ФУНКЦИЯ Разрешение программирования 1010 1100 0101 0011 хххх хххх хххх хххх Разрешение последовательного программирования после установки низкого уровня на RESET Стирание чипа 1010 1100 100х хххх хххх хххх хххх хххх Стирание Flash, EEPROM и Lock бит Чтение Flash памяти программ 0010 H000 0000 aaaa bbbb bbbb oooo oooo Чтение H (старший или младший байт) данных o из памяти программ, слова по адресу a:b Запись Flash памяти программ 0110 H000 0000 aaaa bbbb bbbb i i i i i i i i Запись H (старший или младший байт) данных i в памяти программ, слова по адресу a:b Чтение EEPROM памяти 1010 0000 0000 0000 bbbb bbbb oooo oooo Чтение o данных из EEPROM памяти по адресу b Запись EEPROM памяти 1110 0000 0000 0000 bbbb bbbb i i i i i i i i Запись i данных в EEPROM память по адресу b Запись Lock бит 1010 1100 111x x21x хххх хххх хххх хххх Запись Lock бит, Установка бит 1,2 = «0» для программирования Lock бит Чтение кода устройства 0011 0000 хххх хххх 0000 00bb oooo oooo Чтение кода устройства o

Примечание:
a = адрес старших бит
b = адрес младших бит
H = 0 — младший байт, 1 — старший байт
o = выходящие данные
i = входящие данные
x = не имеет значение
1 = Lock бит 1
2 = Lock бит 2

Код устройства
&nbsp &nbsp &nbsp После того как команда «Programming Enable» была успешно прочитана через SPI интерфейс, программатор может прочитать код устройства, известный также как сигнатура. Код будет указывать производителя (ATMEL), семейство микроконтроллеров (AVR), размер flash в килобайтах, и тип микроконтроллера (напр. AT90S1200).Формат команды «Read Device Code» (считать код устройства), находящийся в таблице 4: «Формат Команд Последовательного Программирования», будет [$30, $XX, $adr, $code]. Допустимые адреса $0, $1 или $2. Таблица 5 показывает, каким должен быть ожидаемый результат.

&nbsp &nbsp &nbspТаблица 5. Допустимые кода устройства

&nbsp &nbsp &nbspТаблица 6 показывает, что код устройства иногда может читаться как $FF. Если это происходит, часть кода устройства не была запрограммирована в микроконтроллер. Это не обозначает ошибку, и эта часть может вручную устанавливаться программатором.

&nbsp &nbsp &nbspТаблица 6. Таблица идентификации типа микроконтроллера

&nbsp &nbsp &nbsp Код устройства $FF может быть также, если программируемое устройство не готово, и на MISO линии постоянно высокий уровень. Программатор может определить эту ситуацию, если другие команды, посланные программируемому устройству, возвращены как $FF.
&nbsp &nbsp &nbspЕсли программируемое устройство возвращает код производителя $00, семейство микроконтроллеров $01, и тип микроконтроллера$02, значит, установлены оба Lock — бита. Это защищает память от считывания, и возвращенные значения будут байтами только что полученными от программатора. Для стирания Lock — бит, необходимо выполнить команду «Chip Erase».

&nbspТаблица 7. Пример чтения кода устройства из AT90S1200, ожидается код $1E 90 01

Доступ к Flash памяти программ
&nbsp &nbsp &nbsp Когда семейство микроконтроллеров определено, прошло время начинать доступ к Flash памяти. Используя команду «Read Flash Program Memory» (чтение Flash-памяти программ), можно прочитать один байт содержимого Flash памяти за раз. Команда посылает адрес памяти ($0a bb) для выбора 16-битного слова, и выбирает младший или старший байт с помощью бита H ( 0 — младший, 1- старший байт). Байт, хранящийся по этому адресу, возвращается программируемым AVR MCU в байте 4.
&nbsp &nbsp &nbspОбычно, каждое 16 — битное слова во Flash содержит одну AVR инструкцию. Допустим, что инструкция, сохраненная по адресу $104 это ‘add r16,r17’, тогда код операции для этой инструкции будет сохранен как $0F01. Считывая последовательно адрес $104, ожидается, что результат, возвращенный в байте 4 будет $0F из старшего байта, и $01 из младшего. Данные на линиях MISO и MOSI будут выглядеть, как показано в таблице 8.

&nbsp &nbsp &nbsp Таблица 8. Пример чтения ‘add r16,r17’ как $0F01 из Flash памяти по адресу $104

&nbsp &nbsp &nbsp Flash память записывается командой «Write Program Flash Memory» ( запись Flash памяти программ). Команда посылает адрес памяти ($0a bb) для выбора 16-битного слова, и выбирает младший или старший байт с помощью бита H ( 0 — младший, 1- старший байт). Сохраняемый байт посылается в программируемый AVR MCU в байте 4.
&nbsp &nbsp &nbsp В отличие от параллельного программирования, здесь нет способа определить, когда цикл записи во Flash закончен. Программатору следует просто подождать 4 ms прежде, чем пытаться послать другую команду по интерфейсу. Если команда посылается, прежде чем закончился цикл внутренней записи, запись может быть нарушена.

&nbsp &nbsp &nbspТаблица 9. Пример запись ‘add r17,r18’ как $0F12 во Flash память по адресу $10С

Действие MOSI, посланные программируемому AVR MISO, принятые от программируемого AVR Запись $12 по адресу $10С, младший байт $60 01 0C 12 $zz 60 01 0C Ждать 4 ms Запись $0F по адресу $10С, старший байт $68 01 0C 0F $xx 68 01 0C Ждать 4 ms

Доступ к EEPROM памяти данных
&nbsp &nbsp &nbsp Используя команду «Read EEPROM Data Memory» ( чтение EEPROM памяти данных ), может быть прочитан один байт содержимого EEPROM за раз. Команда передает адрес памяти ($0a bb) для выбора расположения байта в EEPROM.

&nbsp &nbsp &nbsp Таблица 10. Пример чтения $AB из EEPROM по адресу $3F

Действие MOSI, посланные программируемому AVR MISO, принятые от программируемого AVR Чтение $AB по адресу $3F $A0 00 3F xx $zz A0 00 AB

&nbsp &nbsp &nbsp EEPROM записывается, как и Flash память, командой «Write EEPROM Memory» (запись EEPROM памяти). Эта команда выбирает байт для записи, также как и «Read EEPROM Memory», и передает данные, записанные в последнем байте посланным программируемому устройству. В отличие от параллельного программирования, здесь нет способа определить, когда цикл записи во EEPROM закончен. Программатору следует просто подождать 4 ms прежде, чем пытаться послать другую команду по интерфейсу. Если команда посылается, прежде чем закончился цикл внутренней записи, запись может быть нарушена.

&nbsp &nbsp &nbsp Таблица 11. Пример запись $0F из EEPROM по адресу $11

Действие MOSI, посланные программируемому AVR MISO, принятые от программируемого AVR Чтение $0F по адресу $11 $C0 00 11 0F $zz C0 00 11 Ждать 4 ms

Доступ к LOCK битам
&nbsp &nbsp &nbsp Для защиты содержимого памяти от случайной перезаписи, или от неправомочного считывания, могу устанавливаться Lock биты. Как видно из таблицы 12, память может быть также защищена от записи, или интерфейс программирования может быть полностью отключен от блока памяти, делая невозможным как считывание так и запись памяти микросхемы.

&nbsp &nbsp &nbsp Таблица 12. Режимы защиты Lock битами

Lock бит 1 Lock бит 2 Способ защиты 1 1 Нет защиты памяти 0 1 Запрещение дальнейшего программирования Flash и EEPROM памяти 0 0 Запрещение дальнейшего программирования и сравнения Flash и EEPROM памяти

&nbsp &nbsp &nbsp Lock биты не могут быть прочитаны, и их установка не может быть проверена программатором. Для проверки, что Lock биты, установлены правильно, следует попробовать изменить содержимое в EEPROM. Когда установлен Lock бит 1, содержимое памяти не меняется. Когда установлены оба lock бита 1 и 2, содержимое не может быть прочитано, и в результате будет возвращен младший байт адреса пропущенной команды. Установка только Lock бит 2 не будет иметь защитного эффекта, прежде чем защищать микросхему от считывания, она должна бать защищена от записи.
&nbsp &nbsp &nbsp Lock биты предотвращаю изменение содержимого памяти только при программировании. Ядро MCU может считывать Flash память программ и имеет доступ к EEPROM как обычно, независимо от установки Lock бит.
&nbsp &nbsp &nbsp Есть только один способ вернуть доступ к памяти после установки Lock бит, путем полного стирания чипа командой «Chip Erase» (стирание чипа). Lock биты будут сброшены в 1, отключая защиту, только после полного стирания всего содержимого памяти.

&nbsp &nbsp &nbsp Таблица 13. Пример установки Lock бит 1 для запрещения дальнейшего программирования

Действие MOSI, посланные программируемому AVR MISO, принятые от программируемого AVR Установка Lock бит 1 для запрещения программирования $AC FD xx yy $zz AC FD xx Ждать 4 ms

&nbsp &nbsp &nbsp После стирания чипа, Lock биты принимают значение 1, показывающее сброс бита. Хотя операция установки защиты называется «установка» Lock бит, но для этого в бит должно быть записано нулевое значение.

Операция стирания чипа
&nbsp &nbsp &nbsp Прежде чем новое содержимое сможет бать записано во Flash память программ, память должна быть стерта. Без стирания, возможно программировать нулевые биты во Flash памяти, устанавливая в некоторые 1. Стирание памяти выполняется командой «Chip Erase» (стирание чипа). Эта команда стирает все содержимое памяти, как Flash памяти программ, так и EEPROM.

&nbsp &nbsp &nbsp Таблица 13. Пример стирания всего содержимого Flash памяти программ и EEPROM

Действие MOSI, посланные программируемому AVR MISO, принятые от программируемого AVR Стирание чипа $AC 8x yy nn $zz AC 8x yy Ждать 10 ms Освободить сброс для окончания стирания

&nbsp &nbsp &nbsp После успешного стирания памяти, сбрасываются Lock биты. Этот метод гарантирует секретность данных в памяти, до того как все данные будут полностью стерты, и прежде чем доступ будет вновь предоставлен.
&nbsp &nbsp &nbsp После стирания чипа, все содержимое памяти будет считываться как $FF.
&nbsp &nbsp &nbsp Единственный способ завершить цикл стирания, временно освободить линию RESET

Простой недорогой внутрисистемный программатор
&nbsp &nbsp &nbsp Это примечание не обсуждает все аспекты внутрисистемного программатора. Вместо этого оно показывает, как может быть создан простой и дешевый программатор, используя только AT90S1200 и несколько дискретных компонентов. Этот программатор можно приобрести у ATMEL или у одного из её дистрибьюторов.
&nbsp &nbsp &nbsp Программатор подключается к любому последовательному порту любого PC. AT90S1200 не содержит аппаратную реализацию UART, но программно обеспечит полудуплексный UART используя таймер/счётчик 0 для синхронизации данных. AT90S1200 также полностью берет на себя заботу о программировании AVR, полностью программно, выполняя главный SPI.
&nbsp &nbsp &nbsp Схема программатора приведена на рис. 3. Питание AT90S1200 получает из программируемого устройства. Отрицательное напряжение необходимое для последовательной связи с РС через последовательный порт, сохраняется в С100, когда принимается единица (отрицательное напряжение на линии).
&nbsp &nbsp &nbsp Передающая линия питается этим отрицательным напряжением от С100, когда транзистор Q100 закрыт. Это посылает логическую единицу в линию передачи. Логический ноль (положительное напряжение) посылается открывающимся транзистором Q100, подсоединяя VCC (точнее V CC — 0.2 V) к передающей линии.
&nbsp &nbsp &nbsp Некоторые старые РС могут иметь последовательный порт, не определяющих напряжение ниже +10 вольт, как логический ноль. Однако, это не проблема для большинства существующих РС.

Рисунок 3. Недорогой внутрисистемный программатор

Кол-во Позиция Значение Компонент Точность Производитель Комментарий 1 C100 1 мкФх20 В CE1U020V 20% PHILIPS Тантаталовый конденсатор, SMD 1 C101 100 нФх50 В C08B100N 10% X7R MURATA Керамический конденсатор 2 D100, D101 75 В/ 100 мА BAS16 PHILIPS Импульсный диод, корпус SO-23 1 J100 9 выводов DSUB-9FSOL HARTING 9-штырьковый разьем D-SUB, мама 1 J кабель 6 выводов HEADER6FC HARTING 6 контактный разьем, мама 1 Q100 45 В/ 100 мА BC857C PHILIPS SMD NPN транзистор, корпус SO-23 1 Q101 45 В/ 100 мА BC847C PHILIPS SMD PNP транзистор, корпус SO-23 6 R100-105 4,7 кОм R08_4K7 1% KOA Резистор, 0,125 Вт, 0805 1 R106 1 мОм NOT_USED 1% KOA Резистор, 0,125 Вт, 0805 1 U100 SOIC — 20 AT90S1200-4SC ATMEL AVR микроконтроллер 1 XC100 4,0 МГц CSTCC4.00MG 0,5% MURATA/AVX Керамический резонатор, SMD 1 Корпус разъема 9 выводов D-SUB Корпус 0,5% AMP Корпус 9-ти штырькового разъема 1 Кабель 6 Проводов Плоский кабель HARTING Плоский кабель, 300 мм 1 Плата FR4/ 1,6 мм A9702.3.1000.A ATMEL Печатная плата

Про Ардуино и не только

Arduino as ISP - программатор из Ардуино

Есть у меня пара идей для будущих публикаций, но в них будет использоваться программатор. Поэтому сегодня я расскажу о том, как превратить Ардуино в ISP программатор, для чего он нужен и как им пользоваться. А в качестве примера будет описана процедура прошивки загрузчика в Ардуино.

Что такое ISP?

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

Существует 2 основных подхода внутрисхемного программирования:

  • С использованием программатора. В этом случае программатор работает напрямую с памятью микроконтроллера, самостоятельно размещая байты прошивки по нужным адресам. Микроконтроллер в этом процессе не участвует.
  • С использованием загрузчика. Загрузчик, он же бутлоадер (от английского bootloader) — это программа, записанная обычно в конце ПЗУ микроконтроллера, которая берет на себя функции программатора. При включении микроконтроллера управление сначала передается загрузчику. Он проверяет наличие определенных условий, сообщающих о необходимости перейти в режим программирования. Если условия не выполнены, то управление передается основной программе, в противном случае загрузчик принимает данные по заранее определенному интерфейсу и размещает их в ПЗУ. Таким образом микроконтроллер перепрограммирует сам себя.

Одной из важнейших особенностей Ардуино является возможность программирования непосредственно через USB порт, без дополнительного программатора. Сразу после включения Ардуино запускается загрузчик, который работает несколько секунд. Если за это время загрузчик получает команду программирования от IDE по последовательному интерфейсу UART, то он принимает и загружает новую программу в память микроконтроллера.

Использование загрузчика существенно упрощает процесс перепрограммирования микроконтроллера, что особенно полезно при отладке. Но за удобство приходится платить. Во-первых, загрузчик занимает часть ПЗУ и для программы пользователя остается меньший объем памяти. Во-вторых, загрузчик не может изменить Fuse-биты и Lock-биты (в отличие от программаторов). Ну и, конечно, не обойтись без программатора, если вы хотите обновить бутлоадер или загрузить его в чистый МК. Таким образом существует ряд задач, которые могут быть выполнены только с использованием программатора. Если же у вас нет аппаратного программатора, то вместо него можно воспользоваться Ардуино, о чем и будет рассказано дальше.

Arduino as ISP. Прошивка загрузчика в Ардуино.

Итак, мы решили превратить Ардуино в программатор. Для примера попробуем прошить загрузчик в целевую плату Ардуино. Сначала подготовим плату, которую будем использовать в качестве программатора. Для этого загрузим в нее скетч ArduinoISP, его можно найти в стандартных примерах:

ArduinoISP sketch file

Теперь подсоединим к ней плату, в которую хотим прошить загрузчик. При прошивке используются линии SPI (Serial Peripheral Interface — последовательный периферийный интерфейс). Выводы MOSI, MISO и SCK обеих плат должны быть соединены, а вывод SS Ардуино-программатора подключается к выводу Reset целевой платы. И еще 2 провода нужны чтобы запитать целевую плату. Также может потребоваться предотвратить автоматическую перезагрузку платы-программатора, для этого между ее выводами Reset и GND нужно установить электролитический конденсатор на 10мкФ. Сначала можно попробовать без конденсатора, если же прошивка не начнется, то попробуйте добавить в схему конденсатор. По моим наблюдениям конденсатор нужен при использовании дешевых Ардуино-клонов (без контроллера ATmega8u2) в качестве программатора.

Если мы работаем с двумя платами Arduino Uno, то схема их подключения может выглядеть следующим образом:

Arduino as ISP схема подключения

Если используются не Uno, а другие платы Ардуино, то перед подключением программатора к целевой плате необходимо уточнить расположение на них выводов MOSI, MISO и SCK. Их расположение для различных плат приведено ниже в таблице. Как вы можете видеть, не на всех платах Ардуино линии SPI мультиплексированны с цифровыми выводами, поэтому для подключения к данному интерфейсу необходимо использовать разъем ICSP. Ниже показан пример подключения Uno в качестве программатора к плате Nano через ICSP разъем.

Плата Ардуино MOSI MISO SCK Уровень
Uno, Duemilanove 11 или ICSP-4 12 или ICSP-1 13 или ICSP-3
Nano 11 или ICSP-4 12 или ICSP-1 13 или ICSP-3
Pro Mini 11 12 13 3.3В или 5В
Mega1280, Mega2560 51 или ICSP-4 50 или ICSP-1 52 или ICSP-3
Leonardo ICSP-4 ICSP-1 ICSP-3
Due ICSP-4 ICSP-1 ICSP-3 3.3В
Zero ICSP-4 ICSP-1 ICSP-3 3.3В
101 11 или ICSP-4 12 или ICSP-1 13 или ICSP-3 3.3В
Arduino as ISP схема подключения Nano
Подключение Uno в качестве программатора к плате Nano через ICSP

Обратите внимание на нумерацию выводов ICSP платы Nano: она начинается с правого нижнего угла. Поэтому на приведенной схеме Arduino Nano перевернута.

Теперь необходимо вернуться в Arduino IDE и изменить в ней параметры:

  1. В меню Инструменты > Плата выбираем вариант, соответствующий нашей целевой плате.
  2. В меню Инструменты > Программатор выбираем Arduino as ISP.

Резюмируя вышеописанное, выделим основные шаги для прошивки загрузчика с использованием Ардуино в качестве ISP программатора:

  • Запускаем Arduino IDE, открываем из примеров скетч ArduinoISP и загружаем его в плату Ардуино, которую будем использовать как программатор.
  • Подключаем к Ардуино-программатору целевую плату по приведенной схеме.
  • Меняем плату в Arduino IDE на целевую.
  • Выбираем в IDE программатор Arduino as ISP.
  • Записываем загрузчик в целевую плату командой из меню IDE.

Прошивка скетча с использованием Arduino as ISP

Еще один пример использования программатора — это загрузка скетча в целевую плату. Разумеется, это проще сделать привычным способом, подключив ее напрямую к компьютеру, но это может оказаться невозможным, например, при выходе из строя контроллера ATmega8u2/ATmega16u2 или преобразователя USB/UART. Если при этом основной микроконтроллер Ардуино остался рабочим, то мы можем прошить его, используя программатор. Для этого выполняем все шаги, описанные выше, но на последнем этапе вместо записи загрузчика необходимо:

  • Открыть в Arduino IDE интересующий скетч.
  • Загрузить скетч в целевую плату командой из меню IDE: Скетч > Загрузить через программатор.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *