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

Содержание

Программатор USBasp

Сегодня речь пойдет о программаторе USBasp — популярном программаторе для микроконтроллеров фирмы Atmel серии AVR. Как заявляет его создатель на домашней странице проекта, USBasp работает на различных платформах (Windows, Linux, Mac OS X), не требует дополнительных компонентов и обеспечивает скорость программирования до 5 кбит/с. Кроме того его схема довольно проста и желающие могут собрать этот программатор самостоятельно. Либо можно заказать готовый на Aliexpress, как я и поступил. Обошелся он мне в $1.70 вместе с переходником на ICSP разъем.

Содержание

Подключение программатора USBasp к Ардуино

USBasp позволяет программировать AVR микроконтроллеры через последовательный интерфейс SPI. Для этого он имеет 10-пиновый разъем SPI. И подключение программатора к Ардуино или отдельному микроконтроллеру сводится к соединению их линий SPI и Reset.

В большинство плат Ардуино присутствует ICSP разъем, в котором сгруппированы выводы для внутрисхемного программирования: MOSI, MISO, SCK, RST, GND и VCC. Поэтому удобнее всего подключать программатор именно к ICSP. Здесь вам потребуется распиновка разъемов, она приведена ниже:

Распиновка разъемов USBasp (10pin) и ISP 6pin

Соедините соответствующие выводы программатора и Ардуино, должно получиться примерно так:

Подключение Arduino к USBasp

Конечно, возиться каждый раз с проводами не очень удобно, поэтому советую приобрести переходник ISP 10 pin to 6 pin. С ним всё становится гораздо проще.

Переходник ISP 10-pin to 6-pin

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

Плата Ардуино 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В

Не забывайте о том, что некоторые платы требуют питания 3.3В и для них нужно менять положение джампера JP1 на программаторе.

Драйвера для USBasp

Для работы с USBasp в Windows следует установить драйвера. Разработчик данного программатора рекомендует использовать драйвера Zadig, скачать их можно на странице http://zadig.akeo.ie/. Обратите внимание, начиная с версии драйвера 2.3 прекращена поддержка Windows XP и Vista. Для указанных систем используйте предыдущую версию драйвера: zadig_xp_2.2.exe для XP и zadig_2.2.exe для Vista.

У меня в системе установлены драйвера из этого набора, они подходят как для XP, так и для свежих версий Windows. Скачайте архив, распакуйте его и запустите InstallDriver.exe для установки драйверов.

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

При работе в Linux или MacOS X установка дополнительного ПО для USBasp не требуется.

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

Чтение и запись фьюзов Ардуино

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

avrdude -C ../etc/avrdude.conf -c usbasp -p m328p -U lfuse:r:-:h

  • -c programmer — псевдоним используемого программатора, в данном случае usbasp.
  • -p partno — тип микроконтроллера. Я считываю фьюзы из Ардуино Уно, в которой установлен микроконтроллер ATmega328p, поэтому в качестве partno указано значение m328p.
  • -U memtype:r|w|v:filename[:format] — комплексная опция для указания производимой с памятью операции (чтение. запись, проверка). -U lfuse:r:-:h означает, что требуется прочитать содержимое младшего байта конфигурации и вывести считанное значение на экран в щестнадцатеричном виде.

Результат чтения младшего конфигурационного байта Ардуино с использованием USBasp

Результат записи дополнительного конфигурационного байта Ардуино с использованием USBasp

Чтение и запись FLASH и EEPROM памяти Ардуино

В приведенных выше примерах команд для Avrdude в качестве параметра memtype использовались значения lfuse и efuse для доступа к конфигурационным байтам микроконтроллера. Данный параметр может принимать и другие значения, они приведены ниже:

  • calibration — байты калибровки RC-генератора;
  • eeprom — энергонезависимая память микроконтроллера;
  • efuse — дополнительный конфигурационный бит;
  • flash — FLASH память микроконтроллера;
  • fuse — фьюз-байт для микроконтроллеров с одним fuse-байтом;
  • hfuse — старший fuse-байт;
  • lfuse — младший fuse-байт;
  • lock — байт блокировки (ячейка защиты);
  • signature — три байта что обозначают сигнатуру чипа (device ID);
  • fuseN — байт с фьюзами для ATxmega чипов, N — целое число для каждого фьюза что поддерживается устройством;
  • application — область приложений во Flash памяти для МК ATxmega;
  • apptable — таблица приложений в области Flash памяти для устройств ATxmega;
  • boot — загрузочная область Flash памяти для устройств ATxmega;
  • prodsig — область с производственной сигнатурой (calibration) для устройств ATxmega;
  • usersig — область с пользовательской сигнатурой для устройств ATxmega.

Файл с содержимым FLASH памяти микроконтроллера будет создан в каталоге Avrdude. Либо можно прописать в команде полный путь к файлу.

Для записи в FLASH память содержимого файла flash_dump.hex можно использовать команду:
avrdude -C ../etc/avrdude.conf -p m328p -c usbasp -U flash:w:flash_dump.hex:i

Чтение EEPROM:
avrdude -C ../etc/avrdude.conf -p m328p -c usbasp -U eeprom:r:eeprom_dump.hex:i

Запись EEPROM:
avrdude -C ../etc/avrdude.conf -p m328p -c usbasp -U eeprom:w:eeprom_dump.hex:i

Запись загрузчика в Ардуино

  1. Соединяем USBasp с платой, в которую будем записывать загрузчик и подключаем программатор к компьютеру.
  2. Запускаем IDE Arduino.
  3. В меню Инструменты Программатор выбираем USBasp.
  4. В меню Инструменты Плата выбираем значение, соответствующее нашей плате.
  5. В меню Инструменты выбираем команду Записать загрузчик.

Если все сделано правильно, то в нижней части IDE появится сообщение об успешной записи загрузчика:


Источник: tsibrov.blogspot.com