OpenOCD не может соединиться с процессором Cortex

Я пытаюсь прошить SoC на базе cortex m0 из GPIO вычислительного модуля Raspberry Pi 3, но он продолжает отказывать с той же ошибкой.

Ошибка: не удалось инициализировать порт отладки

Я слежу за этим https://learn.adafruit.com/programming-microcontrollers-using-openocd-on-raspberry-pi?view=all и за этими учебниками https://movr0.com/2016/09/02/use-raspberry-pi-23-as-a-jtagswd-adapter/. Компиляция и установка происходит без проблем.

Cortex m0 SoC - это блютуз-чип Nordic Semiconductor nRF51822, упакованный в модуль ISP1302.

Модуль GND и 3,3 В подключены непосредственно к модулю разработки Compute, а SWDCLK и SWDIO подключены к GPIO 25, 24 в соответствии с инструкциями. Там нет связи для SRST или TRST.

Файл конфигурации выглядит следующим образом:

source [find interface/raspberrypi2-native.cfg]
bcm2835gpio_swd_nums 25 24
transport select swd

# target
source [find target/nrf51.cfg]

init
targets

(и я удалил bcm2835gpio_srst_num 18 из raspberrypi2-native.cfg)

выполнение с sudo openocd -f config.cfg

Raspberry Pi CM3 работает с опцией core_freq=250 на /boot/config.txt и мне нужна эта опция для надежного доступа к UART1. Я думал, что это может быть что-то, связанное с часами, но не уверен, как изменить / исправить, если это так.

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

Open On-Chip Debugger 0.10.0+dev-00111-gca9dcc8 (2017-04-24-15:30)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
BCM2835 GPIO nums: swclk = 25, swdio = 24
cortex_m reset_config sysresetreq
adapter speed: 1000 kHz
Info : BCM2835 GPIO JTAG/SWD bitbang driver
Info : SWD only mode enabled (specify tck, tms, tdi and tdo gpios to add JTAG mode)
Info : clock speed 1001 kHz
Info : SWD DPIDR 0x00150634
Error: Could not initialize the debug port
    TargetName         Type       Endian TapName            State       
--  ------------------ ---------- ------ ------------------ ------------
 0* nrf51.cpu          cortex_m   little nrf51.cpu          unknown

Независимо от того, что я пытался, я всегда получаю это "Ошибка: не удалось инициализировать порт отладки".

Интересно, что с помощью адаптера ST-Link/V2, подключенного к PI USB, и изменения interface по конфигурации работает без проблем.

Какие-либо предложения? Что я делаю неправильно? Нужна ли некоторая инициализация на GPIO?

редактировать:

Я заметил, что кто-то проголосовал за закрытие вопроса как "неясно, что спрашивает".

Я спрашиваю: как я могу подключить Raspberry Pi к SoC nRF51, используя его GPIO? См. Выше все, что я пытался.

2 ответа

Решение

Не совсем та же конфигурация, но при поиске pi3 на http://forum.doozan.com/read.php?3,21789,21927 обнаруживается raspberry123-native.cfg, в котором мы находим изменение в тактовой скорости:

# Пожалуйста, установите правильный адрес периферийной_базы и задержку перехода в зависимости от того, какой Raspi (1,2 или 3) вы используете.

интерфейс bcm2835gpio

# Raspi2 и Raspi3 периферийный_базный адрес

bcm2835gpio_peripheral_base 0x3F000000

# Raspi1 adapral_base address
# bcm2835gpio_peripheral_base 0x20000000

# Расчет задержки перехода: SPEED_COEFF / khz - SPEED_OFFSET
# Они зависят от системных часов, откалиброванных для стандартных 700 МГц
# bcm2835gpio_speed SPEED_COEFF SPEED_OFFSET

# Raspi3 BCM2837 (1200 МГц):
bcm2835gpio_speed_coeffs 194938 48

# Raspi2 BCM2836 (900 МГц):
# bcm2835gpio_speed_coeffs 146203 36

# Raspi1 BCM2835: (700 МГц)
# bcm2835gpio_speed_coeffs 113714 28

    • Проблема: зонд опрашивает событие, которое никогда не устанавливается.

    • Решение: попробуйте удалить модуль и установить другой, который работает нормально.


    • Проверьте, какую версию PI вы используете, это руководство по программированию микроконтроллеров с использованием openocd на raspberry pi.

    • Примечание: что вы просто используете строку raspberrypi2-native вместо raspberrypi-native В следующих cfg файл. Это был openocd.cfg файл, который я использовал:


source [find interface/raspberrypi-native.cfg]
transport select swd

bcm2835gpio_swd_nums 25 24
bcm2835gpio_srst_num 18

set CHIPNAME efm32
source [find target/efm32.cfg]

reset_config srst_nogate

adapter_nsrst_delay 100
adapter_nsrst_assert_width 100

init
targets
reset
reset halt
poll
flash probe 0
flash write_image erase emptyProject.hex
sleep 1
reset run
shutdown

  • затем запустите команду sudo openocd в том же каталоге, что и openocd.cfg. После этого был запрограммирован мой ОК, и светодиоды мигали.

  • Это было проводное соединение для Raspberry Pi GPIO Header:


3.3V  - 3.3V   - pin 1
SWCLK - GPIO25 - pin 22
SWDIO - GPIO24 - pin 18
SRST  - GPIO18 - pin 12
GND   - GND    - pin 14

  • в каталоге, содержащем ваши *.afx файл (должен быть выходным файлом в том же месте, что и ваша сборка *.hex/*.bin), введите команду arm-none-eabi-gdb -ex "target remote localhost:3333" empty_project.axf -tui

  • Это должно вызвать основанное на терминале средство просмотра исходного кода и окно консоли GDB.

  • перерыв empty_project.c:main.

  • Продолжить
  • шаг...

  1. Что касается учебника по установке OpenOCD:

    • Убедитесь, что у вас есть Raspberian установлен на вашем PI.
    • Установите последнюю версию OpenOCD, следуя этому руководству.
    • Но специально для Pi вы можете просто сделать следующее:
      1. sudo apt-get update
      2. sudo apt-get install libtool libusb-dev libusb-1.0 autoconf automake texinfo
    • А потом:
      1. git clone git://git.code.sf.net/p/openocd/code openocd-code
      2. cd openocd-code/
      3. ./bootstrap
      4. ./configure
    • Это должно выложить кучу вещей, а затем, если все работает, вы должны увидеть это в конце:

    • Журнал OpenOCD

    • Убедитесь, что поддержка используемого вами программатора включена, а затем введите make, Как только это закончится, введите sudo make install,

    • Теперь OpenOCD должен быть установлен и готов к работе!
  2. Запуск OpenOCD:

    • Теперь вы можете запустить OpenOCD. Например, если вы использовали доску обнаружения F4, вы могли бы сделать что-то вроде этого:
    • sudo openocd -f board/stm32f4discovery.cfg
    • Если это сработало, вы должны увидеть что-то вроде:
    • Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
    • Что означает, что ваш программист готов к работе!

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

Другие вопросы по тегам