Проект основан на исходниках от dioannidis (https://github.com/dioannidis/usbasp). Из него взята вся работа по обработке пакетов usb, но вырезаны и заменены функции программирования AVR по SPI протоколу на функции программирования по параллельному высоковольтному протоколу. Это позволяет работать с fuse битами и прошивками микроконтроллеров AVR, у которых заблокирована возможность прошивки по ISP (например отключен fuse бит SPIEN).
В проекте реализована работа с большинством видов микроконтроллеров AVR с различными способами программирования в высоковольтном режиме: AVR с полной шиной управления (это основная масса в корпусах от 28 ног и более, такие как Atmega48/8/88/168/328/8515/8535/16/32/128/2560 и т.д.), AVR с объединёнными сигналами программирования (такие как Attiny2313/2323 и т.д.), AVR с последовательным высоковольтным программированием (в осноаном в 8-ногих корпусах - attiny25/45/85 и т.д.).
Из функций реализовано: чтение ID, чтение и запись fuse и lock битов, стирание, чтение и запись flash, чтение eeprom, запись eeprom реализована только для AVR с последовательной шиной высоковольтного программирования, так как остальные используют постраничную запись eeprom, а USBAsp - побайтную. В планах ещё добавить функции работы с калибровочными байтами. Адаптация функций записи flash оказалось не тривиальной задачей, так как принципы записи в последовательном и параллельном режимах немного отличаются (в частности, при последовательном программировании младший и старший байты слова можно добавлять в страницу по отдельности, а при параллельном только вместе), поэтому пришлось добавить некоторые ухищрения и костыли в коде.
Также я не убирал функции программирования по шине TPI, но не проверял их работу, так как у меня нет соответствующих микроконтроллеров. Должно работать в обеих прошивках (параллельной и ISP).
Сам программатор построен на микроконтроллере Atmega16 (можно легко адаптировать проект под Atmega8535/32/64/644 и другие с таким же или большим количеством выводов, прошивка занимает 6 с небольшим Килобайт). Используются почти все свободные порты микроконтроллера. Дополнительно выведен разъём UART (использовался для отладки программы и разбора принципов работы USBAsp-а). Программатор имеет и разъём для параллельного высоковольтного программирования, и обычный ISP разъём, который используется для прошивки самого программатора, но может и использоваться для работы в ISP режиме, но не одновременно с параллельным. Чтобы перевести программатор в ISP режим, то есть сделать из него обычный USBAsp, необходимо заменить в нём прошивку (прошивка есть в папке software проекта). Для прошивки программатора необходимо установить перемычку "Reset" (см. схему). Значения fuse Битов прописаны в makefile.
Избыточное количество контактов разъёма программирования обусловлено тем, что у меня уже были готовые адаптеры для другого программатора, и я не хотел изготавливать новые. Схема подключения микроконтроллеров в различных корпусах есть в папке hardware. Подключение других моделей можно найти в datasheet.
На плате программатора реализован повышающий DC-DC преобразователь на 12 вольт на микросхеме mc34063a (можно использовать любой, в том числе готовый модуль, либо отдельно подавать внешнее напряжение 12 Вольт). Также на плате присутствуют два транзисторных ключа дляуправления напряжениями 12 Вольт (Reset/VPP) и 5 Вольт питания программируемого микроконтроллера.
В качестве софта исподьзуется обычная avrdude (консольная версия или любая оболочка, вроде SinaProg, Khazama, Avrdudes или любая другая на Ваш вкус). Скорость SCK в программаторе можно не выбирать, так как она ни на что не влияет. Работа ничем не отличается от обычного USBAsp-а.
Собрал прошивки для некоторых других моделей AVR. Работоспособность не проверял, должны работать при правильной установке Fuse (внешний кварц высокой частоты и обязательно отключить JTAGEN). Для AVR в бОльших корпусах все сигналы на тех же ножках.