Openocd windows что это

Записки программиста

Программируем/отлаживаем микроконтроллеры STM32 при помощи OpenOCD и FT2232HL

OpenOCD (Open On-Chip Debugger) — это открытое ПО для программирования и отладки различного железа. Допустим, к вашему компьютеру подключен один из программаторов, поддерживаемых проектом. OpenOCD позволяет сходить через программатор в некий микроконтроллер или FPGA, используя такой протокол, как JTAG или SWD. В качестве более конкретного примера, рассмотрим, как OpenOCD может быть использован для прошивки и отладки микроконтроллеров STM32.

В качестве программатора было решено использовать плату на базе чипа FT2232HL. Ранее такая плата была использована в статье Реверс-инжиниринг роутера на примере GL.iNet GL-AR750 для чтения SPI flash. Напомню, как она выглядит:

OpenOCD поддерживает и другие программаторы, не исключая STLink/v2. FT2232HL был выбран по той причине, что он более универсален, то есть, работает не только с STM32. Кроме того, он может быть использован для одновременного хождения в микроконтроллер как по SWD, так и UART. Таким образом, плата предоставляет функционал, аналогичный функционалу STLink/v2-1. Только, в отличие от последнего, FT2232HL и платы на его основе продаются где угодно.

Fun fact! Существует аналогичная, но куда более компактная плата, имеющая разъем Micro USB. Называется FT2232H-56Q MINI MDL. Но и цена такой платы составляет

15$ за ту плату, что использовал я. Документация на плату со схемой и всяким таким находится здесь [PDF].

Подключение к отладочной плате (я использовал LimeSTM32) производится так:

FT2232HL STM32
———— ———
GND GND
3V3 3V3
ADBUS0 SWCLK
ADBUS2 SWDIO
CDBUS0* (TX2) RX
CDBUS1* (RX2) TX

ADBUS1 R, 470 Ohm sudo openocd -f . / ftdi.cfg -f target / stm32f4x.cfg

Второй файл создавать не нужно. OpenOCD сам найдет его в /usr/share/openocd.

Оставляем OpenOCD работать, во втором терминале говорим:

Чтобы прошить микроконтроллер, в telnet’е выполняем команды:

Чтобы каждый раз не открывать несколько терминалов, все написанное выше можно сделать одной командой:

Заметьте, что в этом случае мы вынуждены явно выполнять команду init .

Одновременно с прошивкой микроконтроллера по SWD, мы можем ходить по UART, используя файл /dev/ttyUSB1 и какой-нибудь screen. Удобно.

Также мы можем воспользоваться отладчиком. Для этого в одном терминале запускаем OpenOCD, а во втором говорим:

В отладчике выполняем команды:

Теперь мы можем отлаживать прошивку, как обычно. Например, сказать:

А чтобы каждый раз не вводить много команд, можно просто дописать где-нибудь в Makefile:

Подробности об использовании GDB ищите в заметке Памятка по отладке при помощи GDB.

Вот и вся наука! Чтобы постоянно не возиться с проводами и резисторами, понятно, можно один раз спаять подходящий переходник. Лично я в последнее время предпочитаю использовать разъемы IDC-12 и соответствующие кабели. Один конец втыкается в отладочную плату, второй — в переходник с FT2232HL, и все просто работает.

А пользуетесь ли вы OpenOCD, и если да, то что программируете и/или отлаживаете с его помощью?

Начало работы с OPENOCD с использованием адаптера FT2232H для отладки SWD


  • Начало работы с OPENOCD с использованием адаптера FT2232H для отладки SWD

    Узнайте, как легко мигать ваш MCU на основе ARM, используя отладчик OpenOCD с адаптером FT2232H.

    Читайте также:  Пакет active directory windows 10

    Старые MCU от таких поставщиков, как ATMEL и MICROCHIP, такие как PIC16F и семейства Atmega, имеют специальный программный интерфейс для программирования внутренней вспышки. Например, Atmega использовала штырьки SPI (MISO, MOSI, SCK) и PIC использовали два вывода (PGC, PGD) — один как часы, а другой как двунаправленную линию данных.

    Новые MCU, особенно с ядром ARM, используют JTAG / SWD в качестве интерфейса программирования / отладки.

    В чем разница между Joint Test Action Group (JTAG) и Serug Wire Debug (SWD) «text-align: center;»>

    Сигналы интерфейса SWD

    Обзор OpenOCD

    Открытый On-Chip Debugger (OpenOCD) — это бесплатный проект с открытым исходным кодом, целью которого является предоставление отладки, внутрисистемного программирования и пограничного сканирования с использованием адаптера отладки. Адаптер — это аппаратный модуль, который обеспечивает правильные сигналы для понимания цели.

    Отладчик OpenOCD поддерживает множество адаптеров отладки, которые можно просмотреть на веб-сайте OpenOCD.

    Чтобы сделать работу OpenOCD, вы должны настроить ее с помощью команд или с помощью файлов конфигурации. Когда конфигурация завершена и установлено соединение с целью, OpenOCD начнет работать как демон. Daemon — это фоновый процесс, который отвечает на запросы служб. OpenOCD теперь будет ожидать подключения от GDB, Telnet или других других каналов и обрабатываемых команд.

    Блок-схема OpenOCD

    Обзор FT2232H

    FT2232H — это двойной высокоскоростной USB-порт для универсальной UART / FIFO IC. Это означает, что это одночиповый USB с двумя портами.

    Каждый порт оснащен двигателем, называемым Multi-Protocol Synchronous Serial Engine (MPSSE), который упрощает синхронный последовательный протокол (от USB до JTAG, I2C, SPI или бит-бит). Это позволяет пользователям настраивать канал с нужным протоколом. MPSSE доступны на канале A и канале B и могут быть настроены для разрешения любого синхронного последовательного протокола.

    Будьте внимательны перед выбором OpenOCD

    Выбор OpenOCD в качестве инструмента для отладки с помощью адаптера, такого как FT2232H, является очень хорошим выбором, если у вас нет большого бюджета для работы.

    Помимо бесплатного и открытого исходного кода, OpenOCD также имеет хорошее сообщество поддержки. НО, как и в любом другом инструменте с открытым исходным кодом, вы можете столкнуться с ошибками, которые вам могут понадобиться исправить самостоятельно.

    Мне потребовалось некоторое время, чтобы понять, как заставить OpenOCD работать и запускать мой MCU, и я надеюсь, что этот учебник станет хорошей и полной ссылкой.

    Кроме того, я советую любому, кто ищет инструменты для отладки, выбирать с умом. Например, если вам нужен простой инструмент, я думаю, что OpenOCD, возможно, не лучший выбор для вас!

    Другими хорошими альтернативными инструментами отладки являются:

    • Segger J-Link
    • ULINK
    • Отладчики по умолчанию, встроенные в оценочные платы (например, STM32, EFM32 и другие семейства MCU) поставщиками кремния

    В заключение, если у вас нет большого бюджета, времени или терпения, OpenOCD с FT2232H будет отличным выбором для вас.

    Требования

    Вот что вам нужно для завершения этого учебника:

    ОС Windows или Linux с рабочей копией OpenOCD

    Давайте рассмотрим каждую пьесу индивидуально.

    Вы можете получить дешевый от китайских поставщиков, таких как Taobao, Alibaba и AliExpress. Я заказал у меня из Taobao около 14 долларов.

    Вы также можете заказать официальный модуль FTDI, мини-модуль FT2232H.

    Платформы FT2232H
    • ОС Windows или Linux с рабочей копией OpenOCD:

    Windows: вы можете получить исполняемую версию OpenOCD из неофициальных двоичных пакетов.

    Linux: вы можете получить его из пула пакетов вашего дистрибутива Linux, такого как debian package.

    Или вы можете построить его из исходного кода, трудный путь! Это маршрут, который я выбрал, лично. Вы можете найти полезные руководства о том, как это сделать, например, от Dangerous Prototypes (для Windows) или eLinux (для Linux). Вы также можете прочитать инструкции по компиляции из исходного кода OpenOCD (README.Windows и README).

    Читайте также:  Имя сервера windows mac os

    Примечание. Некоторое время назад команда разработчиков OpenOCD решила больше не предоставлять никаких официальных бинарных файлов. Они предлагают только исходный код, ожидая, что поставщик оборудования JTAG создаст двоичные файлы. Убедитесь, что используемый вами двоичный файл поддерживает ваше оборудование JTAG.

    • Целевая микросхема:

    Я выбрал мой прорыв с EFM32G200F32, микроконтроллером ARM Cortex-M3 (MCU), но любой другой поддерживаемый MCU будет работать.

    Моя доска объявлений EFM32G200F32

    Развязка EFM32G200F32

    Как организован OpenOCD

    Чтобы запустить OpenOCD, вам нужен только правильный файл конфигурации (.cfg), поставляемый в OpenOCD. Этот файл конфигурации имеет команды, которые являются расширениями для Jim-Tcl. Jim-Tcl — это язык программирования, который обеспечивает простой и расширяемый командный интерпретатор.

    Файл каталога OpenOCD имеет папку под названием «скрипты». В этой папке вы увидите папки «interface», «board» и «target». И это в значительной степени единственные папки, которые вам нужны.

    • Интерфейс: файлы конфигурации для аппаратных адаптеров, например «minimodule.cfg».
    • Совет: файлы конфигурации для общих плат разработки, такие как «atmel_sam4s_xplained_pro.cfg» — «olimex_stm32_h107.cfg» — «stm32f4discovery.cfg» и т. Д. Вы можете видеть, что эти файлы повторно используют файлы конфигурации из интерфейса и целевого.
    • Цель: файлы конфигурации для микросхем MCU.

    Однако вы можете написать свои собственные файлы конфигурации, которые мы собираемся сделать в этом учебнике.

    Когда мы запускаем OpenOCD, мы можем предоставить ему столько файлов конфигурации, сколько хотим:

    openocd -f config1.cfg -f config2.cfg -f config3.cfg

    Понимание основ конфигурации адаптера

    Во-первых, нам нужно сообщить OpenOCD тип адаптера, с которым он будет работать, с помощью команды интерфейса .

    Чтобы просмотреть полный список интерфейсов, поддерживаемых вашей версией OpenOCD, используйте следующую команду:

    > openocd -c interface_list

    В нашем учебнике мы будем использовать адаптер с чипом FT2232H, поэтому мы будем использовать драйвер интерфейса FTDI:

    Вы также должны сообщить OpenOCD дополнительную информацию об адаптере (интерфейсе). Например, вам нужно указать VID / PID, серийный номер или номер канала, который вы будете использовать для FT2232H, так как он имеет два канала.

    ftdi_vid_pid 0x0403 0x6010

    Адаптер может поддерживать более одного транспортного протокола, поэтому OpenOCD позволяет выбрать транспортный протокол:

    транспорт выбрать swd

    Вы также должны сообщить OpenOCD исходные значения данных и регистров направления FTDI GPIO через команду ftdi_layout_init . Вы должны сначала поместить начальные значения 16 контактов канала, а затем направления. Зная, что «1» предназначен для выбора направления в качестве выхода, а «0» — для ввода, а каждый канал в ft2232H имеет 16 контактов.

    ftdi_layout_init 0x0018 0x05fb

    Низкие выходные данные = 0x18 // 0001 1000

    Низкое направление = 0xfb // 1111 1011

    Высокое направление = 0x05 // 0000 0101

    Чтобы узнать больше о конфигурации адаптера, вы можете обратиться к руководству OpenOCD.

    Подключение цели с помощью адаптера

    Существует файл конфигурации, называемый swd-resistor-hack.cfg, который содержит схему подключения:

    Проводка FT2232H с целевым

    Файл содержит примечание:

    «Подключите TDI к SWDIO через подходящий последовательный резистор (220-470 Ом или около того в зависимости от возможностей привода для цели и адаптера) подключите TDO напрямую к SWDIO».

    Таким образом, без подключения этого резистора соединение не будет установлено.

    Разбивка FT2232H

    Все вместе

    Попробуем теперь установить соединение между адаптером и мишенью с помощью OpenOCD.

    Часть 1: создание необходимых проводных соединений

    Подключение FT2232H с целью

    Часть 2: Запустите OpenOCD

    Сначала сделайте специальный файл конфигурации для нашего адаптера. Создайте новый txt-файл (ANYNAME.cfg). Не забудьте изменить VID / PID и серийный номер в соответствии с вашим чипом:

    Примечание. Определение сигнала SWD_EN важно для работы с OpenOCD, даже если мы физически не подключаем его. Если мы этого не сделаем, появится ошибка:

    Ошибка: режим SWD активен, но сигнал SWD_EN не определен

    Окна:

    После загрузки копии OpenOCD, как описано выше, запустите консоль CMD, затем перейдите в каталог, в котором присутствует OpenOCD. Например:

    Читайте также:  Mac os нет управления питанием

    cd Desktop \ openocd-0.9.0 \ bin

    Помните: у нас есть файл конфигурации (я назвал его SWD_FT.cfg), и цель является одним из чипов EFM32.

    Затем в CMD введите:

    openocd -f interface / ftdi / SWD_FT.cfg -f target / efm32.cfg

    Linux:

    В терминале введите:

    Sudo openocd -f interface / ftdi / SWD_FT.cfg -f target / efm32.cfg

    Теперь вы должны получить что-то вроде:

    Информация: включен режим FTDI SWD

    скорость адаптера: 1000 кГц

    cortex_m reset_config sysresetreq

    Информация: тактовая частота 1000 кГц

    Информация: SWD IDCODE 0x2ba01477

    Info: efm32.cpu: аппаратное обеспечение имеет 6 точек останова, 4 точки наблюдения

    Если у вас возникли проблемы, ознакомьтесь с разделом устранения неполадок — это может быть плохая проводка или проблема с драйвером для пользователей Windows.

    Часть 4: Открыть соединение Telnet

    Откройте другое окно CMD и введите:

    telnet localhost 4444

    Часть 5: Общение с целью

    Не забудьте остановить свою цель перед любыми операциями отладки:

    Вы получите что-то вроде:

    целевое состояние: остановлено

    цель остановлена ​​из-за отладочного запроса, текущий режим: поток

    xPSR: 0x01000000 шт.: 0x00000bbc msp: 0x20002000

    Чтобы прочитать внутренние регистры из нашего чипа, введите:

    Ответ команды reg

    Чтобы прошивать изображение во внутреннюю вспышку, нам необходимо определить внутренние флэш-банки. Это может быть один банк, как наша нынешняя цель, «efm32.cfg» для нас. Чтобы убедиться, введите следующее:

    Он вернет следующее:

    # 0: efm32.flash (efm32) при 0x00000000, размер 0x00008000, ширина шины 0, ширина шины 0

    Теперь, чтобы запустить нашу программу, используйте команду flash write_image .

    Эта команда принимает файлы bin (двоичные), ihex (Intel hex), elf (файлы ELF), s19 (Motorola s19), mem или builder.

    > flash write_image erase «Desktop / FirstApp.hex»

    Вы должны получить что-то вроде:

    автоматическое стирание включено

    написал 1536 байт из файла Desktop / FirstApp.hex в 0.124740s (12.025 KiB / s)

    Теперь сделайте свою цель снова запущенной с помощью этой команды:

    Чтобы выйти из Telnet-подключения, просто введите:

    Прочтите руководство OpenOCD, чтобы узнать больше о мигающей памяти с помощью OpenOCD.

    Исправление проблем

    Пример ошибки 1:

    • Ошибка: невозможно открыть устройство ftdi: usb_open () не удалось

    Эта ошибка может быть вызвана использованием драйвера libusb в Windows, в то время как в новых версиях OpenOCD используется драйвер WinUSB.

    Во-первых, убедитесь, что вы остановили Windows от установки драйвера автоматически:

    Затем удалите драйвер FTDI по умолчанию. Вы можете использовать инструмент из FTDI под названием CDM Uninstaller xx — Windows Device Driver Uninstaller: просто введите свой VID и PID.

    Обратите внимание, что идентификатор поставщика FTDI по умолчанию — 0x0403. Идентификаторы продукта по умолчанию:

    • Одноканальные устройства (R Chips): 0x6001
    • Двухканальные устройства (2232C / D / H Chips): 0x6010
    • Четырехканальные устройства (чипы 4232H): 0x6011

    Подробнее читайте здесь.

    Наконец, используйте Zadig Tool для установки драйвера WinUSB.

    Пример ошибки 2:

    • Информация: тактовая частота 1000 кГц
      в процедуре ‘init’
      в процедуре ‘ocd_bouncer’

    Эта ошибка вызвана неправильной проводкой или отсутствием резистора между TDI и TDO в «swd-resistor-hack.cfg», как мы упоминали выше.

    Это также может быть вызвано плохой конфигурацией, например, отсутствующей командой ftdi_layout_init из файла конфигурации:

    ftdi_layout_init 0x0018 0x05fb

    Пример ошибки 3:

    • Ошибка: libusb_open () не удалось выполнить с помощью LIBUSB_ERROR_ACCESS
      Ошибка: устройство не найдено
      Ошибка: не удалось открыть ftdi-устройство с помощью vid 0403, pid 6010, описание ‘*’ и серийный ‘FTZ7O8O0’

    Подобное сообщение об ошибке появится при запуске OpenOCD в Linux без разрешения. Убедитесь, что вы запускаете OpenOCD с помощью sudo, «sudo opeocd».

    Рекомендации:

    (1) Использование OpenOCD в качестве автономного FLASH-программиста (простой учебник) — Olimex

    (2) Команды вспышки — Руководство по OpenOCD

    (3) Конфигурация адаптера отладки — Руководство по OpenOCD

    (4) Начало работы с компилятором ARM GCC для Windows, часть 5: Отладка с помощью OpenOCD

  • Оцените статью