Пытаюсь прошить STM32F100RB (на плате STM32VLDISCOVERY) с помощью openocd в Linux (Mint). В windows нормально работает (после замены драйвера c USBSTOR на WinUSB с помощью Zadig). В Linux получаю вот такую ошибку:
pc0@pc0-System-Product-Name ~/1-internet/STM32-test2-FatFs $ make program
- programming with openocd...
openocd -c "source [find interface/stlink-v1.cfg]" -c "transport select hla_swd" -c "source [find target/stm32f1x.cfg]" -c "program ./out/hex/STM32-test2-FatFs.elf" -c "verify_image ./out/hex/STM32-test2-FatFs.elf" -c "reset run" -c "exit"
Open On-Chip Debugger 0.9.0 (2015-11-28-18:44)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
hla_swd
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
none separate
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : clock speed 950 kHz
in procedure 'program'
in procedure 'init' called at file "embedded:startup.tcl", line 473
in procedure 'ocd_bouncer'
** OpenOCD init failed **
shutdown command invoked
make: *** [program] Ошибка 1
Файла startup.tcl в папке со скриптами openocd нет.
Для того, что бы openocd работал с ST-Link, я также положил файл «49-stlinkv1.rules» в папку /etc/udev/rules.d. Вот содержание этого файла:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3744", \
MODE:="0666", \
SYMLINK+="stlinkv1_%n"
Ниже привожу отрывок из makefile, с параметрами openocd:
# Настройка openocd для работы с интерфейсом и контроллером:
OPENOCD_PARAMS = -c "source [find interface/stlink-v1.cfg]"
OPENOCD_PARAMS += -c "transport select hla_swd"
OPENOCD_PARAMS += -c "source [find target/stm32f1x.cfg]"
# Настройка openocd для прошивки контроллера:
OPENOCD_PARAMS_LOAD = $(OPENOCD_PARAMS)
OPENOCD_PARAMS_LOAD += -c "program $(ELF)"
#OPENOCD_PARAMS_LOAD += -c "flash write_image $(ELF)"
OPENOCD_PARAMS_LOAD += -c "verify_image $(ELF)"
OPENOCD_PARAMS_LOAD += -c "reset run"
OPENOCD_PARAMS_LOAD += -c "exit"
...
program:
@echo - programming with $(FLASHER)...
ifeq ($(FLASHER),openocd)
$(FLASHER) $(OPENOCD_PARAMS_LOAD)
endif