Поддерживает ли OpenOCD + STLINK-V3SET отладку нескольких контроллеров в конфигурации последовательного подключения? - PullRequest
3 голосов
/ 22 апреля 2020

Я бы хотел запустить многоядерную отладку с моим адаптером STLINK. У меня есть опыт отладки с другими инструментами (например, uTrace / Trace32 от Lauterbach). Теперь я хотел бы установить многоядерный механизм как домашний проект, где у меня нет uTrace, а есть только разные версии STLink (намного дешевле). К сожалению, у меня нет опыта использования OpenOCD. Любая помощь высоко ценится!

То, что я сделал до сих пор

  1. RTFM. 1 Я вижу много типичные случаи использования в руководстве, но не систематическое описание c, в котором команды включают / требуют (какие) подкоманды. Это мешает распознать решение моего (exoti c?) Варианта использования.

  2. Настройка рабочей одноядерной конфигурации OpenOCD:

    • Сгенерированная конфигурация файл использует примеры файлов сценариев OpenOCD из установки: stlink.cfg (интерфейс: hla), stm32f1x.cfg (swj-dp.tcl, mem_helper.tcl)
    • Эта установка работает хорошо - но только с одной платой / ядро ...! Тем не менее, это показывает, что мои STLINK и целевые платы в порядке, и версии инструментов могут (в принципе) связываться друг с другом.
  3. Проверены другие файлы примеров OpenOCD среди моего STM32CubeIDE установка.

    stm32h7x_dual_core.cfg предназначена для неправильного µ-контроллера, но включает в себя двухъядерный вариант. Внутри я обнаружил это предупреждение:

    # Issue a warning when hla is used, and fallback to single core configuration
    if { [set $_CHIPNAME.DUAL_CORE] && [using_hla] } {
        echo "Warning : hla does not support multicore debugging"
        set $_CHIPNAME.DUAL_CORE 0
    }
    

    Следовательно, interface hla нельзя использовать для многоядерной отладки (насколько этот комментарий верен, и я его понимаю).

[EDIT]

Интеграция двухъядерных вариантов в семействе STM32H7 описана здесь, Тем не менее, эти контроллеры содержат только одну TAP в цепочке JTAG, которая обеспечивает доступ к нескольким портам доступа (AP) на внутренней шине за ней.

[/ EDIT]


Следующие шаги описывают, как я пытался запустить конфигурацию STLINK / JTAG для одной платы с интерфейсом, отличным от hla.

Ищите другие опции interface в OpenOCD

OpenOCD поддерживает ряд различных интерфейсов,

     **C:\Temp>** C:\ST\STM32CubeIDE_1.3.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.openocd.win32_1.3.0.202002181050\tools\bin\openocd.exe -c "interface st-link" -c "transport list"
     Open On-Chip Debugger 0.10.0+dev-01193-g5ce997d (2020-02-20-10:57)
     Licensed under GNU GPL v2
     For bug reports, read
             http://openocd.org/doc/doxygen/bugs.html
     The following transports are available:
             jtag
             aice_jtag
             stlink_swd
             stlink_jtag
             swd
             stlink_swim
             hla_jtag
             hla_swd
     [...]

, но вместе с моим STLINK я получаю interface связанные сообщения об ошибках, если я не выберу вариант hla или один из следующих двух:

  • stlink_swd - SWD не будет поддерживать последовательные цепочки, поэтому это не вариант для я!

  • stlink_jtag - JTAG - это то, что я ищу, но, похоже, это не работает:

    со следующим минимальным (?) скриптом

        interface st-link
        transport select stlink_jtag
    

    У меня нет соединения, кроме следующего журнала (активация большого количества отладки):

        Debug: 17 15 options.c:184 add_default_dirs(): bindir=/src/work/openocd/win32/build/bin
        Debug: 18 15 options.c:185 add_default_dirs(): pkgdatadir=/src/work/openocd/win32/build/share/openocd
        Debug: 19 15 options.c:186 add_default_dirs(): exepath=C:/ST/STM32CubeIDE_1.3.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.openocd.win32_1.3.0.202002181050/tools/bin
        Debug: 20 15 options.c:187 add_default_dirs(): bin2data=../share/openocd
        Debug: 21 15 configuration.c:42 add_script_search_dir(): adding C:\Users\x\AppData\Roaming/OpenOCD
        Debug: 22 15 configuration.c:42 add_script_search_dir(): adding C:/ST/STM32CubeIDE_1.3.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.openocd.win32_1.3.0.202002181050/tools/bin/../share/openocd/site
        Debug: 23 15 configuration.c:42 add_script_search_dir(): adding C:/ST/STM32CubeIDE_1.3.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.openocd.win32_1.3.0.202002181050/tools/bin/../share/openocd/scripts
        Debug: 24 15 configuration.c:97 find_file(): found openocd.cfg
        Debug: 25 15 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_interface st-link
        Debug: 26 15 command.c:143 script_debug(): command - interface ocd_interface st-link
        Debug: 28 15 command.c:364 register_command_handler(): registering 'ocd_st-link'...
        Debug: 29 15 command.c:364 register_command_handler(): registering 'ocd_st-link'...
        Debug: 30 15 command.c:364 register_command_handler(): registering 'ocd_st-link'...
        Debug: 31 15 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_transport select stlink_jtag
        Debug: 32 15 command.c:143 script_debug(): command - ocd_transport ocd_transport select stlink_jtag
        Debug: 33 15 adi_v5_stlink.c:223 stlink_jtag_select(): stlink_jtag_select()
        Debug: 34 15 command.c:364 register_command_handler(): registering 'ocd_stlink_dap'...
        User : 35 15 command.c:693 command_run_line(): stlink_jtag
        User : 36 15 command.c:695 command_run_line(): 
        Info : 37 15 server.c:311 add_service(): Listening on port 6666 for tcl connections
        Info : 38 15 server.c:311 add_service(): Listening on port 4444 for telnet connections
        Debug: 39 15 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_init
        Debug: 40 15 command.c:143 script_debug(): command - init ocd_init
        Debug: 42 15 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_target init
        Debug: 43 15 command.c:143 script_debug(): command - ocd_target ocd_target init
        Debug: 45 15 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_target names
        Debug: 46 15 command.c:143 script_debug(): command - ocd_target ocd_target names
        Debug: 47 15 target.c:1438 handle_target_init_command(): Initializing targets...
        Debug: 48 15 stlink_usb.c:3755 stlink_dap_init(): stlink_dap_init()
        Debug: 49 15 stlink_usb.c:2674 stlink_usb_open(): stlink_usb_open
        Debug: 50 15 stlink_usb.c:2688 stlink_usb_open(): transport: 2 vid: 0x0483 pid: 0x3744 serial: 
        Debug: 51 15 stlink_usb.c:2688 stlink_usb_open(): transport: 2 vid: 0x0483 pid: 0x3748 serial: 
        Debug: 52 15 stlink_usb.c:2688 stlink_usb_open(): transport: 2 vid: 0x0483 pid: 0x374b serial: 
        Debug: 53 15 stlink_usb.c:2688 stlink_usb_open(): transport: 2 vid: 0x0483 pid: 0x3752 serial: 
        Debug: 54 15 stlink_usb.c:2688 stlink_usb_open(): transport: 2 vid: 0x0483 pid: 0x374d serial: 
        Debug: 55 15 stlink_usb.c:2688 stlink_usb_open(): transport: 2 vid: 0x0483 pid: 0x374e serial: 
        Debug: 56 15 stlink_usb.c:2688 stlink_usb_open(): transport: 2 vid: 0x0483 pid: 0x374f serial: 
        Debug: 57 15 stlink_usb.c:2688 stlink_usb_open(): transport: 2 vid: 0x0483 pid: 0x3753 serial: 
        Info : 58 46 stlink_usb.c:1000 stlink_usb_version(): STLINK V3J6M2B4S1 (API v3) VID:PID 0483:374F
        Info : 59 46 stlink_usb.c:2810 stlink_usb_open(): using stlink api v3
        Debug: 60 46 stlink_usb.c:1230 stlink_exit_mode(): MODE: 0x01
        Debug: 61 46 stlink_usb.c:1278 stlink_usb_init_mode(): MODE: 0x01
        Info : 62 46 stlink_usb.c:1032 stlink_usb_check_voltage(): Target voltage: 3.278671
        Debug: 63 46 stlink_usb.c:1303 stlink_usb_init_mode(): MODE: 0x01
        Debug: 64 46 stlink_usb.c:1130 stlink_usb_mode_enter(): stlink_usb_mode_enter(JTAG)
        Debug: 65 46 stlink_usb.c:740 stlink_usb_error_check(): UNKNOWN_JTAG_CHAIN
        Error: 66 46 stlink_usb.c:2819 stlink_usb_open(): init mode failed (unable to connect to the target)
        Debug: 67 46 stlink_usb.c:1230 stlink_exit_mode(): MODE: 0x01
        Debug: 68 46 command.c:642 run_command(): Command failed with error code -4
        User : 69 46 command.c:705 command_run_line(): 
    

Проверьте OpenOCD архивы списков рассылки.

Есть некоторые подсказки, что многоядерный JTAG + STLINK не был поддержан в более ранних версиях OpenOCD, но были некоторые (предварительные?) изменения в коде драйвера STLINK в OpenOCD, которые я не могу Т понять. Поэтому мне все еще интересно, каким является текущий статус.

Вопрос

Кто-нибудь знает, поддерживает ли OpenOCD JTAG через STLINK вообще или я тщетно пытаюсь? Нужно ли добавлять правильные определения JTAG-цепочки / TAP / target, чтобы избавиться от базовых c сообщений об ошибках, или бессмысленно пытаться продолжить?


Подробнее - Я использую следующие версии инструментов:

  • STM32CubeIDE для Windows, версия: 1.3.1 (сборка: 6291_20200406_0752 (UT C)), в том числе
  • OpenOCD , Версия 0.10.0 + dev-01193-g5ce997d (2020-02-20-10: 57)
  • STLINK-V3SET (Info : STLINK V3J6M2B4S1 (API v3) VID:PID 0483:374F)
  • Целевые платы: 2x MCBSTM32 , включая STM32F103RB (С платами с ядром (STM32F4 / STM32L4) я мог бы попробовать то же самое - но я думаю, что это не главное).

1 «Руководство пользователя OpenOCD», 0.10.0 + dev, STM, 20 февраля 2020 г. ( st-openocd. pdf , часть установки STM32CubeIDE)

...