Как использовать OpenOCD для одновременного разговора с двумя платами STM32?

Допустим, у меня есть два STM32, и я использую этот программатор здесь.

Я хочу подключиться к ним обоим и отлаживать / перепрошивать / выполнять независимую отладку.

Итак, установка у меня следующая:

HW

PC |-> USB1 -> ST-LINK-Programmer1 -> STM32_Board1 |-> USB2 -> ST-LINK-Programmer2 -> STM32_Board2

SW

То, как я обычно делаю это с одной доской, довольно просто.

openocd -f config.cfg

И вот файл конфигурации, который я вызываю:

source [find interface/stlink-v2.cfg] transport select hla_swd source [find target/stm32f4x.cfg] reset_config none

Затем в другом терминале я вызываю arm-gdb следующим образом:

arm-none-eabi-gdb build/FW.elf

а в ~ / .gdbinit у меня есть одна строка:

target remote localhost:3333

Что не работает

Это довольно очевидно ... Я использую порт 3333 для первого OpenOCD, но второй экземпляр пытается использовать тот же порт и не работает с

Error: couldn't bind tcl to socket: Address already in use

Что я пробовал

Я просмотрел документацию здесь, но не вижу как вызвать эти параметры в моем config.cfg файле.

Я также пробовал добавить эти команды о tcl_port и gdb_port к фактическим аргументам командной строки, например openocd -f config.cfg -c tcl_port 4444, но это тоже не работает ... Сокет все еще используется.

Мой настоящий вопрос

Как правильно это сделать? И есть ли какие-нибудь подводные камни при работе с arm-none-eabi-gdb после настройки openocd для подключения к правильному экземпляру OpenOCD?


person testname123    schedule 11.01.2018    source источник
comment
файл конфигурации имеет номер порта, как вы указали, у меня нет проблем с двумя или несколькими сеансами openocd с одного компьютера на множество устройств. Я обычно использую не-stlink в этом случае, то, что вы хотите найти для нас, может быть серийный номер или другой элемент, который вы можете использовать для каждого файла конфигурации, который связан с этим конкретным отладчиком, таким образом, файл конфигурации находит одно единственное устройство .   -  person old_timer    schedule 11.01.2018
comment
Я использую более старую версию ft2232, и есть ft2232_serial, ft2232_desc и т. Д., Они взяты из информации ftdi eeprom для этого устройства. другие вещи, такие как stlink, надеюсь, имеют что-то подобное.   -  person old_timer    schedule 11.01.2018
comment
в самом файле cfg   -  person old_timer    schedule 11.01.2018
comment
# При желании укажите серийный номер USB-устройства ST-LINK / V2. Устройства ST-LINK / V2 # имеют серийные номера с нечитаемыми символами. ST-LINK / V2 # версия прошивки ›= V2.J21.S4 рекомендуется во избежание проблем с сбросом серийного номера адаптера. # например. #hla_serial \ xaa \ xbc \ x6e \ x06 \ x50 \ x75 \ xff \ x55 \ x17 \ x42 \ x19 \ x3f   -  person old_timer    schedule 11.01.2018
comment
да, это сработало отлично, не нужны строковые вещи, просто введите номер, который вы получите от lsusb -vvv hla_serial 123456789012334   -  person old_timer    schedule 11.01.2018
comment
вы захотите взять общий файл cfg первого уровня stlink-v2.cfg в вашем случае и настроить его для каждого файла конфигурации и источника, который и / или просто включить его в свой cfg, а не искать его ... да, например, четыре строки поэтому закомментируйте источник независимо от того, что занимает строки из этого файла stlinkv2.cfg, вставьте его в свою конфигурацию, а затем добавьте строку hla_serial.   -  person old_timer    schedule 11.01.2018


Ответы (3)


stlinkv2.cfg из openocd

#
# STMicroelectronics ST-LINK/V2 in-circuit debugger/programmer
#

interface hla
hla_layout stlink
hla_device_desc "ST-LINK/V2"
hla_vid_pid 0x0483 0x3748

# Optionally specify the serial number of ST-LINK/V2 usb device.  ST-LINK/V2
# devices seem to have serial numbers with unreadable characters.  ST-LINK/V2
# firmware version >= V2.J21.S4 recommended to avoid issues with adapter serial
# number reset issues.
# eg.
#hla_serial "\xaa\xbc\x6e\x06\x50\x75\xff\x55\x17\x42\x19\x3f"

ваша конфигурация является источником этого, закомментируйте источник в этой строке файла и замените этим

interface hla
hla_layout stlink
hla_device_desc "ST-LINK/V2"
hla_vid_pid 0x0483 0x3748
hla_serial 12345623498723497

С каким бы ни был серийный номер этого конкретного stlinks (надеюсь, они различаются)

повторите с новой конфигурацией для каждого, затем измените номера портов tcp / gdb для каждого, я никогда не использую gdb, поэтому я

telnet_port 4442
gdb_port 0
tcl_port 0

lsusb -vvv

Bus 002 Device 011: ID 0483:374b STMicroelectronics ST-LINK/V2.1 (Nucleo-F103RB)
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 ?
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x0483 STMicroelectronics
  idProduct          0x374b ST-LINK/V2.1 (Nucleo-F103RB)
  bcdDevice            1.00
  iManufacturer           1 STMicroelectronics
  iProduct                2 STM32 STLink
  iSerial                 3 12345623498723497
  bNumConfigurations      1

Я придумал этот номер iSerial не мой настоящий, наверное, не имеет значения, если все знают настоящий номер для этой платы ...

Я не пробовал с двумя платами, если я добавлю строку hla_serial и использую номер iSerial, тогда она сделает свое дело. Если я изменю серийный номер, чтобы он не совпадал, это изменит принцип работы openocd, он не найдет stlink. Мне пришлось бы выкопать больше плат, чтобы полностью проверить это, но у вас уже есть эти платы под рукой, поэтому вы сможете увидеть, работает ли это для вас.

person old_timer    schedule 11.01.2018

В texane / stlink есть также очень удобная утилита под названием st-info, которая помогает узнать серийный номер Программист ST-LINK, например так:

$ st-info --probe
Found 2 stlink programmers
 serial: 543f6e06723f495507372267
openocd: "\x54\x3f\x6e\x06\x72\x3f\x49\x55\x07\x37\x22\x67"
  flash: 16384 (pagesize: 128)
   sram: 8192
 chipid: 0x0457
  descr: L011 device
 serial: 303030303030303030303031
openocd: "\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x31"
  flash: 131072 (pagesize: 2048)
   sram: 16384
 chipid: 0x0448
  descr: F07x device

Эта строка шестнадцатеричного серийного номера затем может использоваться в сценарии OpenOCD для идентификации различных программистов ST-LINK / V2, как уже было описано (hla_serial). Например:

$ cat openocd.cfg 
source [find interface/stlink.cfg]
source [find target/stm32f0x.cfg]
hla_serial "\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x31"

$ openocd -f openocd.cfg

Надеюсь, это сработает во всех случаях ...

person rel    schedule 09.03.2018

Для тех, кто хочет избежать накладных расходов, необходимых для texane / stlink, как было предложено в ответе rel, я написал крошечная C-программа для преобразования серийного номера: openocdser

person Morty    schedule 20.08.2019