Здесь не будет статьи о разработке своего программатора-отладчика (как, к примеру Black Magic Probe, т. к. это время затратно и смысла в этом я особого не вижу), это просто небольшая статья о самодельном варианте отладчика-программатора, который можно прошить в St-Link, J-Link, CMSIS-DAP. Проект открыт для самостоятельного изучения, а также приведена ссылка на заказ печатной платы в OSH Park (мне с этого никакого профита, если что, просто для удобства приведу).
Внимание! Материал ниже представлен исключительно в ознакомительных целях, и если Вам необходим J-Link или St-Link в коммерческих целях, то следует приобрести отладчик у официального дилера.
Схемотехника
Схема в целом максимально схожа с Nucleo платами от STMicroelectronics. Вот основная часть с МК (кликабельно):
И часть с питанием:
В виде PDF всю схему можно скачать тут — x-Link Э3 изм.0. По пунктам, основные моменты и отличия:
- Применён прямо совсем народный уже LDO — LM1117MPX на месте DA1 с возможностью установки как фиксированного на +3,3 В, так и ADJ версии с установкой соответствующих резисторов R10, R11 (также он применён по причине хорошего запаса по току, т. к. линия + 3,3 В выведена напрямую на внешний разъём для возможности запитывания небольших устройств);
- Установлены компоненты переэнумерации USB (компоненты VT1, R5, R6) как в последних платах Nucleo, но схема несколько упрощена;
- Выведены дополнительные сигналы Tx\Rx (работает только на St-Link) и MCO (меандр 8 МГц) на контрольные точки;
- Кварцевый резонатор ZQ1 установлен малогабаритный, но довольно распространённый, в корпусе 5032;
- Для максимального уменьшения размеров на гребёнку XP2 выведен только SWD, и как дополнительная опция +5 В на XP3 для питания мелких устройств прямо от программатора-отладчика (защит не предусмотрено поэтому, чтобы был максимально возможный ток от USB-порта);
- Предусмотрено место для установки защитного супрессора FV1 по линиям SWD на случай длинных проводов, но к установке не обязателен;
- МК DD1 можно запаять как в первых версиях STM32F103C8T6 или более правильно будет запаять STM32F103CBT6 с большим объёмом памяти.
Перечень элементов (пассивные компоненты любые, аналоги просто указаны с библиотеки компонентов, чистить\ставить везде «любые» не стал):
Позиционное обозначение | Компонент | Кол-во | Примечание (аналог) |
C1, C4, C7, C9, C10, C11, C12 | GRM188R71C104KA01D | 7 | |
C3, C6 | GRM1885C1H220JA01D | 2 | |
C5, C8 | GRM21BR60J226ME39L | 2 | |
DA1 | LM1117MPX-3.3 | 1 | |
DD1 | STM32F103C8T6 | 1 | Рекомендуется STM32F103CBT6 |
FV1 | SP0503BAHT | 1 | Не обязательно |
HL1 | BL-LS0603GC | 1 | |
HL2 | BL-LS0603HC | 1 | |
L1 | BLM18PG331SN1 | 1 | Не критично, любая подходящая по току |
R1 | RC0603JR-071K5L | 1 | |
R2, R8, R15 | RC0603JR-0710KL | 3 | CR0603-JW-103E |
R3, R4 | RC0603JR-0722RL | 2 | |
R5, R13, R14 | RC0603JR-074K7L | 3 | |
R6, R7, R12, R16, R17 | RC0603JR-07100R | 5 | CR0603-JW-101E |
R10 | RC0603JR-070R | 1 | RC0603FR-070RL, CR0603-J/-000E |
R18, R19, R20 | RC0603JR-0710RL | 3 | CR0603-JW-100E |
VT1 | BC847 | 1 | Любой аналогичный |
XP2 | PLS-5 | 1 | |
XP3 | PLS-1 | 1 | |
XS1 | DS1097-B | 1 | USB-AR, DS1097-W |
ZQ1 | KX-9A 8.0 MHz 30/50/100 16 pF | 1 | Любой аналогичный |
Разводка
Вот с этим вышло довольно весело, плата переделывалась 2 раза. :) В итоге она-таки мне начала нравиться и результат разводки можно посмотреть ниже (ну или скачав проект, оценить уже в альтиуме), верхний слой:
И нижний слой:
Вышло вроде бы достаточно лаконично и, насколько это возможно, максимально плотно с элементами 0603 (еще удобными для пайки). Также есть намеренный косяк — эту плату паять с пастой надо очень аккуратно, т. к. я специально все заливки сделал с директ-подключением к компонентам. Так делать в продакшене нельзя (если только не с обеих сторон будет симметрично) — у вас компоненты будут «гробиком» становиться, не пропаиваться или другие «весёлости». Происходит это из-за разности теплоотдачи падов компонента и, как следствие, разной силе поверхностного натяжения припоя при плавлении в печи или феном, т. к. одна сторона быстро нагревается и плавится, а другая еще не расплавилась, то тот же компонент с корпусом 0603 запросто может становиться «гробиком», силы натяжения припоя вполне хватает. Поэтому эта плата для условно ручного монтажа (либо аккуратного монтажа с пастой и последующей проверкой). Сделано это для минимизации сопротивления заливок общего провода, а также из-за узких мест, где с термопадом были бы крайне тонкие заливки.
Сборочные чертежи, верхняя сторона:
И нижняя сторона:
Заказ печатной платы и пайка
Платы я заказал не у китайцев, а в OSH Park (США) по двум простым причинам — такой размер платы там дешевле выходит (доставка бесплатная и качество изготовления платы отменное) и мне не нужно 10 шт (многие китайские фирмы по изготовлению печатных плат делают от 10 шт).
Заказываем, ждём 2-3 недели и получаем пакет на почте:
Вот и платы (на фото я уже прошелся дремелем по местам крепления плат в общей панели, с которой они выламываются, вышло не совсем аккуратно):
Достаём горсть деталей и паяем. После пайки кучка упаковок:
Спаял 2 платы полностью, отмыл в спирте по-быстрому:
Нижняя сторона:
Разъёмы паял уже после мойки, поэтому прекрасно виден флюс. :)
Осталось только покрыть прозрачным цапон-лаком или завернуть в прозрачную термоусадку, и функционально в плане железа программатор-отладчик готов.
Прошивка
Прошить эту плату можно и через UART-загрузчик, но делать контрольные точки для этого я не стал, сделал только SWD-разъём для прошивки (ага, дилемма курицы и яйца в чистом виде). Я думаю не проблема найти у коллеги\друга\на работе программатор и прошить свои платы им или даже спаять на коленке свой за 5-10 минут из Blue-Pill STM32 платы:
Хотя если вы спаяли St-Link из Blue-Pill, то зачем вообще вся эта запарка… тут же и отвечу — чтобы было красиво и удобно! :) Хотя кому как, может вполне хватит и самоделки как на фото выше.
Итак, надо прошить МК загрузчиком — файл Loader\ST-LINK V2-1 Boot Loader Unlocked.bin любым удобным\доступным вам способом. К примеру, я запустил JFlashLite.exe (т. к. у меня имеется J-Link под рукой) из пакета драйверов J-link и выбрал установленный на плату МК:
Интерфейс программирования — SWD:
Выбираем файл загрузчика, стираем на всякий случай память сначала и далее прошиваем:
Далее необходимо отключить и подключить заново плату к USB-разъёму, она должна определиться как St-Link. Теперь заливаем прошивку St-Link фирменной утилитой от STMicroelectronics (лежит в Loader\ST-LinkUpgrade\ST-LinkUpgrade.exe). Нажимаем Device Connect, если утилита корректно распознала St-Link, то появляется выбор прошивки к обновлению. Выбираем STM32+Audio:
По окончании процесса обновления появится информационное окно:
Опять требуется отключить и подключить заново плату к USB-разъёму. На этом, собственно, и всё готово, если вам нужен St-Link. Если хочется J-Link, то запускаем утилиту из Loader\STLinkReflash_170628\STLinkReflashFixed.exe и обновляем как ранее было об этом написано:
На этот раз после обновления прошивки не требуется отключения от USB разъёма и устройство автоматически распознаётся ОС и можно устанавливать драйвера для J-Link (если еще не установлены).
Вот и всё! Можно добывать плазму:
Запускаем Keil или VS или другую вашу любимую IDE и вперёд и с песней отлаживаться. ;)
Ссылки
- x-Link_v0 — быстрый заказ печатной платы в OSH Park для самостоятельного изготовления;
- GitHub — проект для Альтиума и загрузчик St-Link;
- ST-LinkUpgrade — утилита от STMicroelectronics для обновления прошивки St-Link (Windows версия также лежит в GitHib репозитории);
- ST-Link в J-Link — статья о перевоплощении в J-Link. :)