Показаны сообщения с ярлыком MKBoard. Показать все сообщения
Показаны сообщения с ярлыком MKBoard. Показать все сообщения

28.01.2012

MKboard в качестве программатора STK500

В комментах к посту про Angelino один из пользователей навел меня на интересную мысль: а действительно, как сделать из MKBoard программатор для другой платы? Для стандартных Duemilanova и Uno обычно берут скетч ArduinoISP и дальше действуют в соответствии с этой инструкцией. Но этот скетч совершенно не подходит для MKboard/metaboard, которые не имеют "честного" USB-порта.

Но оказывается - сделать из MKBoard программатор очень даже можно, причем получается практически полноценный STK500-совместимый программатор - AVR-Doper, который можно использовать с AVRStudio (разве что без высоковольтного последовательного программирования). Для этого берете этот хекс: mkboard_avrdoper.tar.gz, замыкаете джампер Upload, нажимаете на сброс и пишите:

avrdude -c usbasp -p m8 mkboard_avrdoper.hex

После завершения процесса вы получаете AVR-Doper в режиме HID.

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

Для программирования достаточно соединить MKBoard и программируемую плату (target) согласно этой таблице:

MKBoardTarget
RESETRESET
MOSIMOSI
MISOMISO
SCKSCK
GNDGND
+5BVCC

Если схема имеет собственное питание, последнее соединение (VCC и +5В) делать не нужно. 

Откуда брать эти сигналы - с гребенки ISP6 или колодки цифровых пинов - не суть важно, но если соединяете ISP6 у MKBoard и устройства - получается практически "один в один", за исключением сигнала RESET - его надо брать все-таки с цифровой колодки, digital10.



Далее, для прошивки hex-файла через avrdude можно использовать следующую строку:

avrdude -c stk500 -P avrdoper -p MCU -U flash:w:file.hex

где MCU заменяем на тип программируемого микроконтроллера (более подробно см. справку к avrdude - для ATmega8 - m8, для ATmega328P - m328p и т.д.).

Если требуется совместимость с AVRStudio - снимаем джампер Upload и переподключаем питание. Как вы уже догадались, в данной прошивке программатора этот джампер управляет режимом HID: замкнут = вкл, разомкнут = выкл (и вместо него CDC). Но учтите, что выбор срабатывает один раз при подключении питания - если нажмете на сброс, запустится бутлоадер, который будет делать совершенно другие вещи (представляться как usbasp и пытаться запрограммировать самого себя).

Можно ли программировать через DIP-сокет? Разумеется - можете его установить хоть на макетном поле, но при этом:
  • сделайте все вышеописанные соединения Target и MKBoard за исключением VCC и +5V;
  • подключите SUPPLY1 и SUPPLY2 (оба два) к шине VCC программируемого MCU;
  • подключите CLK к ножке XTAL1 программируемого MCU (замена кварцу и емкостям для создания тактовой схемы у target-а).


Два контакта под питание выглядят перестраховкой, но некое рациональное зерно в этом есть. Перед началом через SUPPLY подается питание на программируемый MCU, а по завершении - отключается. Так делает и оригинальный AVRDoper, только у него есть для этого специальная буферная микросхема, которой в MKBoard, увы, нет.

Во время программирования будет мерцать встроенный светодиод L, поскольку он оказался подключен к пину SCK (тактовые импульсы программирования). Оригинальный светодиод "ONLINE" для наглядности можно прикрутить к PC1 (или analog1 в нумерации Arduino), обязательно через токоограничительный резистор 1К - тогда он будет четко загораться в момент входа в режим программирования и при выходе из него.

В этой прошивке также можно использовать встроенный отладочный порт - если соединить  GND, RX и TX отлаживаемого микроконтроллера с пинами digital 0 и digital1 (разумеется, перекрестив), то можно с ним обмениваться через USB-подключение MKBoard  на скорости 19200 - читать и писать данные с помощью утилиты avrdebug.

Ну и напоследок - если программатор больше не нужен.... разбираете схему, замыкаете Upload, нажимаете сброс - и... плата снова готова к загрузке скетчей через ArduinoIDE! ;)

И, конечно же, скажем спасибо команде Objective Development, позаботившейся о том, чтобы код AVR-Doper компилялся не только под разные MCU и разные тактовые частоты, но и под разные схемы (оригинальная, usbasp, metaboard).

21.01.2012

MKBoard R3

Вышла третья ревизия платы MKBoard:


по сравнению с предыдущей версией, постарался учесть пожелания пользователей и последние веяния моды изменения в раскладке пинов Arduino:
  • на макетном поле теперь есть шины VCC и GND
  • раскладка пинов соответствует arduino pinout 1.0

Напоминаю, что MKBoard - это улучшенный аналог Metaboard, платы на основе программной реализации V-USB от Objective Development, построенный на одном чипе и способный при этом загружать скетчи по USB. 

Купить в собранном виде или комплектом деталей можно здесь. Подробная пошаговая инструкция по самостоятельной сборке - здесь.  

Адаптированный к Arduino 1.0 файл boards.txt - внутри этого архива:  mkbord_r3.tar.gz

Кстати, заметил особенность ArduinoIDE 1.0: после загрузки скетча она ругается на то, что используется старое firmware для USBasp - дескать, обновите до последней версии, а то не работает установка длительности SCK (точнее, это ворниг от avrdude: cannot set sck period. please check for usbasp firmware update). Можно смело игнорировать, все и так работает замечательно.

09.07.2011

MKBoard R1

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

Напомню, Metaboard - это Arduino-совместимая плата, где нет дополнительного USB-чипа. Функции по загрузке скетчей через USB исполняет сам же МК, при помощи библиотеки V-USB от Objective Development (программная реализация USB для МК ATMEL). В качестве bootloader-а используется USBaspLoader, имитирующий программатор USBasp. Это дает возможность загружать скетчи стандартным способом через старый добрый ArduinoIDE, правда придется немного модифицировать boards.txt. Поддерживаются ATmega168, ATmega328 и даже ATmega8, но из-за пухлого двухкилобайтного бутлоадера в последнем остается всего 6К - особенно не развернешься (хотя часто и этого бывает более чем достаточно).

К сожалению, Metalab ограничился выпуском версии Metaboard 1.1, где на тыльной стороне есть перемычки под пайку для свопа линий D+ и D- (связано с некоторыми фичами и особенностями V-USB). К счастью, существует несколько производных проектов, самый документированный - это MHVBoard. Я просмотрел на все это безобразие и решил принять в нем участие создать собственный кит с печатной платой и гордо назвать его MKBoard R1. 



Чем MKBoard отличается от metaboard?
  • добавлен светодиод L на выводе 13. Думаю, все, кто работали с Arduino / Freeduino согласятся, что он в 85% случаев оказывается полезным;
  • для защиты от перегрузки по питанию от USB, добавлен самовосстанавливающийся предохранитель 0,5А. Современные материнские платы почти всегда им снабжаются, но а) так надежнее б) о коротком замыкании при малейшем подозрении можно узнать просто прикоснувшись к этому фьюзу пальцем: он будет горячим;
  • добавлена вилка ICSP - и это не только для программатора: хорошие версии Shield-плат, например EtherSD Shield, именно оттуда берут сигналы SPI;
  • добавлены дополнительные дублирующие отверстия для цифровых пинов, расположенные строго на сетке 2,54 мм. Это значит, что при желании можно обойтись кусочком обычной макетной платы, а не искать протошилд;
  • все сигналы имеют двойную нумерацию (для Arduino и для ATmega), а также маркировку с обоих сторон платы.
Думаю, излишне рассуждать о том, что наличие печатной платы с маской на порядок снижает ошибку при сборке даже для опытных ЛУТостроителей. Тем более, что есть пошаговое руководство с картинками.

ОК, допустим, что плата MKBoard / MHVBoard / Metaboard собрана, что дальше?

Шаг 1. Модификация ArduinoIDE

Добавьте секции MKboard в ArduinoIDE. Проще всего будет скачать готовый архив и развернуть его в каталог hardware - содержимое файла boards-add.txt можно добавить в существующий boards.txt или воспользоваться уже объединенным boards-0022.txt. 

Шаг 2. Прошивка МК бутлоадером

Разумеется, МК в составе кита уже прошит, но если вы все собираете самостоятельно - придется запастись программатором и некоторым количеством терпения. 

Найдите соответствующий вашему микроконтроллеру hex-файл и прошейте его в МК (можно пользоваться фьюзами из файла boards-add.txt). Пример для avrdoper в USB-HID режиме:

ATmega8:

avrdude -c stk500v2 -P avrdoper -p m8 -B 3 -e -u -U lock:w:0x3f:m -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m
avrdude -c stk500v2 -P avrdoper -p m8 -B 1.1 -U flash:w:atmega8_16MHz.hex -U lock:w:0x0f:m

ATmega168:

avrdude -c stk500v2 -P avrdoper -p m168 -B 3 -e -u -U lock:w:0x3f:m -U hfuse:w:0xd6:m -U lfuse:w:0xf7:m -U efuse:w:0x00:m
avrdude -c stk500v2 -P avrdoper -p m168 -B 1.1 -U flash:w:atmega168_16MHz.hex -U lock:w:0x0f:m

ATmega328:

avrdude -c stk500v2 -P avrdoper -p m328p -B 3 -e -u -U lock:w:0x3f:m -U hfuse:w:0xda:m -U lfuse:w:0xf7:m -U efuse:w:0x03:m
avrdude -c stk500v2 -P avrdoper -p m328p -B 1.1 -U flash:w:atmega328_16MHz.hex -U lock:w:0x0f:m


Если программатор поддерживается ArduinoIDE, то можно попробовать прошить через нее. Сначала надо выбрать тип платы, затем - порт, а затем зашить МК через Tools > Burn bootloader > w/ YourProgrammer.

Шаг 3. Установка драйвера

Пользователям Windows надо установить драйвера libusb и соответствующий inf-файл для USBasp, скачать их можно здесь. 

Linux и MacOS поддерживают режим libusb на уровне ядра и, скорее всего, у вас он уже включен. Однако, в Linux иногда встречается проблема с доступом к устройству по USB, когда недостаточно прав. Чтобы не запускать ArduinoIDE из-под рута, добавтьие правило в udev и  перезапустите его:

SYSFS{idVendor}=="16c0",  SYSFS{idProduct}=="05dc", MODE="0660", GROUP="users"

разумеется, вы должны состоять в группе users, при необходимости это легко исправить:

sudo adduser [username] users
restart udev

Шаг 4. Подключение и проверка

Подключите MKBoard к USB-шине, замкните джампер Upload и нажмите кнопку сброса. Светодиод L начнет помаргивать, сигнализируя  о готовности принять скетч по USB. Находиться в этом состоянии плата может неограниченнго долго - пока вы не снимите джампер, либо пока не переподключите USB.

Выберите из примеров старый добрый blink и загрузите его привычным способом - Ctrl+U. Если все нормально - светодиод L начнет мигать. 

Как быть, если все-таки что-то пошло не так?

Пользователи Linux могут поинтересоваться о наличии устройства с VID = 16c0 и PID = 05dc через lsusb, а пользователи Windows - через диспетчер устройств.  В случае проблем, проверьте еще раз, что:
  • вы правильно спаяли плату - при подключенной шине USB и в положении джампера JP5 1-2, прикоснитесь к предохранителю F1 - он не должен быть горячим;
  • вы правильно запрограммировали ATmega, особенно фьюзы;
  • вы вставили ATmega правильной стороной, соблюдая ключ;
  • вы действительно замкнули джампер "Upload" (который рядом с кварцем);
  • вы нажали после этого на сброс.
Вот, собственно, и всё - дальше можно работать, как с обычным Arduino. Единственное отличие - для загрузки скетча надо нажимать сброс. Джампер "Upload" трогать необязательно - после загрузки USBasploader передает управление скетчу и получит вновь управление только после нажатия на кнопку сброса (подача питания - это другое событие).

И учтите - USB-соединение активно только во время работы бутлоадера, поскольку тот содержит в себе V-USB. Загруженному скетчу, к сожалению, это недоступно - весь обмен по Serial будет происходить через пины RX и TX (или digital1 и digital0), которые ни к чему не подключены.

В заключении по поводу бутлодера: я его немного модифицировал, чтобы он моргал светодиодом L при активизации. Если вы взяли стандартный USBasploader, то там никакой "цветомузыки" не ожидайте.

Исходники проекта можно скачать у меня или на github:  https://github.com/mk90/MKBoard.

Готовую плату MKBoard или кит для самостоятельной сборки можно купить здесь.