В данной статье расскажу как модифицировать ST-Link V2 до ST-Link V2.1.
Возможно для кого-то это не будет новостью, но особой инфы по данной теме в инете не нашел.
Кому интересно — прошу под кат.
Предисловие
Так уж случилось, что мне надоели лишние провода.
Немного подумав я вспомнил что на платах Nucleo и Discovery — ST-Link совмещает в себе SWD и VCP (Virtual Com Port).
Первое что пришло в голову — купить самую дешевую из подобных плат, попытаться сдампить прошивку в обход защиты и залить в программатор из китая, либо же развести новую плату.
Однако мне подсказали ссылку на GitHub с уже вытянутым загрузчиком, в итоге получилось то что получилось.
Приступаем к работе
Модификацию можно произвести только на версии софта под Windows, кроссплатформенная версия софта отказывается обновлять девайс!
Есть несколько вариантов модификации, и часть из них нельзя сделать если чип не подходящий (не хватит памяти).
Например, модификацию STM32+MSD+VCP можно сделать только если чип STM32F1xxCBxx, однако у нее есть аналог STM32+Audio, который даст STM32+VCP (в принципе что нам и требуется).
Понадобится:
— Паяльник;
— Мультиметр с прозвонкой;
— ПК с ОС Windows (может получится через Wine, не пробовал);
— Архив с нужным софтом и бутлоадером (PASS: QWK2tn+fM.EdjX6z).
— Китайский клон ST-Link V2;
— USB-UART адаптер либо второй ST-Link.
Вскрываем...
Прошивка
Есть два пути — USB-UART (немного сложнее) либо второй ST-Link.
1) Прозвонкой находим резистор который подключен к BOOT0.
Делаем перемычку от стороны этого резистора которая подключена к BOOT0 к 3.3v.
PA9(TX) может быть подключен к светодиоду или резистору рядом с ним, потому прозваниваем.
Подпаиваем UART на PA9(TX) и PA10(RX).
Я делал это так:
Так же подпаиваем питание.
Прошиваем загрузчик Protected-2-1-Bootloader.bin с помощью STM32 Flash loader demonstrator.
После прошивки отпаиваем перемычку, PA9 и PA10 (PA10 оставляем если хотим вывести SWO).
На платах есть по 4 контакта, в некоторых случаях они уже промаркированы, в противном же случае прозваниваем их относительно PA13(SWDIO) и PA14(SWCLK), подпаиваемся вторым ST-Link.
Так же подпаиваем питание.
Устанавливаем STM32 ST-LINK Utility V4.3 из архива, снимаем защиту от записи и прошиваем загрузчик Protected-2-1-Bootloader.bin.
Для снятия защиты в программе STM32 ST-LINK Utility жмем Target > Option Bytes, переключаем Read Out Protection в Disabled и жмем Apply.
Обновление до ST-Link V2.1
После прошивки подключаем прошитый ST-Link (уже почти V2.1) к ПК.
В программе STM32 ST-LINK Utility V4.3 жмем ST-LINK > Firmware update.
Жмем Device Connect — получаем список возможных модификаций:
Выбираем нужную вам модификацию, в моем случае STM32+MSD+VCP, жмем Yes >>>>.
Ждем пока завершится обновление…
Профит!
Завершающая часть
Так как SWIM и RST после такой модификации не работают — отрезаю их.
Так же отрезаю дублирующие 5V и 3.3V.
Получается 4 свободных пина.
На них подпаиваюсь проводками к чипу:
PA10 -> SWO
PB0 -> NRST
PA3 -> RX
PA2 -> TX
Вывожу все на основной разъем, на оставшиеся свободные пины.
Получилась такая распиновка:
Накарябал скальпелем маркировку на корпусе:
Не забываем отмыть плату после пайки!
В итоге, в ПК девайс определяется так:
Я без понятия чему равен объем виртуальной флешки (в данном случае к ST-Link V2.1 был подключен F103C8).
Если на нее закинуть файл прошивки — программатор прошьет чип без программ.
Проверяем VCP:
Спасибо за внимание!
С вопросами обращайтесь в комментарии, чем смогу — помогу.
Комментарии (42)
alex-open-plc
01.03.2019 18:46Идея — работает. «Издевался» на таком варианте: ST-Link from «Blue Pill»
Это проще, чем ковыряться в ST-Link…User420 Автор
01.03.2019 18:46За то корпус аккуратный, и удобнее чем из пилюлю в качестве программатора юзать. (Имхо)
IgorPie
01.03.2019 20:57Защиты нет совсем. Подтяжки и т.п. не очень понятно как сделаны (ли).
Такой вариант на работе проживет недельку, а потом скончается от замыкания выхода с выходом, замыкания на питашку/землю, и прочим «естественным» причинамolartamonov
02.03.2019 11:15STM32 вообще довольно прочный в этом плане, если не шарахнуть его очень хорошим зарядом статики или 5+ вольтами, то такие программаторы живут вполне себе долго и успешно.
Тем более, по их цене их можно горсть сразу взять, а также, не задумываясь, выдавать в пользование всем желающим, от разработчиков до заказчиков.IgorPie
02.03.2019 14:49Я тоже так думал, пока они не начали гореть по 5 в неделю.
Пришлось сменить шмот на с коротким рукавом, свести все земли в 1 точке и антистатический браслет туда же. Без браслета — вот опять вчера меняли МК, который то шьется, то не шьется и стабилизатор при нем сильно грелся.
Новый шьется без проблем, стаб — холодный.
ittakir
01.03.2019 19:39Многовато возни чтобы заменить отдельный USB-UART за 30-60 рублей.
andreili
01.03.2019 19:58Самое главное — минимизация девайсов. Да и занят всего 1 USB.
И как плюс — можно заливать прошивки без софта, работая как с флешкой.kzhyg
01.03.2019 20:35Самое главное — что через год вы забудете нестандартную распиновку и будете страдать. Или у вас сгорит этот программатор, и вы будете страдать, потому что новый до переделки к старому разъёму подключать нельзя.
Стандартизация на длинной дистанции в большинстве случаев важнее уникальности, особенно когда дело касается инструментов.ittakir
01.03.2019 20:45Согласен с вами. Например, сделали плату на заказ. Человек её продал в другой город, забыл о ней, а через год вам звонит, нужно баг починить, плату перепрошить.
Стандартный USB-UART, USBASP и STLINK можно купить в любом городе в магазине радиотоваров. Вам остается только скинуть по почте файл прошивки, а не ехать с вашим хитрым программатором в другой город.
IgorPie
01.03.2019 20:53У нас схожая «нестандартная» распиновка несколько лет как стандарт.
SWD, 3.3, земля, сброс и uart_tx чтобы знать что в железке творится. Так, что инициативу поддерживаю, как и резисторы защитные (на фото программаторов их не видно, наверное, в нижнем слое).
olartamonov
02.03.2019 11:20А стандартная распиновка — это, пардон, что? Cortex Debug Connector, к которому вечно шнурка на 2?5?1,27 мм не найдёшь под рукой, в котором есть ненужные TDO/TDI и одновременно нет нужного для отладки/настройки банального UART?..
Мы себе завели свой собственный 6-контактный разъём с UART TX/RX или SWDIO/SWDCLK + BOOT + RESET + GND + VCC и с той поры в ус не дуем. Копеечную платку адаптера для настройки или перепрошивки через UART-бутлоадер (CP2102, LDO, две кнопки, microUSB) желающим просто дарим.
KonstantinSpb
01.03.2019 20:48+1Если хотите универсальности и опенсорсности, то вот сильвупле
github.com/blacksphere/blackmagic/wiki
https://madnessinthedarkness.transsys.com/blog:2017:0122_black_magic_probe_bmp_on_st-link_v2_clones
github.com/dword1511/stm32-vserprog
xFFFF
02.03.2019 02:30Есть несколько вариантов модификации, и часть из них нельзя сделать если чип не подходящий (не хватит памяти).
А как узнать, какой вариант подойдет?User420 Автор
02.03.2019 09:08Если модификация не подойдет для вашего МК то программа выдаст ошибку о нехватке памяти, а вообще такая модификация там только одна, у нее есть аналог, и я это упомянул в следующей строчке
Например, модификацию STM32+MSD+VCP можно сделать только если чип STM32F1xxCBxx, однако у нее есть аналог STM32+Audio
xFFFF
03.03.2019 13:46Хорошо, сейчас попробую перепрошить свой программатор)
У меня какой-то китайский клон запаян — STM32GC102CB.))User420 Автор
03.03.2019 14:50Вот на счет этой странной маркировки не уверен…
В сети о ней разное пишут…
Если все же решитесь прошить — обязательно сообщите о результатах.
extempl
02.03.2019 08:31Всё ёмко и по делу, но вот что это, для чего, почему нельзя взять сразу 2.1, в чём вообще преимущество девайса — можно было бы и добавить. Так, как инструкция — супер, как статья — не очень.
User420 Автор
02.03.2019 09:10В предисловии описано в чем преймущество, а так же в конце статьи.
Почему нельзя взять сразу 2.1? Потому что их не существует по отдельности, только на платах нуклео и дискавери, что я так же упомянул в предисловии.
Если же вам интересно знать что есть ST-Link — гугл открыт для всех)
А не описывал я это потому что описание девайся не является целью данной статьи )
Nibi
02.03.2019 09:11Расскажите пожалуйста подробнее про режим прошивки с виртуальной флешки без программ. Буквально подключил и подал питание — и программатор начал зашивать?
Что насчет битов защиты, сможет ли установить?
Как определить, что уже прошито и проверено?
Не пойдет ли по второму кругу шить, если в нужное время не отключить?User420 Автор
02.03.2019 09:15Защиту можно установить программно в прошивке.
Подключил программатор к программируемому девайсу и к пк.
Закинул на виртуальную флешку файл прошивки — вылазит окно копирования файла
Когда копирование завершится можно считать что программатор завершил прошивку.
По второму кругу прошивка не пойдет, потому как для этого придется закинуть на него файл прошивки еще раз.User420 Автор
02.03.2019 10:52Однако работает это только с файлами прошифка формата *.bin
alex-open-plc
02.03.2019 11:31Это не работает.
Содержимое диска:
Содержимое папки E:\
27-May-04 16:30 46 DETAILS.TXT
1 файлов 46 байт
Содержимое папки E:\System Volume Information
02-Mar-19 11:11 .
02-Mar-19 11:11 ..
02-Mar-19 11:11 12 WPSettings.dat
02-Mar-19 11:11 76 IndexerVolumeGuid
2 файлов 88 байт
Всего файлов:
3 файлов 134 байт
2 папок 139,264 байт свободно
User420 Автор
02.03.2019 11:48Опишите ваши действия.
Только что проверил — скомпилировал blink в бинарный файл прошивки, закинул на программатор и bluepill начал мерцать.alex-open-plc
02.03.2019 13:21Скомпилировал в bin, записал на диск программатора и ничего.
Очистил МК, записал на диск и ничего.
Но МК STM32F303User420 Автор
02.03.2019 13:47На диске программатора, после неудачной прошивки таким способом — появляется файл FAIL.TXT.
Что в нем?
Если же его нет то прошивка прошла успешно.
А если файл был до прошивки — значит скорее всего вы не правильно подключили программатор к девайсу.
Так же, если не подключен RESET от программаторы к девайсу — программатор не будет сбрасывать девайс после прошивки, и это придется сделать вручную нажатием кнопки RESET после прошивки.alex-open-plc
02.03.2019 14:27А вот сейчас — сработало…
Имя файла было "_tst.bin" — не работало, переименовал в «tst.bin» — сработало. Фантастика…
Reset не подпаивал, давлю кнопкой.
alex-open-plc
02.03.2019 11:34Хотя может сам виноват…
Использую 103C8T6 вместо рекомендуемого 103CBT6
kzhyg
Можно ли узнать судьбу "правильного" бутлоадера? Мне не хотелось бы запускать на устройстве, подключённом к USB, непонятный код с файлообменника.
User420 Автор
Бутлоадер был взят сдесь:
github.com/Krakenw/Stlink-Bootloaders
Предполагаю что он был слит с нуклео либо любой другой платы)
Где-то в сети гуляет мануал о том как вытянуть прошивку с stm32…
esynr3z
Есть пара статей про реверс инжинеринг STLink:
Бинарники там не выложены, но все необходимые процедуры описаны неплохо.
User420 Автор
Именно тот мануал что я имел в виду ))