Мегаклон программатор avrisp mkii

Перепрошиваем Arduino ATMEGA16U2 в оригинальное ПО

Почти сделано. Нам нужно вернуть оригинальное программное обеспечение в ATMEGA16U2.

Отключите Arduino от питания и USB. Замкните на ICSP1 контакты 5-6. Подключите USB-кабель. Разомкните пины ICSP1 5-6.

Запустите программное обеспечение FLIP. Перейдите в: Пуск -> Все программы -> Flip -> Flip. Далее: Настройки -> Связь -> USB.

Нажмите «Открыть». Перейдите в: Файл -> Загрузить файл HEX.

Выберите файл:

С:\Program Files\Arduino\hardware\arduino\firmwares\atmegaxxu2\arduino-usbserial\Arduino-usbserial-atmega16u2-Uno-Rev3.hex

Нажмите «Выполнить».

Отсоедините USB-кабель и подключите его снова. Новое устройство USB должно быть распознано. Если драйвер не установлен автоматически, вы найдете его в: С:\Program Files\Arduino\drivers.

Перейдите в Диспетчер устройств: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли загружен драйвер. Вы должны увидеть его в: Ports -> Arduino Uno.

Теперь мы можем проверить любой скетч из примеров, типа Blink. Запустите программное обеспечение Arduino (Пуск -> Arduino).

Нажмите: Open (стрелка вверх) -> -> 01.Basics -> Blink.

Выберите COM-порт а: Инструменты -> Последовательный порт -> COM (выберите порт, на котором была распознана плата).

Нажмите значок «Загрузить» (стрелка вправо). Светодиод должен начать мигать.

Всё готово. Мы узнали как прошить Ардуино и успешно перепрограммировали ATMEGA328P без использования какого-либо внешнего программатора.

О программаторе USBTiny-MkII slim

USBTiny-MkII slim — компактный и быстрый USB-программатор для микроконтроллеров AVR, совместимый с фирменным программатором AVRISP-MKII от Atmel.
Немалая стоимость оригинала поспособствовала появлению его многочисленных клонов, и самым удачным из них, пожалуй, является именно USBTiny-MkII SLIM.
Устройство может программировать все 8-разрядные AVR-микроконтроллеры, обладающие возможностью внутрисхемного программирования (поддерживаются
интерфейсы ISP, TPI и PDI).

MkII обладает следующими возможностями:

  • Поддержка интерфейса программирования ISP (для микроконтроллеров ATTiny и ATMega)
  • Поддержка интерфейса программирования TPI (актуально для некоторых моделей ATTiny)
  • Поддержка интерфейса программирования PDI (для микроконтроллеров XMega)
  • Возможность запитать программируемый микроконтроллер от 3.3В или 5В (выбирается джампером)
  • Это быстрый программатор. 128 Кб флеша ATMega128 полностью считываются за 35 секунд (для сравнения, usbasp делает это за 70 секунд), и
    пишутся чуть медленнее (скорость записи ~15 Кб/сек)
  • Работа как с утилитой avrdude, так и с IDE AtmelStudio (которая видит программатор как родную железку)
  • Есть вывод CLK для воскрешения микроконтроллера с “испорченными” FUSE битами

Интерфейс TPI (Tiny Programming Interface) используется для программирования low-end микроконтроллеров Atmel серий ATtiny4, ATtiny5, ATtiny9, ATtiny10,
ATtiny20, ATtiny40. TPI по сути обычный USART с двунаправленной линией данных (TPIDATA), тактовым сигналом (TPICLK) и линией сброса (RESET).
Подробнее об этом интерфейса можно почитать в атмеловском документе AVR918. Также для этого документа доступны исходные коды прошивки
программатора TPI на основе микроконтроллера ATmega324P.

Про интерфейс PDI можно почитать в атмеловском документе AVR1612.

Сборка и прошивка

Сборка печатной платы не должна вызывать проблем. Стоит только заметить, что стабилизатора IC3 имеет специфическую цоколёвку и не получится
вместо его поставить распространённую микросхему вроде AMS1117. Тут надо ставить LF33, либо MCP1825S-3302ED, либо другой, совместимый по выводам.
Также не стоит пытаться заменять преобразователь уровней GTL2003 на более распространённый и дешёвый MAX2003 — с последним будет работать плохо и
нестабильно.

Светодиод LED1 можно поставить зелёного цвета свечения — он сигнализирует о подаче питания, LED2 горит при активности устройства
(т.е., при чтении/записи в МК), тут более уместен, например, красный цвет свечения.

Плата в сборе выглядит так:

Когда загрузчик на месте, программатор можно подключать к USB и загружать в него прошивку. Для этого в интернетах обычно предлагают использовать утилиту
FLIP, которая выложена на сайте Atmel, причём, разных версий и под разные ОС. Последняя верися 3.4.7 без встроенной явы не запустится на 64-битных ОС
выдав ошибку о том, что Java-виртуальная машина не найдена (хотя ява стоит). Аналогичная сборка со встроенной явой выдаст точно такую же ошибку.
Чтобы выяснить причину такого безобразия, я расковырял файл flip.exe и обнаружил внутри его jar-файл (он расположен почти в самом начале экзешника, и
легко ищется в hex-редакторе по сигнатуре ‘PK’ и последующему характерному заголовку jar-ки). Вырезав и запустив этот jar, я получил ошибку JNI
при загрузке динамических библиотек, которые оказались 32-битными. Вывод: дання утилита в принципе не будет работать в 64-битной Windows (причём, на
сайте Atmel об этом ни слова не сказано). Ещё можно скачать старую версию FLIP 2.4.6, которая написана на чистой яве и прекрасно работает везде,
в том числе и на 64-битных ОС. Но эта версия не поддерживает AT90usb162. Итог — про FLIP лучше навсегда забыть.

Atmel Studio умеет прошивать AT90usb162 «из коробки». Для этого идём в главное меню, Сервис -> Device Programming, или нажимаем Ctrl+Shift+P.
В появившемся окне выбираем инструмент «Atmel Mega DFU» и микроконтроллер AT90USB162:

Теперь перейдя на вкладку Memories, можем читать и писать прошивку и фьюзы:

Прошивка программатора основана на проекте AVRISP-MKII из библиотеки LUFA с открытым исходным кодом. Пара слов о её конфигурировании:

Частота кварца может быть 8 МГц или 16 МГц и задаётся в файле Projects/AVRISP-MKII/makefile, параметр F_CPU, по умолчанию там 16 МГц.

В файле конфигурации Projects/AVRISP-MKII/Config/AppConfig.h помимо конфигурации выводов МК есть парочка интерсных параметров:

Первый параметр включает возможность быстрого переключения между режимами Jungo (который для Avr/Atmel Studio) и LibUSB (для avrdude) драйвером в одной
прошивке. Для переключения режимов достаточно замкнуть джампер сброса (RST), после чего в системе появится отдельное устройство с другим
серийным номером. При этом программатор моргнёт светодиодами два раза, если находится в режиме Jungo и четыре раза, если включен режим LibUSB.
В обоих случаях потребуется установка соответствующих драйверов (это касается Windows, в Linux и MacOS libusb установлен “из коробки”).
Кстати, программатор запоминает последний выбранный режим, и после повторного подключения он стартует именно в нём. А ещё он запоминает
последнюю используемую частоту SCK. И всё это включается параметром . По умолчанию этот параметр включен.

Иногда после выхода очередного обновления для AtmelStudio возникали проблемы — программатор переставал поддерживаться, т.к. его версия
оказывается ниже требуемой. В этом случае надо раскомментировать параметр и указать в нём версию прошивки.
Например, у меня AtmelStudio 7 захотела прошивку версии не ниже 1.18, вместо обнаруженной 1.14. После раскомментирования параметра
и установки его в 0x18 проблема была решена. На всякий случай, я увеличил его (с запасом) до 0x30,
скомпилированную прошивку можно скачать в конце статьи.

AVRISP MkII для avrdude и Arduino

Программатор AVRISP MkII, а точнее его клон AVRISP XPII производства Waveshare Electronics, отлично работавший с Atmel Studio 6-7, и умеющий прошивать огромный список микроконтроллеров по протоколам ISP, PDI и TPI, отказался работать с avrdude и Arduino под Windows 10 x64, выдавая такое сообщение об ошибке:

Вот лог avrdude:

D:\avrdude\avrdude -v -p m328p -c avrispmkII -e -U flash:w:TransistorTester.hex

avrdude: Version 6.3, compiled on Feb 17 2016 at 09:25:53
 Copyright (c) 2000-2005 Brian Dean, //www.bdmicro.com/
 Copyright (c) 2007-2014 Joerg Wunsch

 System wide configuration file is "D:\avrdude\avrdude.conf"

 Using Port : usb
 Using Programmer : avrispmkII
avrdude: usbdev_open(): did not find any USB device "usb" (0x03eb:0x2104)

avrdude done. Thank you.

После небольшого разбирательства, проблема была найдена в драйвере, установленном Atmel Studio. Для работы AVRISP MkII с avrdude и Arduino требуется драйвер libusb-win32. Для его установки нужна утилита Zadig, скачать её можно на официальном сайте .

Выбираем AVRISP mkII и драйвер libusb-win32

Идём в Диспетчер задач и проверяем появилось ли новое устройство AVRISP mkII?

D:\avrdude\avrdude -v -p m328p -c avrispmkII -e -U flash:w:TransistorTester.hex

avrdude: Version 6.3, compiled on Feb 17 2016 at 09:25:53
 Copyright (c) 2000-2005 Brian Dean, //www.bdmicro.com/
 Copyright (c) 2007-2014 Joerg Wunsch

 System wide configuration file is "D:\avrdude\avrdude.conf"

 Using Port : usb
 Using Programmer : avrispmkII
avrdude: usbdev_open(): Found AVRISP mkII, serno: 0000B8080308
 AVR Part : ATmega328P
 Chip Erase delay : 9000 us
 PAGEL : PD7
 BS2 : PC2
 RESET disposition : dedicated
 RETRY pulse : SCK
 serial program mode : yes
 parallel program mode : yes
 Timeout : 200
 StabDelay : 100
 CmdexeDelay : 25
 SyncLoops : 32
 ByteDelay : 0
 PollIndex : 3
 PollValue : 0x53
 Memory Detail :

 Block Poll Page Polled
 Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
 ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
 eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
 flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
 lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

 Programmer Type : STK500V2
 Description : Atmel AVR ISP mkII
 Programmer Model: AVRISP mkII
 Hardware Version: 1
 Firmware Version Master : 1.24
 Vtarget : 4.8 V
 SCK period : 4.00 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: safemode: hfuse reads as DE
avrdude: safemode: efuse reads as FD
avrdude: erasing chip
avrdude: reading input file "TransistorTester.hex"
avrdude: input file TransistorTester.hex auto detected as Intel Hex
avrdude: writing flash (30614 bytes):

Writing | ################################################## | 100% 5.90s

avrdude: 30614 bytes of flash written
avrdude: verifying flash memory against TransistorTester.hex:
avrdude: load data flash data from input file TransistorTester.hex:
avrdude: input file TransistorTester.hex auto detected as Intel Hex
avrdude: input file TransistorTester.hex contains 30614 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 5.60s

avrdude: verifying ...
avrdude: 30614 bytes of flash verified

avrdude: safemode: hfuse reads as DE
avrdude: safemode: efuse reads as FD
avrdude: safemode: Fuses OK (E:FD, H:DE, L:FF)

avrdude done. Thank you.

AVRISP MkII с avrdude заработал! Zadig работает с Windows 7-10 x86/x64. Если нужна работа с Atmel Studio придётся переключиться на их собственный драйвер.

Политика конфиденциальности
Transmission для Windows

Корпус

Корпус я решил распечатать на 3d-принтере, для чего была спроектирована моделька. Т.к. для программирования через ISP-разъём обычно используются
10-проводные шлейфы, то для удобства работы решено было добавить ещё 10-пиновый ISP-разъём. Последний вынесен на заднюю стенку корпуса. Сам корпус
состоит из двух половинок, которые склеиваются между собой. Под джамперы, светодиоды и разъёмы программатора (и подписи к ним) сделаны окошки.

Вот так выглядит получившаяся 3d-моделька:

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

Корпус я печатал из ABS-пластика. Для придания ему большего эстетизма, корпус был отшлифован и обработан в ацетоновой бане. Т.к. под рукой
не было мелкой наждачки, шлифовал лезвием обычного канцелярского ножа, располагаемым перпендикулярно обрабатываемой поверхности. После того, как
поверхность распечатки стала более-менее ровной, детали были помещены на 30 минут в ёмкость с парами ацетона.

Вот как выглядел корпус до (снизу на фото) и после (сверху на фото) постобработки:

Плата в корпусе:

Для 10-пинового разъёма был вырезан небольшой кусок макетной платы (из стеклотекстолита) чтобы предотвратить продавливание контактов в будущем.
После впаивания разъёма в такую платку, они точно никуда не денутся. После чего разъём подпаивался проводками с обратной стороны платы программатора и
приклеивался суперклеем к нижней части корпуса. В завершении две половинки корпуса склеивались между собой.

Работа с программатором

При использовании avrdude надо в командной строке задать тип программатора так: или так .

При работе с AtmelStudio сначала необходимо установить драйвера. После первого включении программатора в USB-порт чего драйвера должны установиться
автоматически. Если этого не произошло, то надо вручную указать каталог, в который установлена AtmelStudio. Устройство успешно работает
как с AvrStudio4, так и с AtmelStudio6, как в 32-битный, так и в 64-битных версиях Windows.

Не знаю, на счёт более ранних версий, но AtmelStudio7 точно умеер работать с libusb-драйвером. Таким образом, можно смело переводить программатор
в режим libusb (замыканием джампера RST так, чтобы после перезапуска оба светодиода моргнули два раза одновременно) и забыть про режимы.

Если в будущем возникнет необходимость обновить прошивку MkII, то сначала замыкается джампер HWB, затем RST, после чего устройство
определяется студией как «Atmel Mega DFU».

Какие бывают микроконтроллеры Atmel

Начнем с самого популярного, для освоения микроконтроллеров в целом, – Atmel AVR. Его можно разделить на два направления:

  1. 8-битные микроконтроллеры.
  2. 32-битные микроконтроллеры.

Среди простых проектов для любителей электроники особую популярность снискала именно 8-битная часть семейства. Есть хорошая справочная литература «Микроконтроллеры AVR семейства classic фирмы Atmel», в которой описана вся архитектура, назначение отдельных узлов, регистров и прочего. Не стоит беспокоиться, что она посвящена уже устаревшему семейству AVR Classic – в наши дни оно вытеснено контроллерами Attiny и Atmega, хотя самая маленькая и быстрая модель – AT90S2313 выпускается и по сей день, слегка в модернизированном виде – Attiny 2313.

Современные семейства программно и функционально совместимы с более старыми, а переход с Classic на Mega и Tiny требует минимальных трудозатрат и изменений программного кода. Среди семейства особенную популярность заслужил микроконтроллер с маркировкой Atmega 328p, применяемый во многих популярных платах Arduino. Почти все они имеют небольшое количество энергонезависимой памяти с ограниченным числом циклов записи (до 100 000) – EEPROM.

Такая память нужна не для текущих вычислений, потому что быстро закончится её ресурс, а для хранения данных в долгосрочной перспективе. Энергонезависимость EEPROM памяти обеспечивает сохранность всей информации после обесточивания микроконтроллера.

Семейство Atmel Smart базируется на архитектуре ARM. Компания правообладатель ARM свободно продает лицензии на разработку контроллеров со своей архитектурой разным производителям, что ускоряет распространение и популяризацию первых. Стоит отметить яркого представителя – микроконтроллер AT91SAM3X8E, является сердцем Arduino DUE, 32-бита. Это позволяет очень легко начать знакомство с такой архитектурой и разработку устройств энтузиастам электроники. Atmel ARM по характеристикам превосходит большинство микроконтроллеров Atmel AVR

Семейство Atmel 8051 – основано на по-настоящему легендарной архитектуре. Intel 8051 является одним из первых массовых микроконтроллеров с широчайшей сферой применения. Позволяет проектировать высокопрецизионные устройства с огромным быстродействием, практически сравнимым с быстродействием схем на логике. В линейке есть микроконтроллеры, работающие на частотах в 100 МГц, при этом выполняющие 100 миллионов операций в секунду, а это отличные показатели для этой архитектуры. Вы можете добиться быстродействия в долях микросекунд.

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

Для программирования МК ваш код нужно компилировать, для этого есть множество программного обеспечения, пример одного из них – это компилятор IAR. Использование этого компилятора не ограничено одними лишь Atmel. 8051, AVR, AVR32, ARM – это лишь небольшой перечень из более чем 20 поддерживаемых архитектур.

IAR – это универсальное решение для программирования микроконтроллеров различного типа и уровня. Хотя компиляторов есть большое количество, например, WinAVR и CodeVision, но они не осуществляют компилирование программ для тех же АРМов и других архитектур.

IAR Embedded Workbench – полное название этой мощной рабочей среды. Применение ИАРА позволяет добиться меньше размера и большего быстродействия кода; он набирает всё большую популярность из-за своих огромных возможностей.

Пример экрана IAR Embedded Workbench

Работа с микроконтроллерами требует постоянного выполнения одинаковых действий, таких как компиляция, прошивка, сброс к заводским установкам; для автоматизации этих процессов нужно использовать Makefile – набор инструкций для компилятора, в нём записаны обозначения действий с файлами программного кода и другие команды.

Для отладки готовых программ был разработан Atmel ice. Он нужен для внутрисхемной отладки программирования и прошивки устройств. Имеет два разъёма:

  1. Универсальный AVR, поддерживающий любой интерфейс;
  2. ARM.

Судя по отзывам реальных пользователей, работает он быстрее аналогов – AVR Dragon, например, при этом захватывает архитектуру АРМов и имеет больше функций.

Установка программного обеспечения Atmel FLIP

На плате Arduino есть два микроконтроллера — ATMEGA328P (328P) и ATMEGA16U2 (16U2). Вы можете обновить прошивку 16U2, сделав его программатором AVRISP MKII, а затем использовать Atmel Studio для прошивки 328P.

Я пробовал разные варианты, но возникали разные проблемы. Многие рекомендации плохо работали в моем случае особенно в части перепрошивки загрузчика через ПО Arduino.

Переда началом прошивки Ардуино потребуется программное обеспечение Atmel (Microchip) FLIP для обновления прошивки внутри 16U2.

Скачиваем Flip с сайта Microchip — отсюда. Устанавливаем. Не должно возникнуть никаких проблем, просто следуйте инструкциям мастера установки.

Возьмите плату Arduino, отсоедините питание и USB. Замкните на ICSP1 пины 5-6 (16U2 RESET будет в низком состоянии).

Распиновка ICSP1

Выглядеть это будет так:

Далее подключите Arduino к USB. Разъедините пины на ICSP1 (5-6). В этот момент 16U2 переходит в режим DFU. Новое устройство USB должно быть распознано.

Если драйвер не устанавливается автоматически, установите его из: C:\Program Files\AtmelFlip3.4.7usb»

Перейдите в Диспетчер устройств: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли установлен драйвер. Он будет расположен под USB-устройствами Atmel -> ATmega16U2.

Способы связи компьютера и микроконтроллера Atmel

Чаще всего связь с МК устанавливается через COM-порт. На современных компьютерах и ноутбуках последовательного порта нет. Это вызывает необходимость использования USB-UART преобразователь, который распознаётся как виртуальный COM-порт.

Чтобы заливать прошивку в микроконтроллер, нужен либо этот преобразователь, либо специализированный программатор, например, AVRISP MKii – вы можете его собрать сами, но и в его составе есть микроконтроллер.

Происходит «каламбур»: для сборки программатора нужен программатор. Чтобы выйти из этой ситуации, используется специальный чип AT90USB162. Он, в свою очередь, при подключении к USB порту компьютера распознаётся как полноценное USB устройство, прошивку в которое можно загрузить с помощью утилиты Flip от Atmel.

Утилита Flip поддерживает программирование через следующие интерфейсы:

  • RS232;
  • USB;
  • CAN.

С помощью flip можно загрузить прошивку для программатора микроконтроллеров Атмела без использования COM-порта, а схема AVRISP mk II изображена ниже.

Для работы микроконтроллеров по интерфейсу UART (маркировка интерфейса – rs-232) в Atmel AVR выделен регистр UDR (UART data register), а настройки его работы хранятся в конфигурационных регистрах UCSRA, UCSRB и UCSRС. Настройки битов приемопередатчика Rx, Tx, кстати, хранятся в UCSRA.

Прошивка AVRISP MKII в Arduino ATmega16U2

Мы готовы перепрошить прошивку в 16U2.

Скачайте hex файл AVRISP MKII отсюда.  Отключите Arduino от USB-кабеля и питания. Замкните контакты 5-6 ICSP1. Подключите Arduino к USB. Разомкните выводы ICSP1 5-6.

Запустите программное обеспечение FLIP: Пуск -> Все программы -> Flip. Зайдите в: Настройки -> Связь -> USB. Нажмите «Открыть».

Перейдите в: Файл -> Загрузить файл HEX. Далее выберите LUFA-BOTH-AVRISP-MKII.hex и нажмите «Выполнить».

ATMEGA16U2 теперь AVRISP MKII и работает в режиме Atmel Studio. Arduino AVRISP MKII может работать в двух режимах: Atmel Studio или Avrdude. Ниже я буду говорить только о режиме Atmel Studio, так как у меня было много проблем с режимом Avrdude.

Установка Atmel Studio

Скачайте и установите Atmel Studio (включая драйверы) отсюда. После установки подключите Arduino к USB-кабелю. Оба светодиода (RX и TX) должны мигать два раза (это означает, что 16U2 находится в режиме Atmel Studio). Новое устройство будет распознано.

Установите драйверы. Если они не распознаются автоматически, вы найдете их в USB-драйверах: С:\Program Files\Atmel.

Перейдите в Диспетчер устройств, нажмите: Win + Pause -> Оборудование -> Диспетчер устройств. Проверьте, правильно ли установлен драйвер. Должно быть в Jungo Connectivity -> AVRISP MKII.

Вот теперь мы готовы прошить Arduino ATMEGA328P. Переходим к следующему шагу.

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

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

Adblock
detector