Постоянное развитие микроконтроллеров означает, что сегодня мы можем решать довольно сложные задачи, используя более простые (с точки зрения пользователя) и более дешевые системы. Это хорошо видно на примере популярных микроконтроллеров семейства AVR, которые после приобретения компанией Microchip получили своеобразную вторую жизнь и сейчас проходят очередную модернизацию своих типов и возможностей. Однако за всю эту положительную путаницу также приходится расплачиваться - введением совершенно нового интерфейса программирования и отладки в виде интерфейса UPDI.

Достаточно упомянуть новые микроконтроллеры ATtiny series-0 и series-1, которые объединяют возможности, ранее зарезервированные для старших братьев из серии Xmega, включая систему событий, преобразователи АЦП и ЦАП и независимые от ядра периферийные устройства. Кроме того, они имеют большой объем флэш-памяти, RAM и EEPROM и доступны в небольших корпусах. Аналогичная ситуация и в случае семейств Xmega и Mega, где был введен ряд улучшений и функциональных расширений, а также ранее неизвестная периферия. Я говорю о таких системах, как MegaAVR-0 или AVR-DA.

Новый интерфейс программирования и отладки UPDI (Unified Program and Debug Interface) обладает уникальной особенностью использования только одного вывода микроконтроллера (UPDI/RESET) для программирования и отладки схемы. Производитель обеспечил соответствующую программную и аппаратную поддержку нового стандарта. Программное обеспечение Atmel Studio (и, следовательно, новая Microchip Studio) поддерживает все новые микроконтроллеры, а также поддержку нового недорогого программатора под названием MPLAB SNAP, который оснащен интерфейсом UPDI.

Однако ситуация усложняется при использовании других сред IDE, таких как Eclipse с подключаемым модулем AVR, который позволяет программировать микроконтроллеры с помощью приложения AVRdude. Верно, что в случае AVRdude и нового интерфейса UPDI мы можем использовать поддерживаемый им программатор Atmel ICE (ранее обновленный), но для многих радиолюбителей это очень дорогое решение и, следовательно, практически недоступное.

Значит, мы полагаемся исключительно на программное обеспечение Atmel? Должны ли мы отказываться от удобной среды разработки, которой, несомненно, является Eclipse? К счастью, нет. На помощь нам приходит сообщество Github, пользователь с ником ElTangas. Он подготовил специальную версию программы AVRdude (фактически новый файл конфигурации) и новый тип поддерживаемого программатора, помеченный как jtag2updi. Благодаря этому и с помощью простого программатора мы можем программировать большинство новых микроконтроллеров AVR, оснащенных интерфейсом UPDI, с помощью программы AVRdude.

В дополнение к программному обеспечению, необходимому на стороне ПК (AVRdude), необходим простой чип, который перекодирует протокол JTAGICE mkII, используемый на стороне ПК, в новый интерфейсный протокол UPDI. Автор программы решил сделать конструкцию на базе популярной платы Arduino Uno/Nano и микроконтроллера ATmega328P, но для людей, желающих поэкспериментировать с другими типами систем, с помощью которых может быть построен программатор, автор сделал доступным все исходное программное обеспечение в виде репозитория GitHub.

Сборка и эксплуатация

Блок-схема и функциональная схема цепи между программным обеспечением ПК, программатором, содержащим микроконтроллер ATmega328P, и программируемой системой с интерфейсом UPDI показаны на рисунке 1. На основе этой простой, но очень интересной блок-схемы я разработал простой программатор, который назвал sUPDI, схема которого показана на рисунке 2. Была создана очень простая микропроцессорная система в соответствии с предположениями пользовательского проекта ElTangas с некоторым расширением функциональности.

Рисунок 1, Блок-схема

Рассматриваемое расширение представляет собой простой интерфейс USB-Serial в виде хорошо известного чипа FT232RL, который вместе со стандартным драйвером VCP предоставляет виртуальный последовательный порт в операционных системах ПК.

Рисунок 2, Программатор UPDI для микроконтроллеров AVR - схема

Кроме того, как и в исходном решении, был реализован простой преобразователь напряжения с использованием резистора R2, который позволяет программировать микроконтроллер, питающийся от напряжения, отличного от напряжения системы ATmega88, которая является частью программатора. На последний из-за относительно высокой тактовой частоты 16 МГц подавалось 5 В от разъема USB. Дополнительно использовалась ПЕРЕМЫЧКА, с помощью которой можно установить уровень напряжения VTAR (3,3 В или 5 В) на выходе интерфейса UPDI программатора (разъем PRG). Конечно, сам интерфейс состоит только из одного вывода UPDI (и земли), но дополнительный вывод питания позволяет запитать запрограммированную систему от нашего программатора. Следует помнить о малой токовой эффективности этого источника напряжения, которая составляет всего 50 мА для напряжения 3,3 В и 100 мА для 5 В.

Вышеупомянутый резистор R2 играет в нашей системе еще одну роль, а именно служит для защиты программатора, если при этом была попытка передать передачу через обе системы (наш микроконтроллер ATmega88 и программируемую систему с интерфейсом UPDI). Встроенный светодиод VUSB используется для сигнализации напряжения интерфейса USB.

Монтаж и наладка

Схема сборки устройства sUPDI показана на рисунке 3. Очень тонкая печатная плата была разработана с подавляющим большинством SMD-компонентов, установленных только на ВЕРХНЕЙ стороне печатной схемы. Приступаем к применению устройства с пайки интегральных схем. Самый простой способ сделать это - использовать термовоздушную паяльную станцию и подходящие припои.

Рисунок 3, Программатор UPDI для микроконтроллеров AVR - плата

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

Затем мы припаиваем оставшиеся полупроводниковые элементы, затем резисторы и конденсаторы и, наконец, кварцевый резонатор, выводы VTAR (снабженные перемычкой), разъемы PRG и USB. Из-за уплотнения выводов интегральных схем перед первым подключением системы к источнику питания необходимо еще раз проверить качество соединений, чтобы избежать возможных коротких замыканий. Вышеупомянутый осмотр будет намного проще, если собранную плату промыть изопропиловым спиртом, чтобы смыть излишки флюса.

Использование

Напоследок несколько слов о работе устройства. Первый шаг - подключить программатор sUPDI к любому USB-порту ПК. Первое подключение должно сопровождаться установкой соответствующего драйвера виртуального последовательного порта VCP под именем COMx (где x - число), доступного порта, например, из панели управления Windows. Стоит запомнить имя нашего виртуального последовательного порта, так как оно понадобится для следующих шагов.

В случае, когда мы используем среду Eclipse и приложение AVRdude, нам понадобится следующее:

обновленная версия приложения AVRdude (на данный момент 6.3) и его конфигурационный файл (avrdude.conf), поддерживающий новый тип программатора (jtag2updi) и определения новых типов микроконтроллеров AVR,
новая версия инструментария из пакета Atmel с поддержкой новых типов микроконтроллеров, которые мы укажем в среде Eclipse.

Самый простой способ получить оба необходимых пакета - загрузить последнюю бесплатную версию приложения Arduino и программное обеспечение Atmel Studio (или Microchip Studio) в его последней компиляции. Первая среда предоставит нам последнюю версию приложения AVRdude, а вторая предоставит нам последнюю версию инструментальной цепочки, необходимой для использования среды Eclipse. Имея вышеупомянутое программное обеспечение, достаточно указать соответствующие пути доступа в среде Eclipse, и мы уже можем наслаждаться возможностью создания приложений для новейших микроконтроллеров AVR и их программирования с помощью приложения AVRdude.

Стоит отметить, что доступный список типов микроконтроллеров, для которых мы можем подготовить программное обеспечение с помощью среды Eclipse, не исчерпывает всех возможностей, предлагаемых новым набором инструментов и самой программой AVRdude. Это может быть связано с не последней и, к сожалению, не разрабатываемой версией плагина AVR. Что ж, мы не собираемся больше ничего делать с этим сейчас. Итак, вернемся к вопросу программирования новых микроконтроллеров с помощью нашего программатора, который является самым дешевым вариантом оборудования.

Само программирование с участием приложения AVRdude может быть выполнено из среды Eclipse, настроив соответствующий программатор (jtag2updi). Тем не менее, лучше выполнять эту операцию вручную, в консольном режиме, что я особенно рекомендую. Это не должно быть проблемой, потому что соответствующие команды очень просты, и мы можем легко запомнить эти несколько деталей. Итак, начнем с тестирования соединения AVRdude с запрограммированным микроконтроллером с помощью программатора sUPDI. Соответствующая команда (на примере процессора ATtiny1614) выглядит так:

avrdude -c jtag2updi -P comx -p t1614

где comx - это имя виртуального последовательного порта нашего программатора sUPDI.

Если все пойдет правильно, мы должны получить следующее (или подобное) сообщение:

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e9422 (probably t1614)

avrdude done. Thank you.

Затем вводим команду, позволяющую записать файл .hex во Flash-память микроконтроллера (в данном случае ATtiny1614), которая выглядит следующим образом:

avrdude -c jtag2updi -P comx -p t1614 -U flash:w:plik.hex

На этом этапе пришло время для команды, которая позволяет записать fuse-биты "fuse6" микроконтроллера (в данном случае ATtiny1614) в значение 0x00:

avrdude.exe -c jtag2updi -P comx -p t1614 -U fuse6:w:0x00:m

И аналогичная команда, но для чтения fuse-битов и записи их значения в HEX-файл:

avrdude.exe -c jtag2updi -P comx -p t1614 -U fuse6:r:"fuse6.hex":i

Это отличие от более ранних микроконтроллеров AVR, поскольку в последних моделях конфигурация оборудования хранится в большем количестве fuse-битов, чем в старых моделях.

Вот и все об основных командах. За подробностями обращайтесь к приложению AVRdude, описание которого содержит подробную информацию о требуемом синтаксисе команд. Я также рекомендую следить за репозиторием Github по адресу https://github.com/ElTangas/jtag2updi, потому что автор этой реализации может разместить в нем последнее программное обеспечение, поддерживающее новые функции.


Файлы к статье "Программатор UPDI для микроконтроллеров AVR"
Описание:

Файл прошивки микроконтроллера

Размер файла: 4.22 KB Количество загрузок: 20 Скачать