LINUX.ORG.RU

Помогите настроить openocd

 , ,


0

1

Пытаюсь прошить 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
В чём может быть проблема?


Поправочка

Я попробовал положить в папку /etc/udev/rules.d файл «99-openocd.rules», который взял из /usr/share/openocd/contrib. Это помогло частично: теперь openocd нормально работает с STM32F4DISCOVERY, но с STM32VLDISCOVERY по-прежнему старые проблемы. Стоит сделать интересное замечание: хоть для STM32F4DISCOVERY и STM32VLDISCOVERY - PID и VID соответствуют тем, что в файле «99-openocd.rules», но (команда lsusb) STM32F4DISCOVERY в системе называется «STMicroelectronics ST-LINK/V2», а STM32VLDISCOVERY называется «STMicroelectronics STLINK Pseudo disk».

Теперь осталось разобраться почему openocd не работает только с STM32VLDISCOVERY.

r44083
() автор топика

Вот такая ошибка появляется при попытке связаться с STM32VLDISCOVERY

Error: libusb_open() failed with LIBUSB_ERROR_NO_DEVICE
r44083
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.