8

我正在尝试从 Raspberry Pi 3 计算模块 GPIO 闪存基于 cortex m0 的 SoC,但它一直失败并出现相同的错误。

错误:无法初始化调试端口

我正在关注此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.3V 直接连接到计算模块 dev-kit,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

树莓派 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

无论我尝试什么,我总是得到这个“错误:无法初始化调试端口”。

有趣的是,使用连接到 PI USB 的 ST-Link/V2 适配器并修改interface配置,它可以正常工作。

有什么建议么?我究竟做错了什么?需要对 GPIO 进行一些初始化吗?

编辑:

我注意到有人投票以“不清楚在问什么”来结束这个问题。

我在问:如何使用 GPIO 将 Raspberry Pi 连接到 nRF51 SoC?请参阅我尝试过的所有内容。

4

2 回答 2

6

不完全相同的配置,但在http://forum.doozan.com/read.php?3,21789,21927上搜索 pi3 会发现 raspberry123-native.cfg,我们在其中发现了时钟速度的变化:

# 请根据您使用的 Raspi(1,2 或 3)设置正确的 peripheral_base 地址和转换延迟。

接口 bcm2835gpio

# Raspi2 和 Raspi3 外设基地址

bcm2835gpio_peripheral_base 0x3F000000

# Raspi1 peripheral_base address
# bcm2835gpio_peripheral_base 0x20000000

# Transition delay calculation: SPEED_COEFF/khz - SPEED_OFFSET
# These depend on system clock, calibrated for stock 700MHz
# bcm2835gpio_speed SPEED_COEFF SPEED_OFFSET

# Raspi3 BCM2837 (1200Mhz):
bcm2835gpio_speed_coeffs 194938 48

# Raspi2 BCM2836 (900Mhz):
# bcm2835gpio_speed_coeffs 146203 36

# Raspi1 BCM2835: (700Mhz)
# bcm2835gpio_speed_coeffs 113714 28

于 2017-05-04T08:22:48.067 回答
2
    • 问题:探测器正在轮询一个永远不会被设置的事件。

    • 解决方案:可能会尝试报废模块并安装另一个可以正常工作的模块。


    • 检查您使用的是哪个 PI 版本,是在树莓派上使用 openocd 对微控制器进行编程的教程。

    • 注意:您将只使用字符串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 相同的目录中运行该命令。之后,我的 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 控制台窗口。

  • 打破 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本身的创建者。

于 2017-05-03T10:03:54.107 回答