Содержание статьи / Table Of Contents
↑ Тернистыми тропами выбора…
Прежде всего, я определился, что обычного ISP (In-circuit Programming) SPI (Serial Peripheral Interface)-программатора мне хватит с головой даже с заделом на обозримое будущее. Недостатков у последовательных внутрисхемных программаторов всего два.Во-первых, это более низкая скорость прошивания, хотя в большинстве случаев реально несущественно будет ли проц шиться 20 секунд или 2 секунды, разве что если вы не собираетесь наладить себе мануфактуринг.
Во-вторых, это опасность заблокировать процессор неправильной установкой битов конфигурации (фьюзов), или случайно вообще отключить режим ISP, или переназначить вывод RESET на что-то другое (в некоторых младших моделях этот вывод бывает совмещённым с портом).
Что ж, придётся быть внимательным. Тем не менее «вылечить» заблокированный таким образом проц можно с помощью т.н. параллельного высоковольтного программирования или с помощью JTAG.
Оба варианта для домашнего использования востребованными обычно не являются, а вот стоят довольно-таки дороговато. У меня же на работе данные девайсы имеются, поэтому «если что», ситуацию могу исправить там.
Да, ещё одно преимущество ISP-программирования для рядового любителя — программируемый процессор может оставаться впаянным в устройство, т.е. нет необходимости его вынимать и переставлять в программатор.
↑ Итак, однозначно ISP
Однако и тут я набрёл на развилку. «Простые» ISP-программаторы довольно капризны в работе. Дело в том, что они требуют прямого доступа к порту (т.н. bitbang-mode) и часто нестабильно работают на современных компьютерах.В качестве «классики» можно привести программатор STK200/300 для LPT-порта и программатор Громова для COM-порта, содержащих всего несколько резисторов.
Возникает резонный вопрос: раз контроллер должен подключаться по SPI-протоколу, как это может работать от LPT/COM? А вот это и есть суть битбанг-режима, когда мы, получив прямой доступ к регистрам порта, произвольно управляем состоянием на его пинах.
Таким образом, на LPT/COM-портах можно реализовать какой угодно протокол, в разумных пределах, конечно. В нашем же случае реализовывается протокол ISP; на пинах портов формируются сигналы CLK, MOSI, MISO.
Очевидно, что такой режим является принципиально ненормальным для порта, да и WinXP не приветствует прямой к его регистрам. Именно поэтому для работы с такими программаторами часто рекомендуют компьютеры на основе P-III под управлением Windows98.
Ещё один камень в огород «резисторных» программаторов — потенциальная возможность сжечь порт вследствие отсутствия гальванической развязки с контроллером, который в данный момент находится в устройстве, имеющем свой блок питания (в момент программирования ему тоже требуется питание, а где ж оно возьмётся на LPT/COM?).
Для обхода этого недостатка, было придумано множество модификаций подобных программаторов с добавлением транзисторных ключей, оптронов, буферов (в т.ч. МАХ232) и т.д. вплоть до абсурда; некоторые из них можно было назвать «простыми» только с натяжкой. Да и проблемы зависимости от быстродействия компьютера и с прямым доступом к порту они не решают.
И наконец, LPT/COM-порты постепенно уходят в небытиё. Казалось бы, USB-COM переходник решит проблему, ан нет, не все переходники обеспечивают даже полный СОМ, не говоря уже о битбанге.
Однажды на работе мне попался в руки нерабочий USB-COM переходник, который при жизни однозначно обеспечивал полный СОМ. Расковыряв его, разобрав на корпусе одной из двух микросхем FT232 и ознакомившись с её даташитом я выяснил, что данная микросхема поддерживает и битбанг.
Продолжив поиски в Интернете, я обнаружил, что на этом чипе люди действительно делают также и великолепные USB ISP программаторы, свободные от недостатков простейших. Подключил к USB, установил драйверы (перезагрузка не требуется) и вперёд.
Что же касается сложности схемы, так она выходит ещё и проще чем некоторые «усовершенствованные резисторные». Немного может отпугнуть её цена (ок. $10), но за всё хорошее надо платить (для сравнения готовый USB-COM переходник на её же основе стоит порядка $70).
В принципе, схема подключения может быть и стандартной из даташита, но у такого подключения будет один недостаток. После программирования микроконтроллер должен быть отключён от программатора, для чего достаточно просто отсоединить ISP-кабель. Для тех, кому данный способ представляется неудобным, на сайте DI HALT’а было предложено простое решение добавить к микросхеме буфер 74НС244 с «третьим состоянием» выходов, который по сигналу OE (Output Enable) отключит контроллер от программатора. Ну и в случае неправильного подключения пусть лучше выгорит копеечный буфер, чем FTDI.
↑ Схема программатора на FT232R с буффером
Эту схему я и решил реализовать:Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
Несколько слов о ней. Питание программатор берёт с USB и им же питает программируемый контроллер через джампер JP3. При разомкнутом джампере контроллер может питаться от собственного источника питания.
При неправильной установке фьюзов контроллеру может понадобиться внешний генератор тактовой частоты. Её нам поможет получить всё та же FT232, этот сигнал выведен на джампер JP1.
Для получения 6 МГц на джампере JP1 скачайте утилитку «FT Prog» и пройдя по дереву «Device Xxxxx»→«FT EEPROM»→«Hardware Specific»→«IO Controls»→«C4», установите для пина СBUS4 значение «CLK6». Всё, теперь при наличии питания будем иметь 6 МГц TTL-уровня.
Ну и раз UART-интерфейс на микросхеме присутствует принципиально, выведем и его на JP2.
Микросхема используется в режиме битбанга, т.е. программно мы произвольно управляем состоянием её выходов, а это значит, что нам без разницы какой вывод будет сигналом MISO или MOSI; это же касается остальных выводов. Иными словами, мы можем совершенно произвольно завести выводы микросхемы на ISP-коннектор, а потом сконфигурировать всё программно.
Последнее обстоятельство нам позволяет красиво развести плату (без двух перемычек в виде нулевых резисторов, правда, не обошлось). Поскольку все коннекторы расположены на верхней стороне платы, я поставил обычные светодиоды вместо SMD, иначе снизу их не видно. Получилось вот так (варианты с заливкой землёй и без):
Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
Платы заказывал в одной из фирм, коих у нас в Чехии предостаточно.
Запаиваем детальки:
Остаётся лишь изготовить ISP-кабелёк для внутрисхемного программирования. Их есть два стандартных варианта:
Мне приходилось иметь дело преимущественно со вторым вариантом, кроме того он чуть более помехоустойчив, т.к. в нём между двумя каждыми соседними сигналами проходит земляной провод. Во всяком случае, с 80-сантиметровым проводом у меня не возникало никаких проблем.
И всё в сборе:
↑ Драйверы
С установкой драйверов проблем не возникло. Скачать их можно у производителя микросхемы на ftdichip.com. Рекомендуются драйвера D2XX Direct Drivers.Для программирования осваиваю консольную утилиту avrdude, для которой, впрочем, в сети можно найти GUI на свой вкус.
↑ Софтинка-прошивалка SinaProg
[14/05/2016] Удобная и простая оболочка, работающая совместно с avrdude. К сожалению, разработка проги давно прекращена.🎁 sinaprog.7z 11.79 Mb ⇣ 29
Вы сможете настроить SinaProg для работы с любой версией программатора на FT232R, переопределив в конфиге обращение к пинам чипа.
Правим avrdude.conf
programmer
id = "usb_bb";
desc = "USB_BB programmer based on FT232R (datagor.ru)";
type = ft245r;
# = 0; # TXD [ 1 PIN FT232RL ]
# = 1; # RXD [ 5 PIN FT232RL ]
# = 2; # RTS [ 3 PIN FT232RL ]
gates = 3; # CTS [ 11 PIN FT232RL ]
mosi = 4; # DTR [ 2 PIN FT232RL ]
sck = 5; # DSR [ 9 PIN FT232RL ]
miso = 6; # DCD [ 10 PIN FT232RL ]
reset = 7; # RI [ 6 PIN FT232RL ]
;
Волшебная строчка "gates = 3; # CTS [ 11 PIN FT232RL ]" сработает только с пропатченым avrdude. Она и определяет управление состоянием буфферной микросхемы, в данном случае через пин № 11 FT232, см. схему вверху.
↑ Файлы, ссылки
В архиве прилагаю схему и ПП в Eagle CAD. Шейте на здоровье!🎁ftdi-usb-prog.7z 26.41 Kb ⇣ 200
ПП в Sprint Layout, подготовлена Юрой (Yura_Zayets_Vol)
🎁 proshivalka.7z 5.64 Kb ⇣ 122
Модифицированный avrdude + все либы и конфиги для него + avrdude-gui (графическая оболочка). Архив из статьи от DI HALT.
🎁 FTBB.7z 161.26 Kb ⇣ 41
Статья от DI HALT — Скоростной AVR USB программатор на FT232RL без вспомогательного контроллера
Спасибо за внимание!
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.