Мегаклон программатор avrisp mkii
Содержание:
- Перепрошиваем Arduino ATMEGA16U2 в оригинальное ПО
- О программаторе USBTiny-MkII slim
- Сборка и прошивка
- AVRISP MkII для avrdude и Arduino
- Корпус
- Работа с программатором
- Какие бывают микроконтроллеры Atmel
- Вопросы программирования микроконтроллеров
- Установка программного обеспечения Atmel FLIP
- Способы связи компьютера и микроконтроллера Atmel
- Прошивка AVRISP MKII в Arduino ATmega16U2
- Установка Atmel Studio
Перепрошиваем 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. Его можно разделить на два направления:
- 8-битные микроконтроллеры.
- 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. Он нужен для внутрисхемной отладки программирования и прошивки устройств. Имеет два разъёма:
- Универсальный AVR, поддерживающий любой интерфейс;
- 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. Переходим к следующему шагу.