OpenOCD 无法连接到 cortex 处理器
OpenOCD fails to connect with cortex processor
我正在尝试从 Raspberry Pi 3 计算模块 GPIO 刷新基于 cortex m0 的 SoC,但它一直失败并出现相同的错误。
Error: Could not initialize the debug port
我正在关注这个 https://learn.adafruit.com/programming-microcontrollers-using-openocd-on-raspberry-pi?view=all and this tutorials https://movr0.com/2016/09/02/use-raspberry-pi-23-as-a-jtagswd-adapter/。编译和安装没有问题。
cortex m0 SoC是Nordic Semiconductor nRF51822蓝牙芯片封装在ISP1302模块中
模块 GND 和 3.3V 直接连接到计算模块开发套件,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
(我从 raspberrypi2-native.cfg 中删除了 bcm2835gpio_srst_num 18
)
与sudo openocd -f config.cfg
一起执行
raspberry Pi CM3 是 运行 /boot/config.txt
上的 core_freq=250
选项,我需要此选项才能可靠地访问 UART1。我认为这可能与时钟有关,但不确定如何change/fix。
我已经尝试了几种组合 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
无论我尝试什么,我总是得到这个 "Error: Could not initialize the debug port"。
非常有趣,使用连接到 PI USB 的 ST-Link/V2 适配器并修改 interface
配置,它可以正常工作。
有什么建议吗?我究竟做错了什么?是否需要对 GPIO 进行一些初始化?
编辑:
我注意到有人投票结束问题 "unclear what's asking"。
我在问:如何使用其 GPIO 将 Raspberry Pi 连接到 nRF51 SoC?参考上面我尝试过的所有内容。
问题:探测器正在轮询从未设置的事件。
解决方案:可以尝试废弃模块并安装另一个可以正常工作的模块。
检查您使用的是哪个 PI 版本,this 是在 raspberry pi 上使用 openocd 对微控制器进行编程的教程。
注意: 您只需在以下 cfg
文件中使用字符串 raspberrypi2-native
而不是 raspberrypi-native
.这是我使用的 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 相同的目录中。在那之后,我的 uC 被编程并且 LED 闪烁。
这是 Raspberry Pi GPIO 接头的接线:
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 控制台 window。
中断empty_project.c:main.
- 继续
- 步...
关于安装 OpenOCD 的教程:
- 确保您的 PI 上安装了
Raspberian
。
- 按照 this 教程安装最新版本的 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
本身的创建者。
不完全相同的配置,但在 http://forum.doozan.com/read.php?3,21789,21927 上搜索 pi3 显示 raspberry123-native.cfg,其中我们发现时钟速度发生了变化:
# 请根据您使用的 Raspi(1,2 或 3)设置正确的 peripheral_base 地址和转换延迟。
接口bcm2835gpio
# Raspi2 和 Raspi3 peripheral_base 地址
bcm2835gpio_peripheral_base0x3F000000
# Raspi1 peripheral_base 地址
# bcm2835gpio_peripheral_base 0x20000000
# 转换延迟计算:SPEED_COEFF/khz - SPEED_OFFSET
# 这些取决于系统时钟,校准为 stock 700MHz
# bcm2835gpio_speed SPEED_COEFF SPEED_OFFSET
# Raspi3 BCM2837 (1200Mhz):
bcm2835gpio_speed_系数 194938 48
# Raspi2 BCM2836 (900Mhz):
# bcm2835gpio_speed_coeffs 146203 36
# Raspi1 BCM2835: (700Mhz)
# bcm2835gpio_speed_coeffs 113714 28
我正在尝试从 Raspberry Pi 3 计算模块 GPIO 刷新基于 cortex m0 的 SoC,但它一直失败并出现相同的错误。
Error: Could not initialize the debug port
我正在关注这个 https://learn.adafruit.com/programming-microcontrollers-using-openocd-on-raspberry-pi?view=all and this tutorials https://movr0.com/2016/09/02/use-raspberry-pi-23-as-a-jtagswd-adapter/。编译和安装没有问题。
cortex m0 SoC是Nordic Semiconductor nRF51822蓝牙芯片封装在ISP1302模块中
模块 GND 和 3.3V 直接连接到计算模块开发套件,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
(我从 raspberrypi2-native.cfg 中删除了 bcm2835gpio_srst_num 18
)
与sudo openocd -f config.cfg
raspberry Pi CM3 是 运行 /boot/config.txt
上的 core_freq=250
选项,我需要此选项才能可靠地访问 UART1。我认为这可能与时钟有关,但不确定如何change/fix。
我已经尝试了几种组合 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
无论我尝试什么,我总是得到这个 "Error: Could not initialize the debug port"。
非常有趣,使用连接到 PI USB 的 ST-Link/V2 适配器并修改 interface
配置,它可以正常工作。
有什么建议吗?我究竟做错了什么?是否需要对 GPIO 进行一些初始化?
编辑:
我注意到有人投票结束问题 "unclear what's asking"。
我在问:如何使用其 GPIO 将 Raspberry Pi 连接到 nRF51 SoC?参考上面我尝试过的所有内容。
问题:探测器正在轮询从未设置的事件。
解决方案:可以尝试废弃模块并安装另一个可以正常工作的模块。
检查您使用的是哪个 PI 版本,this 是在 raspberry pi 上使用 openocd 对微控制器进行编程的教程。
注意: 您只需在以下
cfg
文件中使用字符串raspberrypi2-native
而不是raspberrypi-native
.这是我使用的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 相同的目录中。在那之后,我的 uC 被编程并且 LED 闪烁。这是 Raspberry Pi GPIO 接头的接线:
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 控制台 window。
中断empty_project.c:main.
- 继续
- 步...
关于安装 OpenOCD 的教程:
- 确保您的 PI 上安装了
Raspberian
。 - 按照 this 教程安装最新版本的 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 并准备就绪!
- 确保您的 PI 上安装了
运行 OpenOCD:
- 现在您可以 运行 OpenOCD。例如,如果您使用的是 F4 发现板,则可以这样:
sudo openocd -f board/stm32f4discovery.cfg
- 如果有效,您应该会看到如下内容:
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
- 这意味着您的程序员已准备就绪!
注意:我不是专家,所以我确信还有很多东西需要我弄清楚。另一方面,我可能会进行一些挖掘以搜索更多内容。如果这不起作用,那么我建议您查看芯片本身或将错误报告给 nRF51 SoC
本身的创建者。
不完全相同的配置,但在 http://forum.doozan.com/read.php?3,21789,21927 上搜索 pi3 显示 raspberry123-native.cfg,其中我们发现时钟速度发生了变化:
接口bcm2835gpio
bcm2835gpio_peripheral_base0x3F000000
# bcm2835gpio_peripheral_base 0x20000000
# 转换延迟计算:SPEED_COEFF/khz - SPEED_OFFSET
# 这些取决于系统时钟,校准为 stock 700MHz
# bcm2835gpio_speed SPEED_COEFF SPEED_OFFSET
# Raspi3 BCM2837 (1200Mhz):
bcm2835gpio_speed_系数 194938 48
# Raspi2 BCM2836 (900Mhz):
# bcm2835gpio_speed_coeffs 146203 36
# Raspi1 BCM2835: (700Mhz)
# bcm2835gpio_speed_coeffs 113714 28