Привет, Хабр!

В данной статье расскажу как модифицировать 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.

USB-UART


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).

ST-Link

На платах есть по 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)


  1. kzhyg
    01.03.2019 18:00
    +2

    Можно ли узнать судьбу "правильного" бутлоадера? Мне не хотелось бы запускать на устройстве, подключённом к USB, непонятный код с файлообменника.


    1. User420 Автор
      01.03.2019 18:43

      Бутлоадер был взят сдесь:
      github.com/Krakenw/Stlink-Bootloaders
      Предполагаю что он был слит с нуклео либо любой другой платы)
      Где-то в сети гуляет мануал о том как вытянуть прошивку с stm32…


    1. esynr3z
      01.03.2019 18:59

      Есть пара статей про реверс инжинеринг STLink:


      Бинарники там не выложены, но все необходимые процедуры описаны неплохо.


      1. User420 Автор
        01.03.2019 19:28

        Именно тот мануал что я имел в виду ))


  1. dernuss
    01.03.2019 18:03

    У меня пара таких программаторов сгорела, за последние 2 года.
    А программатор с буфером живёт уже много лет.


    1. User420 Автор
      01.03.2019 18:44

      Программатору уже около 3-х лет )


  1. IgorPie
    01.03.2019 18:22

    В итоге, оно через джампер программатор, либо uart? Или синхронно и ничего нажимать не нужно?


    1. User420 Автор
      01.03.2019 18:43

      В итоге одновременно и swd и uart.


      1. IgorPie
        01.03.2019 20:53

        отлично, спасибо!


        1. User420 Автор
          01.03.2019 21:36

          Пользуйтесь )


  1. alex-open-plc
    01.03.2019 18:46

    Идея — работает. «Издевался» на таком варианте: ST-Link from «Blue Pill»
    Это проще, чем ковыряться в ST-Link…


    1. User420 Автор
      01.03.2019 18:46

      За то корпус аккуратный, и удобнее чем из пилюлю в качестве программатора юзать. (Имхо)


      1. alex-open-plc
        01.03.2019 19:16

        За статью — спасибо!


        1. User420 Автор
          01.03.2019 19:27

          Пользуйтесь )


    1. IgorPie
      01.03.2019 20:57

      Защиты нет совсем. Подтяжки и т.п. не очень понятно как сделаны (ли).
      Такой вариант на работе проживет недельку, а потом скончается от замыкания выхода с выходом, замыкания на питашку/землю, и прочим «естественным» причинам


      1. olartamonov
        02.03.2019 11:15

        STM32 вообще довольно прочный в этом плане, если не шарахнуть его очень хорошим зарядом статики или 5+ вольтами, то такие программаторы живут вполне себе долго и успешно.

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


        1. IgorPie
          02.03.2019 14:49

          Я тоже так думал, пока они не начали гореть по 5 в неделю.
          Пришлось сменить шмот на с коротким рукавом, свести все земли в 1 точке и антистатический браслет туда же. Без браслета — вот опять вчера меняли МК, который то шьется, то не шьется и стабилизатор при нем сильно грелся.
          Новый шьется без проблем, стаб — холодный.


  1. ittakir
    01.03.2019 19:39

    Многовато возни чтобы заменить отдельный USB-UART за 30-60 рублей.


    1. andreili
      01.03.2019 19:58

      Самое главное — минимизация девайсов. Да и занят всего 1 USB.
      И как плюс — можно заливать прошивки без софта, работая как с флешкой.


      1. kzhyg
        01.03.2019 20:35

        Самое главное — что через год вы забудете нестандартную распиновку и будете страдать. Или у вас сгорит этот программатор, и вы будете страдать, потому что новый до переделки к старому разъёму подключать нельзя.
        Стандартизация на длинной дистанции в большинстве случаев важнее уникальности, особенно когда дело касается инструментов.


        1. ittakir
          01.03.2019 20:45

          Согласен с вами. Например, сделали плату на заказ. Человек её продал в другой город, забыл о ней, а через год вам звонит, нужно баг починить, плату перепрошить.
          Стандартный USB-UART, USBASP и STLINK можно купить в любом городе в магазине радиотоваров. Вам остается только скинуть по почте файл прошивки, а не ехать с вашим хитрым программатором в другой город.


        1. IgorPie
          01.03.2019 20:53

          У нас схожая «нестандартная» распиновка несколько лет как стандарт.

          SWD, 3.3, земля, сброс и uart_tx чтобы знать что в железке творится. Так, что инициативу поддерживаю, как и резисторы защитные (на фото программаторов их не видно, наверное, в нижнем слое).


        1. User420 Автор
          01.03.2019 20:56

          Распиновку я нацарапал на корпусе поверх старой, потому не забуду )
          А сгорать — не сгорает уже третий год.
          Расскажите, как нужно использовать программатор чтобы он сгорел?


          1. kzhyg
            01.03.2019 21:13

            Нужно иметь ламинат и похую карму)


        1. 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) желающим просто дарим.


  1. 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


  1. xFFFF
    02.03.2019 02:30

    Есть несколько вариантов модификации, и часть из них нельзя сделать если чип не подходящий (не хватит памяти).

    А как узнать, какой вариант подойдет?


    1. User420 Автор
      02.03.2019 09:08

      Если модификация не подойдет для вашего МК то программа выдаст ошибку о нехватке памяти, а вообще такая модификация там только одна, у нее есть аналог, и я это упомянул в следующей строчке

      Например, модификацию STM32+MSD+VCP можно сделать только если чип STM32F1xxCBxx, однако у нее есть аналог STM32+Audio


      1. xFFFF
        03.03.2019 13:46

        Хорошо, сейчас попробую перепрошить свой программатор)
        У меня какой-то китайский клон запаян — STM32GC102CB.))


        1. User420 Автор
          03.03.2019 14:50

          Вот на счет этой странной маркировки не уверен…
          В сети о ней разное пишут…
          Если все же решитесь прошить — обязательно сообщите о результатах.


  1. extempl
    02.03.2019 08:31

    Всё ёмко и по делу, но вот что это, для чего, почему нельзя взять сразу 2.1, в чём вообще преимущество девайса — можно было бы и добавить. Так, как инструкция — супер, как статья — не очень.


    1. User420 Автор
      02.03.2019 09:10

      В предисловии описано в чем преймущество, а так же в конце статьи.
      Почему нельзя взять сразу 2.1? Потому что их не существует по отдельности, только на платах нуклео и дискавери, что я так же упомянул в предисловии.
      Если же вам интересно знать что есть ST-Link — гугл открыт для всех)
      А не описывал я это потому что описание девайся не является целью данной статьи )


  1. Nibi
    02.03.2019 09:11

    Расскажите пожалуйста подробнее про режим прошивки с виртуальной флешки без программ. Буквально подключил и подал питание — и программатор начал зашивать?
    Что насчет битов защиты, сможет ли установить?
    Как определить, что уже прошито и проверено?
    Не пойдет ли по второму кругу шить, если в нужное время не отключить?


    1. User420 Автор
      02.03.2019 09:15

      Защиту можно установить программно в прошивке.

      Подключил программатор к программируемому девайсу и к пк.
      Закинул на виртуальную флешку файл прошивки — вылазит окно копирования файла
      Когда копирование завершится можно считать что программатор завершил прошивку.

      По второму кругу прошивка не пойдет, потому как для этого придется закинуть на него файл прошивки еще раз.


      1. User420 Автор
        02.03.2019 10:52

        Однако работает это только с файлами прошифка формата *.bin


        1. 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 байт свободно


          1. User420 Автор
            02.03.2019 11:48

            Опишите ваши действия.
            Только что проверил — скомпилировал blink в бинарный файл прошивки, закинул на программатор и bluepill начал мерцать.


            1. alex-open-plc
              02.03.2019 13:21

              Скомпилировал в bin, записал на диск программатора и ничего.
              Очистил МК, записал на диск и ничего.
              Но МК STM32F303


              1. User420 Автор
                02.03.2019 13:47

                На диске программатора, после неудачной прошивки таким способом — появляется файл FAIL.TXT.
                Что в нем?
                Если же его нет то прошивка прошла успешно.
                А если файл был до прошивки — значит скорее всего вы не правильно подключили программатор к девайсу.

                Так же, если не подключен RESET от программаторы к девайсу — программатор не будет сбрасывать девайс после прошивки, и это придется сделать вручную нажатием кнопки RESET после прошивки.


                1. alex-open-plc
                  02.03.2019 14:27

                  А вот сейчас — сработало…
                  Имя файла было "_tst.bin" — не работало, переименовал в «tst.bin» — сработало. Фантастика…
                  Reset не подпаивал, давлю кнопкой.


        1. alex-open-plc
          02.03.2019 11:34

          Хотя может сам виноват…
          Использую 103C8T6 вместо рекомендуемого 103CBT6


          1. User420 Автор
            02.03.2019 11:48

            Кем рекомендуемый?)