Идея этого устройства у меня возникла, когда я натолкнулся на исходники программатора 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.
Плата программатора при использовании большинства компонентов в 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. Также там имеются исходники. Все обновления буду выкладывать там.
На этом - всё. Если моя статья кому-то понравилась, не поленитесь поставить сердечко под статьёй.
Скачать список элементов (PDF)
Прикрепленные файлы:
- boards.rar (1686 Кб)
- firmware.rar (12 Кб)
- schemes.rar (37 Кб)
- source.rar (143 Кб)
Автор: AndrejChoo