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, в котором мы находим изменение в тактовой скорости:
интерфейс bcm2835gpio
bcm2835gpio_peripheral_base 0x3F000000
# 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.
- Продолжить
- шаг...
Что касается учебника по установке OpenOCD:
- Убедитесь, что у вас есть
Raspberian
установлен на вашем PI. - Установите последнюю версию OpenOCD, следуя этому руководству.
- Но специально для Pi вы можете просто сделать следующее:
sudo apt-get update
sudo apt-get install libtool libusb-dev libusb-1.0 autoconf automake texinfo
- А потом:
git clone git://git.code.sf.net/p/openocd/code openocd-code
cd openocd-code/
./bootstrap
./configure
Это должно выложить кучу вещей, а затем, если все работает, вы должны увидеть это в конце:
Убедитесь, что поддержка используемого вами программатора включена, а затем введите
make
, Как только это закончится, введитеsudo make install
,- Теперь OpenOCD должен быть установлен и готов к работе!
- Убедитесь, что у вас есть
Запуск OpenOCD:
- Теперь вы можете запустить OpenOCD. Например, если вы использовали доску обнаружения F4, вы могли бы сделать что-то вроде этого:
sudo openocd -f board/stm32f4discovery.cfg
- Если это сработало, вы должны увидеть что-то вроде:
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
- Что означает, что ваш программист готов к работе!
Примечание: я не эксперт, поэтому я уверен, что мне еще многое предстоит выяснить. С другой стороны, я мог бы покопаться, чтобы найти больше. если это не сработает, то я бы порекомендовал вам изучить сам чип или сообщить об ошибке создателям nRF51 SoC
сам.