Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на июль 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

USBasp для параллельного программирования AVR

Идея этого устройства у меня возникла, когда я натолкнулся на исходники программатора USBasp на GitHub. Покопавшись немного в исходных кодах, я подумал, а почему бы просто не переписать функции работы с программируемым микроконтроллером по SPI протоколу на функции программирования по параллельному высоковольтному протоколу. Это позволит работать с "залоченными" неправильно установленными fuse-битами микроконтроллерами с помощью привычных всем инструментов, основанных на avrdude да ещё и по USB! Тем более, что сама avrdude является, к тому же, кроссплатформенной утилитой, и под неё написано много графических оболочек на любой вкус.

За основу программатора я решил взять микроконтроллер Atmega16, так как он имеет достаточное количество портов ввода/вывода, стоит недорого, в пределах 1-1,5$ на aliexpress, при покупке партией в 5-10 штук и имеет достаточное количество памяти. При желании исходный код можно легко адаптировать под Atmega8535/32/64/644 без изменения схемы. Можно было бы использовать Atmega8/88/168/328, но тогда не хватило бы портов на джамперы и светодиоды.

Схема программатора также основана на схеме оригинального USBasp, только в отличии от него дополнительно на борту имеется DC-DC преобразователь напряжения (на микросхеме mc34063a, при отсутствии данной микросхемы можно использовать готовый модуль или вообще подать 12В отдельно с внешнего блока питания), ключи управления напряжениями 5В и 12В (на транзисторах Q1,Q2,Q3 и Q4) для программируемого микроконтроллера и разъём (P1) для программирования в параллельном режиме. Подключение к шине USB, джамперы, светодиоды и стандартный ISP разъём аналогичны таковым в оригинальном USBasp.

Схема USBasp для параллельного программирования AVR

Плата программатора при использовании большинства компонентов в SMD исполнении получилась очень компактной - 55х45 мм. 

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

На моей плате дополнительно выведен разъём сигналов UART. Это было необходимо для отладки прошивки и разбора исходного кода. Хотя исходники есть в свободном доступе, было не совсем понятно, как работают некоторые функции, а конкретно - чтение ID, чтение/запись fuse и lock битов. Поэтому при написании прошивки пришлось создавать сразу два проекта: первый - это обычный USBasp, адаптированный под Atmega16 и дополнительно с настроенным UART для получения отладочной информации, второй - это уже основной проект с функциями параллельного программирования. Первый проект был нужен, во первых, чтобы проверить в целом работоспособность исходников на Atmega16 (в частности - софтового USB), во вторых - понять логику работы avrdude (для этого пришлось расставлять отладочные "ловушки" с выводом информации по UART). Во втором (основном) проекте уже отлаживалась работа параллельного интерфейса.

Про два проекта я рассказал не просто так. Данная плата программатора может работать в двух режимах: как обычный USBasp через ISP разъём, так и в параллельном режиме. Но, к сожалению, не одновременно (хотя, при желании, можно это реализовать с некоторыми ограничениями, так как память Atmega16 заполнена примерно на 40%, возможно, когда-нибудь добавлю такую функцию). А на данный момент есть две отдельные прошивки.

В итоге была реализована работа с большинством видов микроконтроллеров AVR8 с различными способами программирования в высоковольтном режиме: AVR с полной шиной управления (это основная масса в корпусах от 28 ног и более, такие как Atmega48/8/88/168/328/8515/8535/16/32/128/2560 и т.д.), AVR с объединёнными сигналами программирования (такие как Attiny2313/2323 и т.д.), AVR с последовательным высоковольтным программированием (в корпусах менее 20 ног, в основном в 8-ногих - attiny25/45/85 и т.д.).

Из функций реализовано: чтение ID, чтение и запись fuse и lock битов, стирание, чтение и запись flash, чтение eeprom, запись eeprom реализована только для AVR с последовательной шиной высоковольтного программирования, так как остальные используют постраничную запись eeprom, а USBAsp - побайтную. Адаптация функций записи flash оказалось не тривиальной задачей, так как принципы записи в последовательном и параллельном режимах немного отличаются (в частности, при последовательном программировании младший и старший байты слова можно добавлять в страницу по отдельности, а при параллельном только вместе), поэтому пришлось добавить некоторые ухищрения и костыли в код.

Также я не удалял из прошивки функции программирования по шине TPI (но не проверял их работу, так как у меня нет соответствующих микроконтроллеров). Файлы прошивок будут прикреплены в конце статьи. 

Минусом программирования AVR в параллельном режиме - является необходимость подключения большого количества сигналов (около 20), в отличие от "6 проводков" ISP. Поэтому для разных корпусов нужны адаптеры. Я нарисовал схему подключения некоторых самых ходовых корпусов AVR:

Также в конце статьи, кроме основной платы программатора, я добавлю рисунки плат адаптеров в формате *.lay6.

Схемы подключения других моделей AVR можно посмотреть в datasheet в разделе "Memory programming", все datasheet-ы есть в открытом доступе.

Ну и последнее - это софт. В качестве софта используется обычная avrdude (консольная версия или любая оболочка, вроде SinaProg, Khazama, Avrdudes или любая другая на Ваш вкус). Скорость SCK в программаторе можно не выбирать, так как она ни на что не влияет. Работа ничем не отличается от обычного USBAsp-а. 

Работу программатора я проверил на нескольких микроконтроллерах (различными типами подключения) на Wingows x64 и на Linux aarch64. Прошивал микроконтроллер и устанавливал его в конечное устройство, всё работает. Также сама avrdude всегда верифицирует прошитые данные после записи, всё проходит без сбоев (кроме не реализованной записи eeprom, как я писал выше).

Данный проект также есть на GitHub. Также там имеются исходники. Все обновления буду выкладывать там.

На этом - всё. Если моя статья кому-то понравилась, не поленитесь поставить сердечко под статьёй. 

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
U1 МК AVR 8-бит
ATmega16
1 Поиск в магазине ОтронВ блокнот
U2 DC/DC импульсный конвертер
MC34063A
1 Поиск в магазине ОтронВ блокнот
Q1, Q3 Биполярный транзистор
MMBT3904
2 Поиск в магазине ОтронВ блокнот
Q2 Биполярный транзистор
КТ502Е
1 Поиск в магазине ОтронВ блокнот
Q4 Биполярный транзистор
BC856
1 Поиск в магазине ОтронВ блокнот
D1, D2 Стабилитрон
BZV55-B3V6
2 Поиск в магазине ОтронВ блокнот
D3, D4 Диод Шоттки
1N5819
2 Поиск в магазине ОтронВ блокнот
R1, R2 Резистор
68 Ом
2 Поиск в магазине ОтронВ блокнот
R3, R4 Резистор
10 кОм
2 Поиск в магазине ОтронВ блокнот
R5 Резистор
0.22 Ом
1 Поиск в магазине ОтронВ блокнот
R6 Резистор
180 Ом
1 Поиск в магазине ОтронВ блокнот
R7, RPUP Резистор
1.5 кОм
2 Поиск в магазине ОтронВ блокнот
R8 Резистор
12 кОм
1 Поиск в магазине ОтронВ блокнот
R9 Резистор
810 Ом
1 необходим подбор номиналаПоиск в магазине ОтронВ блокнот
R10, R11, R14, R15 Резистор
1 кОм
4 Поиск в магазине ОтронВ блокнот
R12, R16 Резистор
4.7 кОм
2 Поиск в магазине ОтронВ блокнот
R13, R17 Резистор
2.2 кОм
2 Поиск в магазине ОтронВ блокнот
R18-R20 Резистор
680 Ом
3 Поиск в магазине ОтронВ блокнот
C1, C2 Конденсатор18 пФ2 Поиск в магазине ОтронВ блокнот
C3-C5 Конденсатор0.1 мкФ3 Поиск в магазине ОтронВ блокнот
C6 Конденсатор10мкФх10В1 Поиск в магазине ОтронВ блокнот
C7 Конденсатор510 пФ1 Поиск в магазине ОтронВ блокнот
C8 Конденсатор100мкФх25В1 Поиск в магазине ОтронВ блокнот
X1 Кварцевый резонатор16MHz1 Поиск в магазине ОтронВ блокнот
Led1-Led3 Светодиодлюбой3 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 8
Я собрал 1 7
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 4.9 Проголосовало: 7 чел.

Комментарии (16) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
Piotr__1 #
А будут добавлены готовые бинарники под Atmega48/8/88/168/328/8515/8535/.../32/128/2560 и т.д.), для тех кому нечем собирать исходники?
Ответить
0

[Автор]
AndrejChoo #
Atmega8/48/88 и т.д. - нет, потому что надо переписывать работу с портами, у них просто ног меньше, надо комбинировать два порта на шину данных/адреса. А под 8515/8535/32/64/644 и больше - могу перекомпилировать. Хотя проект с makefile можно собрать и из консоли (make clean, затем make main.hex).
Ответить
0
Piotr__1 #
Можно, но если у кого проблемы с этим возникнут? ИМХО под большие МК все же стоит скопилированные хексы приложить к проекту.
Ответить
0

[Автор]
AndrejChoo #
Хорошо, убедили. Соберу. Только без проверки работоспособности. Выложу на GitHub. Ссылка есть в тексте.
Ответить
0
domen82 #
Выложи сюда - ГитХаб это помойка в которой хрен что найдешь потом.
Ответить
+1
Grenik #
Вещь! Как раз нужен такой. Жаль только, СМД вижу плохо. Сердечко заслужили без вопросов
Ответить
0
Alex3120 #
Программатор видит Atmega328P. 168, если только установлена перемычка "Скорость SCK". Ну это очень медленно.
Ответить
0

[Автор]
AndrejChoo #
Опишите подробнее. В каком режиме? параллельном или последовательном? Если в параллельном, то перемычка ни на что не влияет. Если в последовательном, значит фузы Ваших атмег настроены на внутренний генератор с делителем /8. Запрограммируйте фузы хотя бы на внутренний генератор на 8MHz, и будет шиться на больших скоростях. А так программируемый микроконтроллер просто не успевает. Это не зависит от usbasp-а.
Ответить
0
Alex3120 #
В последовательном. Фьюзы изменить не могу, потому что, программатор не видит атмеги, кроме восьмой. Обычный usbasp эти же атмеги видит. Спасибо.
Ответить
+1

[Автор]
AndrejChoo #
Ну так установите перемычку, измените фузы, а дальше без перемычки
Это же и есть обычный usbasp. Прошивка, которая последовательная, не отличается от заводского китайского аспа. У меня она (прошивка) точно также работает на 88 атмеге.
Ответить
0
Pauk #
Добрый день, а как на счёт замены микроконтроллера на другой без интерфейса USB, но с добавление конвертера USB -> UART?
Ответить
0

[Автор]
AndrejChoo #
Здравствуйте. Atmega16 и так без аппаратного USB, там используется софтовая библиотека v-usb.
Ответить
0
Pauk #
А нельзя использовать мега168?
Ответить
0

[Автор]
AndrejChoo #
Я уже писал выше, у неё мало ног, надо сильно перерабатывать прошивку.
Ответить
0
valeon #
На мк atmega128a можете собрать с фьюзами?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Бокс для хранения компонентов Квадрокоптер Syma X11
вверх