Андрей Смирнов
Время чтения: ~15 мин.
Просмотров: 8

Параллельный программатор для AVR — аналог STK500

Внутрисхемное программирование (ISP) Самый популярный способ прошивать современные контроллеры. Внутрисхемным данный метод называется потому, что микроконтроллер в этот момент находится в схеме целевого устройства — он может быть даже наглухо туда впаян. Для нужд программатора в этом случае выделяется несколько выводов контроллера (обычно 3..5 в зависимости от контроллера).

  • MISO — данные идущие от контроллера (Master-Input/Slave-Output)
  • MOSI — данные идущие в контроллер (Master-Output/Slave-Input)
  • SCK — тактовые импульсы интерфейса SPI
  • RESET — сигналом на RESET программатор вводит контроллер в режим программирования
  • GND — земля
  • Программатор Громова. Простейшая схема, работает через оболочку UniProf(удобнейшая вещь!!!), но имеет ряд проблем. В частности тут COM порт используется нетрадиционно и на некоторых материнках может не заработать. А еще на быстрых компах часто не работает. Да, через адаптер USB-COM эта схема работать не будет. По причине извратности подхода 🙂
  • STK200 Надежная и дубовая, как кувалда, схема. Работает через LPT порт. Поддерживается многими программами, например avrdude. Требует прямого доступа к порту со стороны операционной системы и наличие LPT порта.

FTBB-PROG. Очень надежный и быстрый программатор работающий через USB, причем безо всяких извратов. C драйверами под разные операционные системы. И мощной оболочкой avrdude. Недостаток один — содержит редкую и дорогую микросхему FTDI, да в таком мелком корпусе, что запаять ее без меткого глаза, твердой руки и большого опыта пайки весьма сложно. Шаг выводов около 0.3мм. Данный программатор встроен в демоплаты Pinboard

isp3.jpg

Программаторы с управляющим контроллером лишены многих проблем безмозглых. Они без особых проблем работают через USB. А если собраны на COM порт, то без извращенских методик работы с данными — как честный COM порт. Так что адаптеры COM-USB работают на ура. И детали подобрать можно покрупней, чтобы легче было паять. Но у этих программаторов есть другая проблема — для того чтобы сделать такой программатор нужен другой программатор, чтобы прошить ему управляющий контроллер. Проблема курицы и яйца. Широко получили распространение такие программаторы как:

  • USBASP
  • AVRDOPER
  • AVR910 Protoss

Параллельное высоковольтное программирование Обычно применяется на поточном производстве при массовой (сотни штук) прошивке чипов в программаторе перед запайкой их в устройство. 

  • HVProg от ElmChan
  • Paraprog
  • DerHammer

Прошивка через JTAG Вообще JTAG это отладочный интерфейс. Он позволяет пошагово выполнять твою программу прям в кристалле. Но с его помощью можно и программу прошить, или FUSE биты вставить. К сожалению JTAG доступен далеко не во всех микроконтроллерах, только в старших моделях в 40ногих микроконтроллерах. Начиная с Atmega16.  

Компания AVR продает фирменный комплект JTAG ICEII для работы с микроконтроллерами по JTAG, но стоит он (как и любой профессиональный инструмент) недешево. Около 10-15тыр. Также есть первая модель JTAG ICE. Ее можно легко изготовить самому, а еще она встроена в мою демоплату Pinboard.

isp4.jpg

Прошивка через Bootloader Многие микроконтроллеры AVR имеют режим самопрошивки. Т.е. в микроконтроллер изначально, любым указанным выше способом, зашивается спец программка — bootloader. Дальше для перешивки программатор не нужен. Достаточно выполнить сброс микроконтроллера и подать ему специальный сигнал. После чего он входит в режим программирования и через обычный последовательный интерфейс в него заливается прошивка. Подробней описано в статье посвященной бутлоадеру. Достоинство этого метода еще и в том, что работая через бутлоадер очень сложно закосячить микроконтроллер настолько, что он не будет отвечать вообще. Т.к. настройки FUSE для бутлоадера недоступны. 

Бутлоадер также прошит по умолчанию в главный контроллер демоплаты Pinboard чтобы облегчить и обезопасить первые шаги на пути освоения микроконтроллеров.  

Pinboard II Прошивка AVR с помощью демоплаты Pinboard II (для Pinboard 1.1 все похоже) 

Всем привет! Давненько ничего не писал, даже чувствую себя немного виноватым перед подписчиками, оправдываться не буду, так получилось 🙂

Вернуться решил с небольшой серией программаторов, из которых у меня готово 2 из 3, и потом планирую забабахать сравнение всех, что у меня есть. Начну сегодня с самого последнего, который я собрал буквально на днях и дожидался разрешения автора на размещение. И да, кстати, про паяльную станцию (если кто-то её еще до сих пор ждет) я не забыл, просто с деталями выходит уже несколько месяцев косяк за косяком. Ну да ладно, об этом я расскажу уже в посте о ней, если все наконец-то сложится.

Вернемся теперь к нашим баранам — программатору STK500. Обычный человек, мало знакомый с микроконтроллерами (дальше буду писать для сокращения м/к), может спросить — а на кой ляд мне ентот ваш высоковольтный программатор сдался? Я вообще своим USBasp программирую и в ус не дую! Все так, читатель, да не так. Приведу небольшую выдержку из документа, великолепно написанного некоим _abk_ c форума radiokot, очень доступно объясняющего, почему такая вещь в хозяйстве всегда пригодится (далее — прямая цитата из документа, который я для интересующихся приложу в архив со всем нужным для сборки, немного длинно, но стоит прочтения):

Что такое В«параллельныйВ» программатор, и зачем он нужен.

Следует напомнить, что в целом МК AVR поддерживают 3 режима программирования:

1. режим последовательного программирования по интерфейсу SPI (LVSP) – всем известный и применяемый в подавляющем количестве случаев, и позволяющий программировать впаянный чип прямо в плате (in system, ISP). Режим поддерживают, пожалуй, все существующие программаторы, начиная от В«пяти проводковВ» до фирменного AVR ISP и самых В«навороченныхВ».

2. режим последовательного программирования при высоком напряжении (HVSP);

3. режим параллельного программирования при высоком напряжении, в котором (режиме) данные записываются и читаются побайтно по параллельной шине (HVPP).

Переключение МК во второй и третий режимы требует подачи управляющего В«высокогоВ» (+12В) напряжения на вывод Reset МК. Понятно, что в этих режимах программирование МК, уже впаянных в плату, требует принятия дополнительных мер для непопадания напряжения +12В в цепи на плате, присоединенные к выводу сброса. В случае параллельного режима понадобилось бы предусмотреть также подключение относительно большого числа выводов.

Какие режимы поддерживает конкретный МК, можно узнать из даташитов на них. Понятно, например, что МК с небольшим числом выводов (большинство AVR Tiny) не позволяют реализовать режим параллельного программирования.

Когда же нельзя обойтись самым простым и удобным режимом последовательного программирования по интерфейсу SPI ?

Вообще говоря, таких случаев – два.

Первый: модель МК не поддерживает режим. Например, Tiny11 программируется только в режиме 2, а Tiny28 допускает исключительно параллельное программирование (режим 3).

Нас больше интересует случай

Второй, когда в результате ошибочного или умышленного конфигурирования контроллера при установке фьюзов отключается SPI или вывод Reset конфигурируется как вывод порта. После этого последовательное программирование по SPI становится невозможным и микроконтроллер В«умираетВ». Теперь что-то изменить можно только в режимах 2 или 3 в зависимости от модели МК.

Теперь вернемся к самому программатору 🙂

Если вкратце, то таким программатором можно оживлять некоторые м/к, которые неправильно запрограммированы, и при этом еще и обычный режим он поддерживает на ура. Вот тут, если честно, я не уверен, может ли он починить все неправильно выставленные фьюзы или только те, что указаны в статье, но мои два с отключенным ISP он поднял, так что оставлю этот вопрос более знающим людям.

1494477334166612934.png

Тут — принципиальная схема доработанного программатора HVProg от Sema с форума radiokot. Вот именно ее, немного доработанную и измененную MakSVs’ом оттуда же, я и буду собирать. Некоторые доработки по сравнению с оригинальной схемой:

1. Добавлен 10-пиновый ISP разъем для большего удобства и совместимости с обычными качельками, например, или какой-нибудь ардуиной.

2. Добавлена внешняя EEPROM для FT232BL. В целом, ее можно было бы и убрать из схемы, так как она только запоминает различные настройки фт-шки, но стоит она и обвязка на нее копейки, а перелопачивать аккуратно разведенную и готовую схему не хотелось — проще было купить 10 штук за 78 рублей 🙂

3. Добавлен внешний разъем питания для 5V линии ISP 10 pin. В том варианте, что был представлен на печатной плате, это показалось мне спорным добавлением (особенно на фоне некоторых допилов, которые мне все-таки пришлось провести), но после общения с автором я понял, что сакральный смысл в этом все-таки есть — при большом потреблении тока есть возможность включить питание по внешней линии и спокойно прошивать что-то ресурсоемкое внутрисхемно.

Таким вот переходником и качелькой я пользовался для прошивки сердца этого программатора — ATMEga8535 в корпусе TQFP44. Гуглится переходничок легко, но я все равно добавлю его в архив в конце для тех, кому лень искать/неохота разбираться в засвеченных на фото надписях. Лукавый красный проводок — это одна перебитая моей тяжелой рукой дорожка, вместо которой я напаял прямо к ноге контроллера это чудо 🙂

Теперь к самой печатной плате! Сейчас я покажу вам, как нарисовать сову что получилось в результате и что мне пришлось допилить.

На фото видно несколько моих колхозов из-за отсутствия некоторых деталей — вместо катушки на 200 мкФ я поставил на 220 мкФ, да еще и смд, припаяв откушенные ножки от светодиодов. Bc857 у меня тоже не оказалось — заменил его на bc557, те же яйца, только в профиль в другом корпусе, ну и вот это махонькое чудо сразу после мини-юсб — это опять же смдшный предохранитель на 0.5А с ножками от тех же самых побитых жизнью светодиодов. Для межслойных переходов я использовал ножки от всего подряд, припаивая ее с одной стороны и придерживая снизу пинцетом, потом переворачивая и запаивая сверху, таких перемычек вышло около 20.

Посмотрим теперь на другую сторону, там тоже есть интересности:

Здоровый красный провод — это решение сразу двух проблем здесь — отсутствие внешнего разъема питания (я банально не узнаю, какой это разъем). А вторая проблема, которую я упоминал ранее, это то, что в данной схеме отсутствует выбор питания извне/с самой схемы. Эту проблему уже на готовой плате я решил такой вот перемычкой, в архиве же, который я упоминаю уже в третий раз, я приложил свой вариант схемы, который я сам пока еще не проверял (не хватает несколько деталей, а с рабочего программатора я доставать не хочу), в котором я решил это проблему, добавив 3 штырька, один межслойный переход и один джампер.

Покажу вам теперь доказательства работы данного чуда:

Шьет он довольно быстро, программа на кое-что, что я постараюсь либо до сессии, либо сразу после нее показать (для самых внимательных любителей читать кучу текста!) зашилась примерно секунды за 3, считая секунду, пока он тупил. Восстанавливал битый чип он чуть дольше, секунд 10, но все равно это не лпт-порты, где можно спокойно сидеть по минуте и в конце получить ошибку. Как настроить и подключить — будет написано в файле. Я лично со всеми программаторами работаю из-под виртуальной машины, что упрощает установку драйверов и работу со старыми программами — из-под моей основной 10 винды столько геморроя, что даже не стоит пробовать. Под семеркой я устанавливать не пробовал, но думаю, что после отключения проверки драйвера должно заработать. По поводу виртуальной машины стоит почитать отдельно, процесс настойки/установки ее очень прост, а этот пост и так выходит слишком длинным.

Решил показать последнюю картинку программатора поближе, но до перемычки, чтобы последний абзац не загромождал страничку 🙂 Вот ссылка на множество уже раз упомянутый архив — https://yadi.sk/d/1LcSzgli3J2DVr. Там вы сможете найти все нужное для сборки — драйвера, мануал по HVProg, который я цитировал в начале поста, переходник для прошивки в макетке/качельке, .hex или .ebn файл для прошивки программатора, картинки с нужными фьюзами для некоторых программ (если у вас другая, ориентируйтесь по spien) и даже набросанный мною список нужных вам для сборки деталей 🙂

Чуть подробнее по поводу .ebn и .hex.

Дело в том, что файлы формата .ebn может зашивать только AVR Studio и, соотвественно, совместимые с ним программаторы. Но чтобы собрать такой программатор нужно его сначала запрограммировать. Перед пользователем встает проблема курицы и яйца, и из нее есть несколько выходов:

1. Купить самый простой программатор (USBasp, цена около 60 рублей, я брал за 90 со шнурком сразу), который не работает с AVR Studio, прошить файл .hex и получить программатор, умеющий прошивать .ebn. В таком раскладе нужно быть очень аккуратным с фьюзами, потому что если они будут неправильно прошиты, то м/к, скорее всего, не заработает или заработает неправильно

2. Собрать/купить программатор, работающий с AVR Studio. С покупкой все понятно — берешь то, на что хватает денег, а вот со сборкой опять же проблемы — м/к для такого программатора опять же чем-то нужно прошивать. Тут опять приходит на помощь USBasp, как самый дешевый и распространенный программатор, но вариантов множество — начиная от простейшего программатора Громова и заканчивая всякими AVR2353467574 отладочными платами с кучей свистоперделок.

Пару заключительных слов: высоковольтный программатор, возможно, и не самая простая вещь для первоначальной сборки, но крайне полезная. Цена всех деталей для одного программатора по отдельности равняется, наверное, не более 500 рублей, другое дело, что все детали продаются пачками, а не по одной 🙂 Если никаких особых изысков в прошивании не требуется, возможно, стоит обратить внимание на более простой программатор, например AVR910 в usb варианте. Как раз про него я и попробую рассказать в следующий раз, надеюсь, что не через четыре месяца 🙂 Всем удачи в сборке и успехов!

P.S. Надеюсь увидеть у кого-нибудь собранную мою версию печатки программатора до того, как до нее доберусь я 🙂

42

Радиолюбительские конструкции RA4NAL

Размер шрифта:В 

Aa Aa Aa Aa Aa

Версия 2, исправленная и доработанная

Практически все AVR контроллеры можно запрограммировать в двух режимах – высоковольтном (параллельном) и низковольтном (ISP). Наиболее часто используется низковольтное программирование. В большинстве случаев для зашивки кодов программы не требуется даже извлекать контроллер из платы и устанавливать его в панель программатора. Аппаратная реализация ISP программаторов очень простая, с описанием одного из вариантов такого программатора – аналога фирменного AVRISP – можно ознакомиться на страничке Программатор для AVR — аналог AVRISP моего сайта.

К сожалению, изначально фирма Atmel основным режимом считала режим параллельного высоковольтного программирования. Поэтому в режиме ISP некоторые функции, в частности отдельные FUSE биты, недоступны для программирования. Если быть точным, то запрограммировать их можно, но только один раз. После этого контроллер перестанет определяться программатором и перепрограммировать его в режиме ISP будет невозможно.

Наиболее актуальна эта проблема для микроконтроллеров в восьмивыводном корпусе, в которых вывод сброса RESET можно запрограммировать на использование в качестве дополнительного порта ввода-вывода. Это делается установкой FUSE бита RSTDISBL. Но после этого контроллер невозможно будет перепрограммировать в режиме ISP. Возможны и другие ситуации, когда не обойтись без высоковольтного параллельного программатора.

Предлагаемый программатор – это упрощенный и модернизированный аналог выпускаемого и поддерживаемого компанией Atmel стартового набора разработчика STK500. Он позволяет программировать микроконтроллеры как в режиме ISP, так и в параллельном режиме. Поддерживаются все, без исключения, микроконтроллеры 8 бит AVR. Управление осуществляется через COM порт персонального компьютера. Возможно подключение и к USB через конвертер, например на FT232BM, описание которого можно найти страничке Переходник USB COM моего сайта. Управляющая программа является составной частью фирменной интегрированной отладочной среды разработки AVR Studio от Atmel. Ее последняя версия всегда свободно доступна на сайте Atmel по адресу http://www.atmel.com.

Принципиальная схема основной платы программатора показана на рис. 1. Слишком сложно? Но ведь любой инструмент может быть любительским или профессиональным. Если нужно раз в жизни запрограммировать один единственный контроллер, конечно, собирать такую относительно сложную схему нецелесообразно. А вот для программиста – разработчика устройств на основе AVR, такой программатор может сберечь массу сил, многократно окупив потраченные на его изготовление средства и время. Если вам нужен профессиональный параллельный высоковольтный программатор AVR, который можно собрать своими руками, то эта конструкция именно то, что вам нужно.

Собственно программатор выполнен на DD3 типа ATmega8535. Светодиоды HL1 зеленого цвета и HL2 красного индицируют режим готовности и программирования соответственно. DD4 предназначен для записи новых версий прошивок в основной контроллер, а также для управления напряжением питания программируемого контроллера. Для повышения нагрузочной способности выводы PD3…PD5 соединены параллельно.

В схеме программатора предусмотрены два переключателя с фиксацией – SA1 и SA2. SA1 в левом по схеме положении включает в цепь питания диоды VD4 и VD5. При этом напряжение питания программатора и, соответственно, программируемого контроллера снижается примерно до 3,6 В. Как показала практика, иногда это бывает необходимо, т.к. некоторые контроллеры при напряжении 5 В в параллельном режиме программируются некорректно.

Если переключатель SA2 установить в левое по схеме положение, после программирования на выводе сброса будет установлен единичный уровень, т.е. сразу начинается работа запрограммированной в контроллер программы. Это хорошо при отладке и внутрисхемном программировании, но нежелательно при программировании в панельке программатора. Ведь неконтролируемая работа программы может привести к непредсказуемым последствиям, например, испортить содержимое EEPROM только что корректно запрограммированного контроллера. Для исключения этого SA2 следует установить в правое по схеме положение. В этом случае на выводе RESET после программирования будет нулевой уровень, а питание контроллера отключится.

Элементы микросхемы DD6 блокируют подачу на программируемый контроллер тактовой частоты при выключении его питания. На транзисторах VT1…VT3 собран коммутатор напряжения сброса 0 – 5 – 12 В. Включение напряжения 12 В при программировании индицирует свечение светодиода HL4 красного цвета. VT4 — это ключ, коммутирующий питание программируемого контроллера. Как показала практика, при программировании потребляемый ток может достигать 100 мА, поэтому в качестве VT4 нужно использовать транзистор с допустимым током 0,5…1 А. DD5 – это преобразователь напряжения 5 –>12 В.

Контроллеры в DIP корпусах можно программировать в параллельном режиме непосредственно в программаторе на плате коммутации, которая подключается к основной плате параллельно разъему X3. В режиме ISP возможно только внутрисхемное программирование, хотя, при необходимости, можно и для этого режима изготовить плату коммутации и подключить ее к разъему X3. Ее схема аналогична схеме платы коммутации упоминавшегося выше программатора AVRISP.

Параллельное программирование новой серии AVR ATtiny26/261/461/861 производится с помощью дополнительного переходника — модуля расширения.

Схема платы коммутации, чертежи печатных плат, а также особенности наладки и работы с программатором рассмотрены в подробном описании.

Подробное описание (ver.16-03-2012)
Платы в Sprint Layout 4.0 и схема в Orcad 9.1 (ver.16-03-2012)
Прошивка и исходный текст программы контроллера на ассемблере (ver.10-03-2011)

Используемые источники:

  • http://easyelectronics.ru/avr-uchebnyj-kurs-traktat-o-programmatorax.html
  • https://pikabu.ru/story/stk500__vyisokovoltnyiy_programmator_dlya_mk_atmel_vozvrashcheniy_post__5040826
  • http://ra4nal.qrz.ru/stk500.shtml

</table></ul>

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации