Большое преимущество программатора ST-Link/v2-1 перед ST-Link/v2 заключается в том, что помимо самого программатора в v2-1 также есть встроенный USB-UART. На практике это очень удобно — меньше проводов, меньше занятых USB-портов. Как заливка прошивки, так и передача отладочного вывода происходят через одно устройство вместо двух. Есть только одна маленькая проблема. Если ST-Link/v2 можно без проблем купить на eBay, то ST-Link/v2-1 бывает только встроенным в отладочные платы семейств Discovery и Nucleo. Однако, как выяснилось, плату Nucleo довольно легко разделить на два отдельных устройства — программатор ST-Link/v2-1 и отладочную плату.
Свои безумные эксперименты я проводил над отладочной платой Nucleo-F411RE . Напомню, как она выглядит:
На приведенной фотографии верхняя часть платы содержит программатор, а нижняя — непосредственно отладочную плату. Разработчики заботливо заложили в плату возможность отделения программатора, чем мы и воспользуемся. В процессе нам пригодится схема платы, которая доступна на сайте STMicroelectronics.
Окончательный вид устройства у меня получился таким:
Программатор был отделен от платы при помощи Dremel’я. К нижней части устройства был припаян кусок макетки с штекером USB type A. Соответственно, ставший ненужным разъем MiniUSB был выпаян. На фото в левой верхней части программатора можно заметить чип в корпусе SO-8. Это МОП-транзистор с P-каналом STS7PF30L ( даташит [PDF] ). Благодаря схеме платы мы знаем, что он больше не понадобится, так что его при желании тоже можно выпаять. Питание, SWD и UART были выведены при помощи тонких проводов на разъем IDC-12. Чтобы провода не болтались, я закрепил их термоклеем. Разъем был сделан совместимым с разъемом IDC-10 в ST-Link/v2 с поправкой на добавленные пины TX и RX. На фото рядом с программатором лежит переходник из IDC-12 в IDC-10. Он просто отрезает UART, тем самым превращая программатор в ST-Link/v2.
Что же касается оставшейся части платы, то на ней предусмотрены пины для внешнего питания и выведены SWDIO и SWCLK (PA13 и PA14 соответственно). Так что, после операции она все еще программируется. Правда, плата разведена таким образом, что после отрезания программатора ломается UART (пины PA2 и PA3), поэтому его придется подпаять. Для удобства я решил вывести все необходимые для программирования и отладки пины на разъем IDC-12. Вот что получилось в итоге:
Нижнюю часть платы вам лучше не видеть 🙂 Таким образом, программатор можно соединить с отладочной платой соответствующим шлейфом, после чего все работает, как раньше. Только программатор теперь можно использовать и с другими платами. В частности, в будущих ревизиях своей LimeSTM32 я собираюсь заменить разъем IDC-10 на IDC-12, выведя на него и UART.
В этом контексте я хотел бы порекомендовать серию статей «Reverse-engineering ST-Link firmware» в блоге lujji.github.io ( часть 1 , часть 2 ). Статьи рассказывают о том, как сдампить прошивку ST-Link/v2-1 в обход защиты от чтения, которая есть во всех программаторах. Для клонирования программатора понадобится микроконтроллер STM32F103C B T6 со 128 Кб flash-памяти (не STM32F103C 8 T6 с 64 КБ памяти). Такого микроконтроллера у меня не было, да и серийное производство я не планирую, поэтому мне было проще получить отдельный ST-Link/v2-1, просто отрезав его от платы Nucleo. Но вам, возможно, больше придется по душе вариант с созданием клона.
Следует однако иметь в виду, что автор не выложил готового дампа прошивки, а значит вам понадобится плата Nucleo или Discovery, и некоторое количество времени на получение дампа. Если вас интересует готовый дамп, то в открытом доступе на момент написания этих строк, похоже, есть только дамп ST-Link/v2. Например, в статье How to program blank STM32F1 with STLINK V2 firmware на сайте e.pavlin.si вы найдете как дамп, так и готовую плату для создания клона ST-Link/v2.
Дополнение: Дамп ST-Link/v2-1 появился в публичном доступе. Подробности ищите в статье Делаем ST-Link V2.1 из китайского ST-Link V2 за авторством User420.
Дополнение: Вас также может заинтересовать пост Программируем/отлаживаем микроконтроллеры STM32 при помощи OpenOCD и FT2232HL .