Перейти к содержанию
    

Программатор Dimoniprog (USB, STK500v2 совместимый, c изоляцией, ПУ, питанием target)

Решил таки выложить это своё творение. Может кому пригодится.

Раньше программировал 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-загрузчика.

 

Схема приводится в первоначальном варианте (без исправлений). На основе схемы была сделана печатная плата и собрано пару девайсов:

fc26e95e513e.jpg

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

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

Гы-гы, хотя зачем лочить, коли тут всё выложил :07: :)

 

Проект компиллируется в 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 порт (выше писал).

-------------------------

Пока всё на этом. Устал набирать...

postlink.rar

Dimoniprog.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет. Серьезная разработка, респект. Для меня сейчас не актуально, потому не вникал, но с включением FT232RL есть замечание: по даташиту (Version 2.01, chapter 6.3, "USB Bus Powered with Power Switching Configuration") вывод управления полевиком (CBUS3, он-же PWREN#) должен быть подтянут к плюсу USB через 10К. Там и текстом:

"One of the CBUS Pins should be configured as PWREN# in the internal FT232R EEPROM, and used

to switch the power supply to the external circuitry. This should be pulled high through a 10 k

resistor."

Ты его сознательно не ставил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет не сознательно! Спасибо за уточнение.

Раньше этого резистора не было, в новом даташите появился.

Поскольку я использую FT232 давно (как они появились), то так и "тяну" эту обвязку. В новом даташите не обратил внимания.

Впрочем, я не понял зачем оно надо. Работает нормально и без него.

Ну, раз хозяин пишет, что надо, значит надо добавить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а сайтец у Вас есть ? Целесобразно такие проекты отдельно публикануть, а то тут то есть, то авария сервера. Может потеряться а потом всплыть. По собственному печальному опыту знаю - некоторые проекты больше семьдесят двух раз переделываются не понятно по какой причине

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может, пригодиться :

http://ukpyr.narod.ru/prog_avr910_iso_03.htm?lang=rus

 

несколько советов :

- использовать контроллер mega88v - можно обойтись без преобразователей уровня.

- выходной разъем лучше сделать один, и вывести на него дополнительно RX/TX, генератор для подачи частоты на процы без кварцев. а выход на разные разъемы сделать разными шнурками.

- добавить джамперы для сброса внешнего/внутреннего контроллеров, в таком варианте можно использовать RX/TX для программирования других процев по посл.каналу.

- использовать стаб. LP298xLV на 1.8В - трехконтактным джампером перекрывается диапазон 1.8, 3.3, 5В. Выбор напряжений можно сделать четырехконтактным джампером - для использования внутр/внешн. питания, подавать питание на таргет.

- генератор высокого напряжения для HV serial программирования

Изменено пользователем ukpyr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

- использовать контроллер mega88v - можно обойтись без преобразователей уровня.

Это если питание меги такое же как у целевого? Т.е. питать от целевого? Ну у меня же наоборот желание сделать было - питать целевой от USB. Либо я сию глубокую мысль не понял.

- выходной разъем лучше сделать один, и вывести на него дополнительно RX/TX, генератор для подачи частоты на процы без кварцев. а выход на разные разъемы сделать разными шнурками.

- добавить джамперы для сброса внешнего/внутреннего контроллеров, в таком варианте можно использовать RX/TX для программирования других процев по посл.каналу.

Разъёмы ISP стоят в стандартной распиновке, а не в доморощенной. Так что если и выводить изолированные RX/TX, то на какой-то другой разъём.

Сделать переход от 2.54 мм шага в 2 мм, как и с 10 на 6 контактов красиво невозможно. Поэтому я развёл все 4-е варианта отдельно. В конце концов я же никого не призываю делать так же. Железо приведено в общем как пример реализации программатора в связке USB->FT232->ATMega->ISP. Так что не меняя софт можно все вышеуказанные вариации сделать.

- генератор высокого напряжения для HV serial программирования

А оно надо?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну у меня же наоборот желание сделать было - питать целевой от USB. Либо я сию глубокую мысль не понял.
для этого и нужен регулируемый стабилизатор на 1.8-5В. мега88v позволит избавиться от преобразователей.
Изменено пользователем ukpyr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для этого и нужен регулируемый стабилизатор на 1.8-5В. мега88v позволит избавиться от преобразователей.

Да, но хорошо бы ещё избавиться от ограничения минимального питания 2.7В у изоляторов ADUM1201.

 

Хотя если питать ADUM1201 с обеих сторон от 5В (вторую сторону от DC/DC), то можно между ADUM1201 и мегой поставить всё-таки преобразователи уровней (sn74lvc1t45), а мегу со всем остальным уже питать от разных напряжений, получаемых от 5В DC/DC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, но хорошо бы ещё избавиться от ограничения минимального питания 2.7В у изоляторов ADUM1201.

ADUM можно запитать от 5В из преобразователя, TX ADUMа развязать диодом, RX - через согласующий транзистор

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну а если целевое питание тоже 5В? Как-то эти диоды и транзисторы выглядят не очень по-сравнению с 74lvc1t45. Если предлагалось RX/TX тоже выводить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос: cкажите, pls, а земли, случайно, соединять не нужно ? В смысле, через емкость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем?

 

а сайтец у Вас есть ? Целесобразно такие проекты отдельно публикануть, а то тут то есть, то авария сервера. Может потеряться а потом всплыть. По собственному печальному опыту знаю - некоторые проекты больше семьдесят двух раз переделываются не понятно по какой причине

Пока не делал. Решил сначала среди своих так сказать "перетереть". Поскольку подразумеваются возможные переделки железа с целью улучшения. А дальше видно будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А дальше видно будет.

четыре раза переехал - один раз сгорел это на бытовом уровне у нас один раз переехал - сгорел четыре :-) , я периодически в безобидной ситуации обнаруживаю потерю 10 процентов файлов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Dimonira, можно тупой вопрос?

 

Я не въеду, зачем нужны самопальные программаторы (ваш, PROTOSSa, avreal), если имеется стандартный AVR ISP-2 от Atmela. Он гарантированно будет поддерживаться, работает со всеми процами, USB и т.д. При этом он относительно недорог.

 

PS Я ни сколько не пытаюсь умалить ваши результаты - как минимум вы получили массу опыта и респекта :), просто интересно - имеет ли все это практическое применение? :beer:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не въеду, зачем нужны самопальные программаторы (ваш, PROTOSSa, avreal), если имеется стандартный AVR ISP-2 от Atmela. Он гарантированно будет поддерживаться, работает со всеми процами, USB и т.д.

На счёт последнего утверждения я бы не был так категоричен. А вот случись что, свой всегда можно переделать. Помимо всего прочего, свой можно сделать не только для Атмелов, но и вообще для разных других девайсов, - флешей, еепром, сотовых телефонов и т.п. Над своим имеешь полный контроль и владение.

При этом он относительно недорог.

Ну, это кому как. Вообще я бы сказал (не конкретно про ISP программатор), что средства для разработки стоят дорого. Иной раз очень дорого. Так что для личных целей могут быть не всем по карману.

----------------------------

А потом просто, было время на выходных, руки чесались, хотелось что-то наваять, детальки валялись (жалко ведь, валяются бесхозно). Вот и решил провести время с пользой себе и может другим. Конечно, платы пришлось изготавливать за деньги, это да. Но мне хотелось их сделать для получения опыта заказа плат от частного лица, на будущее, есть некоторые мысли. Опыт появился: заказывал 5 шт. плат, а мне дали 10, из них одна была помечена как бракованная (хотя я смотрел, смотрел, так и не заметил в чём там брак). Как мне сказали, лишних 4 штуки вам передаются безвозмездно, т.е. даром :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...