Внутрисхемное программирование (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
Программаторы с управляющим контроллером лишены многих проблем безмозглых. Они без особых проблем работают через 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.
Прошивка через 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 он поднял, так что оставлю этот вопрос более знающим людям.
Тут — принципиальная схема доработанного программатора 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, исправленная и доработанная
|
Используемые источники:
- 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>