
Возможность высокоскоростной аппаратной работы с интерфейсами UART, SPI, I2C, JTAG/SWD, GPIO.
Возможность работы с низковольтными (от 1.2в) интерфейсами с автоматическим, или принудительным определением вольтажа обмена.
Реализована отключаемая гальваническая изоляция UART.
Имеется возможность принудительного сброса устройства без извлечения USB коннекторов.
Присутствует индикация основных режимов работы устройства.
Связь с хостом осуществляется через разъем USB-TypeC.
Компактные размеры 44x44x15мм.
UART:
SPI:
I2C:
JTAG/SWD:
Debug targets:
ARM: AArch64, ARM11, ARM7, ARM9, Cortex-A/R (v7-A/R), Cortex-M (ARMv{6/7/8}-M),
FA526, Feroceon/Dragonite, XScale.
ARCv2, AVR32, DSP563xx, DSP5680xx, EnSilica eSi-RISC, EJTAG (MIPS32, MIPS64),
ESP32, ESP32-S2, ESP32-S3, Intel Quark, LS102x-SAP, RISC-V, ST STM8,
Xtensa.
Flash drivers:
ADUC702x, AT91SAM, AT91SAM9 (NAND), ATH79, ATmega128RFA1, Atmel SAM, AVR, CFI,
DSP5680xx, EFM32, EM357, eSi-RISC, eSi-TSMC, EZR32HG, FM3, FM4, Freedom E SPI,
GD32, i.MX31, Kinetis, LPC8xx/LPC1xxx/LPC2xxx/LPC541xx, LPC2900, LPC3180, LPC32xx,
LPCSPIFI, Marvell QSPI, MAX32, Milandr, MXC, NIIET, nRF51, nRF52, NuMicro,
NUC910, Nuvoton NPCX, onsemi RSL10, Orion/Kirkwood, PIC32mx, PSoC4/5LP/6,
Raspberry RP2040, Renesas RPC HF and SH QSPI,
S3C24xx, S3C6400, SiM3x, SiFive Freedom E, Stellaris, ST BlueNRG, STM32,
STM32 QUAD/OCTO-SPI for Flash/FRAM/EEPROM, STMSMI, STR7x, STR9x, SWM050,
TI CC13xx, TI CC26xx, TI CC32xx, TI MSP432, Winner Micro w600, Xilinx XCF,
XMC1xxx, XMC4xxx.
GPIO:

микропереключатели выбора работы устройства. Положение активации - сдвинутое вниз, к плате.
Служит для подключения SPI и других интерфейсов через преобразователь уровней.
Изначально выводы данного разъема спроектированы таким образом, чтобы не мешать работе подключенных к нему устройств и находятся в высокоимпедансном состоянии.
Активация данного разъема может происходить автоматически, с помощью низкого уровня напряжения на выводе GPIO-AD7 (Доп. параметр для flashrom v1.3+ - gpiol3=L ).
Имеется возможность принудительной активации разъема с помощью микропереключателя SW:3.
Выбор напряжения обмена происходит автоматически и равно напряжению приложенному к выводу VCC в диапазоне от 1.2 до 3 вольт.
Также можно не подключать вывод VCC, а выбрать напряжение обмена принудительно с помощью микропереключателей SW:1(1.8v), либо SW:2 (2.5v).
При включенном положении данных переключателей вывод VCC становится выходом и может питать подключенное устройство заданным напряжением (ток не более 100мА).
Осторожно
Соответствие выводов разъема GPIO:
| SPI | GPIO |
|---|---|
| SCLK | AD0 |
| MOSI | AD1 |
| MISO | AD2 |
| CS_0 | AD3 |
Служит для подключения изолированного UART.
Активация данного разъема происходит с помощью микропереключателя SW:4.
Выбор напряжения обмена происходит автоматически и равно напряжению приложенному к выводу VCC в диапазоне от 3 до 5 вольт.
Также можно не подключать вывод VCC, а выбрать напряжение обмена принудительно с помощью микропереключателей SW:5(3.3v), либо SW:6 (5v). При включенном положении данных переключателей вывод VCC становится выходом и может питать подключенное устройство заданным напряжением (ток не более 100мА для 3.3v и не более 400мА для 5v).
В данном режиме теряется гальваническая изоляция, а микропереключатель SW:7(GND) должен быть активирован в обязательном порядке.
Осторожно
Соответствие выводов разъема GPIO:
| UART | GPIO |
|---|---|
| TX | AD0 |
| RX | AD1 |
пропускание сигналов ограничено направленностью изолятора
Служит для подключения любых поддерживаемых интерфейсов. (UART, SPI, I2C, JTAG, GPIO).
Уровни напряжений на данном разъеме 3.3 вольта, толерантны к 5 вольтам. Для удобства подключений, каждый функциональный вывод данного разъема продублирован выводом GND (ряд у края платы).
Для некоторых режимов работы требуется соединение между собой контактов AD1 и AD2. Для удобства, данный функционал предусмотрен переключателем SW:10(SDA2).
Для работы интерфейса I2C предусмотрена подтяжка к напряжению 3.3 вольта, которая активируется с помощью переключателей SW:8(SCL) и SW:9(SDA1).
Для питания внешних устройств предусмотрены выводы 3.3 и 5 вольт (ток не более 100мА для 3.3v и не более 400мА для 5v).
Осторожно
Функциональное назначение:
| GPIO | UART | SPI | JTAG | I2C |
|---|---|---|---|---|
| AD0 | TX | SCLK | TCK | SCK |
| AD1 | RX | MOSI | TDI | SDA/O |
| AD2 | RTS | MISO | TDO | SDA/I |
| AD3 | CTS | CS | TMS | |
| AD4 | DTR | CS1 | ||
| AD5 | DSR | CS2 | ||
| AD6 | DCD | CS3 | ||
| AD7 | RI | CS4 | RCLK | RSCK |
Предполагается что пользователь, следующий данной инструкции, имеет базовые представления о том как пользоваться консолью Linux, в том числе с повышенными привилегиями, устанавливать пакеты в своей системе, пользоваться поисковыми системами для устранения возможных сообщений об ошибках.
Для начала нужно собрать flashrom версии не ниже 1.3 из исходного кода, перед сборкой в системе необходимо иметь библиотеки libftdi и libusb.
Если в системе уже есть flashrom другой версии, для удобной работы можно создать симлинк собранной версии программы, но с другим именем в директории /usr/bin, например команда
# ln -s flashrom /usr/bin/flashrom-dev, запущенная в директории с собранной программой, создаст симлинк и позволит использовать команду flashrom-dev из любого каталога.
Подключение к чипу памяти производится согласно назначению разъемов.
Команда для проверки наличия обмена с чипом памяти, с автоматической активацией преобразователя логических уровней:
flashrom-dev -p ft2232_spi:type=232H,divisor=2,gpiol3=L
где:
-p ft2232_spi:type=232H,divisor=2,gpiol3=L - выбор программатора и параметров обмена;
параметр divisor=2 - настройка частоты обмена по формуле 60_Мгц / divisor, divisor может быть только целым четным числом от 2 до 2^17 (= 131072). Стабильная частота для конкретного чипа и шлейфа подбирается опытным путем, рекомендуемо для внутрисхемной прошивки выбирать divisor не меньше 6 (то есть 10_Мгц и меньше);
параметр gpiol3=L - активация преобразователя логических уровней, через gpio AD7.
Для работы с чипами рекомендуется ознакомиться с инструкцией на flashrom, среди удобных функций рекомендуется обратить внимание на возможность работы с регионами памяти через файл layout.
Иногда для корректной работы нужно указать непосредственно название чипа памяти, о чем подскажет вывод в консоль, например:
Found Micron/Numonyx/ST flash chip "N25Q512..1G" (65536 kB, SPI) on ft2232_spi.
Found Micron flash chip "MT25QU512" (65536 kB, SPI) on ft2232_spi.
Multiple flash chip definitions match the detected chip(s): "N25Q512..1G", "MT25QU512"
Please specify which chip definition to use with the -c <chipname> option.
в данном случае следует выбрать чип из предложенных, например ... -с MT25QU512
пример команды для прошивки с верификацией:
flashrom-dev -p ft2232_spi:type=232H,divisor=10,gpiol3=L -c "MT25QU256" -w rom.bin --progress
где rom.bin файл прошивки, а ключ --progress позволяет видеть прогресс загрузки
Для примера выбрана IDE VS-Code и микроконтроллер STM32F103C8T6. IDE и контроллер могут быть любыми, которые поддерживают отладку через OpenOCD.
Начальный код сгенерирован STM32CubeMX
Действия производились в ArchLinux на ядре 6.4.8-arch1-1 (64-бита), с установленным пакетным менеджером yay
sudo pacman -Sy openocd $(pacman -Ssq arm-none-eabi) clang ninja cmake llvm meson
yay -Sy visual-studio-code-bin stm32cubemx
Далее устанавливаются расширения в VS-Code:
ms-vscode.cpptools-extension-pack
marus25.cortex-debug
mcu-debug.memory-view
rioj7.command-variable
actboy168.tasks
cschlosser.doxdocgen
file -> new project ->
(в строке поиска открывшегося селектора) commercial part number: stm32f103c8t6
в правом нижнем углу появляются результаты поиска, выделяется нужный МК, далее вкладка docs & resources, находится system view description, скачивается архив с svd файлами, которые понадобятся для проекта.
Далее кнопка start project -> конфигурация МК в зависимости от отладочной платы, или проекта.
Для удобства отладки и снятия необходимости переводить плату в "загрузочный" режим сразу настраивается отладочный интерфейс system core -> sys -> debug: serial wire.
После настройки интерфейсов, модулей и используемых частот,
вкладка project manager -> вкладка project
project name: projectname
project location: .../stm32projects
toolchain/ide: makefile
Вкладка code generator -> stm32cube mcu packages and embedded software packs
тут можно выбрать копировать файлы библиотек в каталог, или использовать ссылки на библиотеки.
Далее кнопка generate code. На этом CubeMX можно закрыть.
В каталог с проектом .../stm32projects/projectname копируется скачанный ранее файл svd под нужную серию МК (stm32f103.svd).
В нем же создается подкаталог .vscode, внутри которого создаются файлы launch.json и tasks.json со следующим содержимым:
{
"version": "2.0.0",
"configurations": [
{
"name": "OCD-Debug",
"type": "cortex-debug",
"request": "launch",
"cwd": " ${workspace$Root}",
"servertype": "openocd",
"executable": "./build/ ${workspaceFolderBasename}.elf",
"svdFile": "STM32F103.svd",
"configFiles": [
"interface/ftdi/ft232h-module-swd.cfg",
"target/stm32f1x.cfg"
],
"runToEntryPoint": "main",
"showDevDebugOutput": "none",
"preLaunchTask": "Build"
},
{
"name": "OCD-Flash",
"type": "cortex-debug",
"request": "launch",
"cwd": "${workspaceRoot}",
"servertype": "openocd",
"executable": "./build/ ${workspaceFolderBasename}.elf",
"svdFile": "STM32F103.svd",
"configFiles": [
"interface/ftdi/ft232h-module-swd.cfg",
"target/stm32f1x.cfg"
],
"preLaunchTask": "Write firmware"
}
]
}
{
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"type": "shell",
"group": "build",
"command": "make",
"problemMatcher": []
},
{
"label": "Clean",
"type": "shell",
"group": "build",
"command": "make clean",
"problemMatcher": []
},
{
"label": "Write firmware",
"type": "shell",
"command": "make clean \n make \n openocd -f interface/ftdi/ft232h-module-swd.cfg -f target/stm32f1x.cfg -c 'program ./build/${workspaceFolderBasename}.bin verify reset exit' ",
"problemMatcher": []
}
]
}
После этого каталог с проектом открывается в VS-Code через контекстное меню. Подтверждается доверие авторам файлов в каталоге.
Подключение МК к устройству производится согласно назначению разъемов.
В случае с STM32F1 это SWD интерфейс:
| GPIO | STM32 |
|---|---|
| AD0 | SWCLK |
| AD1/AD2 | SWDIO |
| 3.3v | 3.3v |
| GND | GND |
Чтобы объединить AD1 и AD2 активируется микропереключатель SW:10(SDA2).
После этого устройство подключается к хосту.
В VS-Code во вкладке Запуск и отладка должны быть доступны созданные ранее задачи: OCD-Debug и OCD-Flash.
Драйверы для работы с UART можно загрузить с сайта производителя
Так же драйверы и утилиты использующиеся в инструкции имеются в openocd-20230202.7z (openocd/drivers)
Устройство должно определиться как стандартный COM-Port.
Для работы Flashrom и OpenOCD необходимо заменить драйверы на WinUSB, для этого:
Запускаем Zadig, вкладка options - чекбокс List All Devices.
Из выпадающего списка выбираем устройство Storm_Bridge, драйвер выбираем WinUSB, нажимает кнопку Replace Driver.
При успешной замене драйверов устройство должно переместиться в класс "Устройства USB". Соответственно стандартный COM-Port более не будет доступен
Для быстрой подмены уже имеющихся драйверов в архиве c openocd имеется утилита UsbDriverTool.exe.
Для работы с Flashrom распаковываем архив с предварительно компилированной программой.
Так же можно собрать Flashrom самостоятельно, подробнее на https://github.com/flashrom/flashrom .
В папке с flashrom.exe открываем командную строку. Команды для работы аналогичны инструкции для Linux:
для запроса типа подключенной микросхемы
flashrom -p ft2232_spi:type=232H,divisor=2,gpiol3=L
Открываем CubeIDE создаем проект, для теста выбран STM32F103C8T6.
Настраиваем периферию. Сохраняем, генерируется начальный код.
Открываем вкладку Run - External Tools - External Tools Configurations
Нажимаем кнопку New lauch configurations.
Для удобства называем новую конфигурацию GDB_C8T6.
Location: patchto\openocd-20230202\OpenOCD-20230202-0.12.0\bin\openocd.exe
Working Directory: patchto\openocd-20230202\OpenOCD-20230202-0.12.0\
Arguments: -f interface/ftdi/ft232h-module-swd.cfg -f target/stm32f1x.cfg
Сохраняем.
Вкладка Run - Debug Configurations
Создаем новую конфигурацию в STM32 Cortex-M C/C++ Application
Для удобства называем новую конфигурацию OpenOCD_C8T6.
Во вкладке Debugger созданного проекта:
Connect to remote GDB server
Port nimber 3333
Debug probe ST-LINK (OpenOCD)
снять чекбокс Enable live expressions
Сохраняем.
Для удобства создаем Launch Group
Называем C8T6
Добавляем созданный ранее GDB_C8T6
Launch mode: Run
установить чекбокс Adopt launch if already running.
ОК
Добавляем созданный ранее OpenOCD_C8T6
Launch mode: Debug
установить чекбокс Adopt launch if already running
ОК - Сохраняем.
Теперь в выпадающем списке отладки должна быть доступна созданная группа запуска, нажав на нее начнется отладка.