resulted.jpg

Программатор Versaloon на основе микроконтроллера STM32 - полностью открытая многофункциональная платформа, которая поддерживает более 10 видов интерфейсов, среди которых JTAG, SWD, SPI, IIC, SWIM, UART. Существует несколько версий программатора. Сайт проекта http://www.versaloon.com/. Я собрал самую маленькую версию Versaloon - Nano Release, с некоторыми модификациями, которые касаются удешевления стоимости компонентов, и увеличения их доступности. Существуют также другие версии, например Mini Release (функциональность такая же, но плата больше по размеру, несколько дополнительных компонентов), но в своём блоге я буду подразумевать под Versaloon именно версию Nano Release.

Versaloon работает под Windows и Linux, есть поддержка отладки STM32 через OpenOCD.

Versaloon очень быстрый, и позволяет управлять скоростью программирования в большинстве интерфейсов:

  • JTAG: 1KHz - 18MHz
  • SPI: 1KHz - 18MHz
  • IIC: 1KHz - 100KHz
  • UART: до 921600bps

Интерфейс подключения к ПК - USB. Для подключения к платам с прошиваемыми контроллерами в VersaloonNano используется разъем BH-10. Пины разъема выполняют сразу несколько функций, например при программировании AVR8 по интерфейсу SPI первый пин выполняет функцию SPI_SCK, а при программировании STM32 по интерфейсу SWD этот же пин выполняет функцию SWD_SWCLK.

Versaloon определяется в системе как USB Сommunications Device Class (CDC), что означает что одно устройство виртуально состоит из нескольких интерфейсов: Кроме самого программатора появляется COM-порт и программатор также можно использовать как преобразователь USB-UART. Пины Rx и Tx выведены на внешний разъём ВН-10.

Стоимость самостоятельной сборки программатора - около 5и-6и долларов, что относительно дёшево для такой функциональности.

В основе программатора используется контроллер STM32f103C8T, первый раз его нужно запрограммировать внешним программатором. Самым дешевым вариантом для этого будет использование UART-а которым можно прошить STM32 через внутренний бутлоадер  (для этого метода понадобится преобразователь usb->uart или rs232->uart). Как выполнить такую прошивку я написал в этом комментарии. Также можно использовать отладочную плату STM32Discovery (стоимость около 15 баксов), да и эта плата очень популярна у ембеддеров, возможно получится найти её у знакомых.

Прошивка программатора иногда дополняется новым функционалом. Для ее обновления предусмотрен программный bootloader, доступный по USB. Таким образом обновлять прошивку можно не прибегая к использованию внешнего программатора.

Последние версии исходного кода программного обеспечения и аппаратных релизов можно скачать из SVN-репозитария http://vsprog.googlecode.com/svn/trunk/.

Конструирование

Архив со схемой и платой PCB (для EAGLE), а также фотошаблонами в PDF: Скачать схему, плату, скомпилированную прошивку, драйвера и ПО для Versaloon. В статьях с тегом Versaloon я часто буду ссылаться на этот архив.

Схема Versaloon:

Versaloon_shem.jpg

На схеме указаны компоненты, которые использовал я, но многие из них можно взять другие:

  • IC1 - регулятор напряжения на 3.3 В, не регулируемый а фиксированный! в корпусе SOT233, например кроме NCP1117-3.3 подойдёт LM1117-3.3
  • L1, L2 - индуктивность в корпусе 0603. Используются для сглаживания высокочастотных бросков напряжения на линии USB. Индуктивность установленная в схеме может пропустить ток до Rated Current=500mA и сопротивлением на постоянном токе DC Resistance(max.)=0.18ohm. На частоте 100 МГц имеет сопротивление не меньше 120 Ом. Примерно по таким же параметрам можете подобрать любую другую, сопротивление на 100 МГц может меняться в пределен нескольких сотен Ом. В крайнем случае можно заменить перемычками.
  • Светодиоды, резисторы и конденсаторы - некоторые в корпусе 0603, некоторые 0805 - выбирал те что у меня были, смотрите по PCB. Номиналы указаны на схеме. R13, R15 лучше взять с как можно более равными сопротивлениями (проверить тестером) или взять из 1%-ого ряда, поскольку они используются для делителя напряжения на входе АЦП (используется для измерения напряжения, на котором питается устройство, будь это напряжение от внешнего источника, или напряжение генерируемое самим программатором).
  • Защитные 100-Омные последовательные резисторы в цепях P_TCK, P_TDO, P_TMS, P_RTCK, P_TDI, P_SRTS, P_TRST в оригинальной схеме были 68 Ом а не 100. У меня не было на 68, и я поставил 100. Каких-либо проблем при использовании резисторов в 100 Ом я не заметил(токи по информационным линиям не должны быть большие и падение напряжения на сопротивлениях будет в любом случае весьма незначительным), но возможно они могут появится при работе с контроллерами которые мной не проверялись, так что если есть возможность поставьте 68 Ом.
  • Два танталовых конденсатора C1 C2 - корпус B (case B), также известен как SMD3528. Номинал 10-100 мкФ, Напряжение не меньше чем 5 В 
  • Контроллер IC2 STM32f103C8T, можно STM32f103CBT (немного дороже, в нём больше флеша, в остальном полностью совместим с STM32f103C8T). У обоих LQFP48 корпус, на что указывают символы СхT в обозначении (маркировку смотрите тут).
  • Мосфет Q1 используется для программного управления напряжением (подавать на программируемое устройство напряжение с программатора или нет). В оригинальной схеме был транзистор  Si2333DS, но мне он показался дороговатым и я взял Si2301DS (у этого чуть меньше выходной дрейновый ток - до 1.9 А на напряжении Gate-Source в 2.5 В, в отличии от тока 4.6 А у оригинального транзистора), но этого вполне хватит.
  • Диод D1 - используется для запрета пропускания тока из устройства (если вы его запитаете внешним источником) в мосфет. Нужен диод Шоттки с минимальным падением напряжения. Дело в том, что величина падения напряжения на диоде при прямом включении (forward voltage) уменьшит выходное напряжение, генерируемое программатором. Например у обычного диода вроде 1N4148 при токе в 100 мА падение будет равно целому вольту! (обозначается как 1В@100мА) и на выходе останется только 3,3В- 1В = 2,3В А. При увеличении тока напряжение будет рости. Так что лучше поставить что-то вроде указанного в моей схеме MBRS230L (SS23) в SMB корпусе, можно поискать что-то по меньше в SOD-ах или что-нибудь в SMA типа VS-15MQ040NTRPBF. В общем вариантов может быть очень много, все зависит от того, что вы найдете в магазинах. Файл платы я дал, так что при желании вы можете легко выбрать посадочное место диода - показать слой tOrigns, клик по плюсу на диоде, клик правой мышкой, Technology -> Show all packages, и выбрать нужное посадочное место. В худшем случае, конечно можно взять и 1N4148, по началу я попробовал устанавливать его, и у меня голая Atmel ATiny 2313 прошилась и стартанула при питании 2.5 В без проблем, а вот STM8S, которая требует напряжение от 2.9 В, уже не завелась, поставив MBRS230L проблема решилась. 
  • G1 - Защита от статики(ESD) и помех на линиях ЮСБ, можно использовать более дешевую STF202, правда распиновка немного другая,  придется переразвести. При замене нужно обратить внимание на то, что внутренняя подтяжка в STF202 должна быть  подключена к D+ а не к D-. Если подобный компонент найти не удалось, можно линии D+ и D- просто подключить входам МК через резисторы в 22 Ома. Также линию D+ в точке подключения к МК обязательно подтянуть к 3.3 В подтяжкой 1.5к (что бы устройство определилось как FULL-Speed).

Плата получилась вот такая:

versaloon_pcb.jpg

При запайке компонентов удобнее будет смотреть на схему расположения компонентов: 

Versaloon_pcb_top_comp(1).jpg

И нижний слой:

Versaloon_pcb_bot_comp(2).jpg

Ну а теперь о изготовлении (На фотографиях диод 1N4148 в SMA, и площадка под SMA, так что не обращайте на него внимание, берите MBRS230L в SMB или подобный, в архиве PCB c площадкой SMB). Плата делалась обычным лутом на фотобумаге Lomond 120г/м2. Самое сложное это сцентровать стороны друг относительно друга. Для этого я травил стороны отдельно.

Сначала утюжу топ:

vsluttop.jpg

С температурой был небольшой перебор: дорожки немного расплылись и глянец в тонких местах запёкся: пришлось почистить иголкой. Далее заклеил скотчем другую сторону и кинул в раствор хлорного железа.

Для выравнивания просверлил 4е отверстия 0.5 мм:

vsdrillcentmaketop.jpg

Важно просверлить их как можно под более прямым углом. В бумажке с нижним слоем иголкой ровно прокалываем отверстия в нужных точках с целью совмещения с отверстиями на плате: 

vsdrillcentpapermake.jpg

А совмещается это всё дело с помощью тонких проволочек:

vsdrillcentwithprov.jpg

С этими проволочниками и начинаем утюжить, потом снимаем их и доутюживаем. 
Заклеиваем скотчем уже вытравленную сторону:

vstopskotch.jpg

Кидаем в раствор.

Сверлим отверстия сверлом 0.5 мм. Лучше надсверливать с одной стороны, а потом досверливать с другой, что бы как можно меньше повредить пады. У меня вышло далеко не идеально, но соединения обеспечить можно:

vstopdrills.jpg

Спаивал переходные отверстия тонкими жгутами проволочек, покрытых флюсом ЛТИ-120, дорожки лутил им же (если не лень можно повозиться со сплавом Розе). После запайки, вершины отверстий зачищаем нулевой шкуркой, особенно под контроллером.

vstopdrillscon.jpg

Ну и только после этого запаиваем компоненты. После запайки компонентов под которыми идёт дорожка берём тестер и проверяем на предмет козы между этой дорожкой и падами компонента. Под кварц подложен вырезанный кусочек изоленты с двумя проколотыми иглой отверстиями для ног.

В результате получился такой вот программатор Versaloon:

vswithcomponents.jpg

Схема, плата, скомпилировання прошивка, драйвера и ПР для Versaloon: тут