Решил таки выложить это своё творение. Может кому пригодится.
Раньше программировал AVR с помощью супер-программы AvReal в связке с байт-бластером Альтеры на параллельном порте принтера компьютера. Это было очень хорошее и удобное решение. При использовании для написания софта компилятора IAR, можно было настроить вызов программирования контроллера прямо из оболочки IDE по одному клику, быстро и удобно. Однако время шло и при переходе на ноутбук возникла проблема - отсутствие параллельного порта принтера. Тут и возникла идея создания нового программатора, подключаемого к USB порту. Ознакомившись с доселе созданными вариантами (Prottoss, Petka/Tuxgraphics, Doper), решил сделать программатор с гальванической изоляцией, преобразованием уровней, возможностью питать целевое железо от USB порта и реализовать его на основе связки FT232 + ATMega8. Под это дело был написан софт (проект под IAR 5.11B). Софт старался написать просто, прозрачно и понятно (и никакого ассемблера), чтобы любой легко смог "заточить" его на свой вкус. Мне думается, что связка FT232 + ATMega8 является достаточно универсальным решением, которое позволяет реализовывать разное железо от простых вариантов до более сложных. Так что, внеся небольшие изменения в софт, можно быстро настроить его на свой вариант железа.
Железо.Основные пояснения по железу:
1. Изоляция достигается через интерфейс RS-232 и питание с помощью ADUM1201 и изолированного конвертера DC/DC со стабилизированным выходом на 5В типа AM1DR-0505S (я использовал P6CG-0505ELF).
2. Для преобразования уровня от целевого девайса использованы ADG3304 и ADG3301, которые обещают диапазон 1.15-5В. Программатор запитан от 5В питания, чтобы априори быть "больше или равно" чем питание целевого девайса. Поэтому ADG330х "развёрнуты" стороной с большим питанием в сторону программатора. При равном питании для понижения питания "правой" стороны, поставлен диод. Прада, это несколько повышает нижний предел уровней (на 0.25 В).
3. Для интерфейса программирования целевых кристаллов у контроллера ATMega8 использован SPI порт, что позволяет программировать и самому быть программируемым внешним программатором с того же разъёма ISP, надо только ещё перемычку XP5 на RESET переставить: позиция 1-2 соответствует работе программатором, позиция 2-3 - для программирования ATMega8 извне.
4. Программатор генерирует сигнал тактовой частоты (ISP clock) для целевого девайса (на всякий случай). Это нестандартная опция (нет в STK500). Цепь выведена на 3 вывод 10-ти контактных ISP разъёмов (обозначен как PULSE).
5. В контроллер заведены на входы АЦП напряжения питания программатора и целевого девайса (через делители). Правда в STK500 v2 в режиме AVRISP эти измерения (точнее напряжение целевого девайса) не запрашиваются. Но можно проверить встроенным терминалом (см. ниже в описании софта).
6. Наличие DC/DC позволяет питать напряжением 5В целевое устройство (до 1Вт за вычетом потребления самого программатора). Для этого надо замкнуть XP4.
7. На разъём XP6 выведен интерфейс RS-232 "TTL", для двух целей: можно подключать сотовые телефоны для перепрошивки (или ещё для чего?), а ещё надеялся, что можно будет через него зашить сам программатор (не имея другого программатора), подключив нужные связи на разъём ISP и использовав софт PonyProg2000 (аналогично как у Petka). При использовании этого интерфейса надо разомкнуть XP3. При работе программатором XP3 должна быть замкнута. Думаю, ясно почему.
8. Для ISP разведены как 6-ти, так и 10-ти контактные разъёмы с шагом 2.54 и 2 мм. Поэтому их 4-е штуки.
9. Т.к. STK500 v2 в режиме AVRISP , то частота кварца должна быть 3.6864 МГц.
10. Предусмотрены контакты XP1, XP2. для использования boot-загрузчика.
Схема приводится в первоначальном варианте (без исправлений). На основе схемы была сделана печатная плата и собрано пару девайсов:

Железо после опробывания потребовало пары доработок, которые на схеме не приведены. Поэтому привожу эти доработки здесь:
1. Резистор R11 (верхний вывод по схеме) надо оторвать и подключить напрямую к цепи VTG.
2. Выяснилось, что надо подтянуть линию MISO с "внешней" стороны к целевому питанию. Так что надо навесить резистор 22к между 1 и 5 выводами D5.
По проверкам железа.
Зашивал программатор с помощью программатора Prottoss-а (в варианте Мастер-Кит). Не понял почему, но шился только один из двух образцов. На втором не входил в режим программирования.
В то же время оба образца на ура прошивались на десктопном компьютере с помощью AvReal+BB(LPT).
Программаторы друг друга шить не хотят, видимо это связано с преобразователями уровней ("много" их получается в связке). И вообще эти преобразователи уровней мне как-то не очень понравились. Была замечена чувствительность к длине кабеля ISP, - покороче надо. Хотя идея реализации, а именно подключение программатора к USB через кабель, а не напрямую в разъём, позволяет ситуацию с коротким ISP легко преодолеть. Опять же из-за этих преобразователи уровней (как я понял, но досконально не разбирался, не было нужды) не удалось запрограммировать программатор с помощью PonyProg2000.
Проверить прошивание кристаллов с памятью более 64К не удалось за неимением таковых в наличии.
Остальное вроде работает.
Поэтому (резюмируя выше сказанное) в следующей версии железа (если я на неё пойду) наметились следующие основные идеи доработок:
1. Заменить преобразователи уровней на другие, а именно sn74lvc1t45. Может они будут лучше работать. Тогда, возможно, и диод не понадобится.
2. Вместо перемычки питания XP4 поставить 3-х контактную панельку и завести туда ещё землю. Тогда можно будет не только замыкать для подачи питания 5В на целевую схему, но и втыкать туда, например какой-нибудь LDO и получать из 5В другое требуемое напряжение.
3. Видимо, лучше всё же вывести на отдельный 6-ти пиновый разъём линии SPI интерфейса и RESET контроллера программатора напрямую (минуя преобразователи уровней). Это должно дать возможность зашить программатор без программатора через PonyProg2000.
Софт.Софт сделан под IAR 5.11B. Проект разбит на файлы, функциональность которых ясна из названия.
Реализован стандартный протокол STK500 v2 в режиме AVRISP (всё что надо поддержал). Помимо стандартного, реализован доморощенный терминальный протокол (для связи можно использовать любую терминальную программу в режиме 115200/8/без паритета/1стоп, т.е. так же как в STK500) для настройки параметров программатора, которые невозможно сделать через STK500. А именно:
1. Настройка частоты ISP clock в соответствии с формулой: ISP clock = 3686400/(2*N*(1+OCR)), где параметры N и OCR можно задать.
2. Настройка значений сопротивлений делителей, через которые заводятся для контроля напряжения питаний программатора и целевого девайса. Это для того, чтобы не заботиться о точности этих резисторов. Измерил тестером перед запайкой, а потом ввёл эти значения и всё будет измеряться точно. В софте "зашито" по-умолчанию значения 330 и 220 (это соответствует 33к и 22к) для обоих делителей.
Значения параметров запоминаются в EEPROM (в том числе и параметров протокола STK500).
Помимо этого терминальный протокол позволяет выдать измеренные значения напряжений, текущие значения параметров и версии софта (firmware).
Выбор протокола происходит автоматом - пока не заработал протокол STK500, работает терминальный протокол. Как только от компьютера получен байт, "понравившийся" протоколу STK500, так сразу терминальный протокол "отключится" и больше не будет работать (мешать) до нового включения программатора в порт USB.
Команды терминального протокола и их формат можно увидеть, подключившись терминалом к порту, на котором сидит программатор, и выдав в него символ '?' или 'h'. В ответ программатор выдаст список с пояснениями. Либо можно понять по тесту программы (терминал реализован в main.c).
Если нет желания использовать терминальный протокол, то можно его исключить, закомментировав строчку с определением TERMINAL_INTERFACE в main.c. Но тогда частота ISP clock останется фиксированной 921600 Гц (задаётся через определения в isp.c).
Фузы надо поставить так: BODLEVEL=0, BODEN=0, SUT=1, CKSEL=F, остальные непрошиты (как есть в новом контроллере).
Для облегчения "шития"

сделан AES boot загрузчик (взятый готовый и настроенный на нужную тактовую и скорость обмена). Всё "хозяйство" загрузчика лежит в поддиректории AES-Boot\. Загрузчик использует те же параметры порта (115200 и т.д.).
При использовании загрузчика сначала зашиваем его (boot.hex). Потом замыкаем XP1, XP2, втыкаем девайс в USB, размыкаем XP1, XP2, далее запускаем update (точнее upd_com1.bat или upd_com2.bat в зависимости от номера COM порта, либо переделаете на нужный).
При использовании загрузчика фузы надо поменять: должно быть BLB1=0, BOOTRST=0, BOOTSZ=0 (он сразу такой).
Я шил бут-загрузчик через AvReal+BB(LPT1) сразу со всеми фузами и локами командой:
Код
avreal32 +atmega8 -p1 -ab -e -l2 -v -w -fbodlevel=0,boden=0,sut=1,cksel=f,bootsz=0,bootrst=0,blb1=0 -c boot.hex
Гы-гы, хотя зачем лочить, коли тут всё выложил
Проект компиллируется в simple формат (Dimoniprog.raw). После этого надо применить POSTLINK для получения отдельных файлов кода (Dimoniprog_code.hex) и eeprom (Dimoniprog_eeprom.hex). Далее можно их шить.
Если используется бут-загрузчик (и boot.hex уже прошит в контроллер вместе с нужными фузами), то надо сначала из двух вышеупомянутых файлов сделать файл Dimoniprog.enc для программы "обновлятеля". Для этого в директории AES-Boot запускаем create.bat. После чего можно обновлять (upd_com1.bat или upd_com2.bat или другой порт).
В заключении несколько советов по настройке IAR Embedded Workbench IDE для облегчения жизни.
Для начала заменим родной postlink.bat (в C:\Program Files\IAR Systems\Embedded Workbench 5.0\avr\bin\) на прилагающийся. Не помню (давно было) для чего я это делал, видать не работало.
Добавим три команды через меню "Configure Tools..." (во всех случаях ставим флажок "Redirect to Output window"):
Код
Menu Text: Postlink
Command: $TOOLKIT_DIR$\bin\POSTLINK.BAT
Argument: $TARGET_FNAME$ $TOOLKIT_DIR$\bin\POSTLINK.EXE
Initial Directory: $TARGET_DIR$
Код
Menu Text: Create boot application
Command: $PROJ_DIR$\AES-Boot\create
Argument: -c cfg.txt -e $TARGET_DIR$\$PROJ_FNAME$_eeprom.hex -f $TARGET_DIR$\$PROJ_FNAME$_code.hex -o $PROJ_FNAME$.enc -l BLB11 BLB12
Initial Directory: $PROJ_DIR$\AES-Boot\
Код
Menu Text: Update booting device (COM1)
Command: $PROJ_DIR$\AES-Boot\update
Argument: $PROJ_FNAME$.enc -COM1 -115200
Initial Directory: $PROJ_DIR$\AES-Boot\
В последней команде надо уточнить номер порта или можно сделать несколько таких команд для разных портов.
Первую команду (Postlink) запускаем после компилляции софта для получения файлов кода (Dimoniprog_code.hex) и eeprom (Dimoniprog_eeprom.hex).
Две других нужны при использовании бут-загрузчика.
Вторую (Create boot application) запускаем вслед за первой для получения файла Dimoniprog.enc для программы "обновлятеля".
Третьей командой (Update booting device) запускаем обновление firmware программатора. Только надо не забыть перед запуском команды произвести манипуляции с перетыканием перемычки между XP1-XP2 с перевтыканием программатора в USB порт (выше писал).
-------------------------
Пока всё на этом. Устал набирать...