我正在尝试从Raspberry Pi 3计算模块GPIO中闪存基于皮质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是一款采用ISP1302模块封装的Nordic Semiconductor nRF51822蓝牙芯片。
根据教程,模块GND和3.3V直接连接到Compute模块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
(我从raspberrypi2-native.cfg中删除了bcm2835gpio_srst_num 18
使用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
无论我尝试什么,我总是得到这个“错误:无法初始化调试端口”。
有趣的是,使用连接到PI USB的ST-Link / V2适配器并修改配置上的interface
,它没有问题。
有什么建议吗?我究竟做错了什么?是否需要对GPIO进行初始化?
修改
我注意到有人投票将这个问题视为“不清楚要问的是什么”。
我在问:如何使用其GPIO将Raspberry Pi连接到nRF51 SoC?请参阅上面我尝试的所有内容。
答案 0 :(得分:4)
配置不完全相同,但在http://forum.doozan.com/read.php?3,21789,21927上搜索pi3会显示raspberry123-native.cfg,其中我们发现对clockspeed的更改:
界面bcm2835gpio
bcm2835gpio_peripheral_base 0x3F000000
答案 1 :(得分:2)
问题:探针正在轮询一个永远不会被设置的事件。
解决方案:可以尝试废弃模块并安装另一个可以正常工作的模块。
检查您正在使用的PI版本,this是在raspberry 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
然后在与openocd.cfg相同的目录中运行命令sudo openocd
。之后,我的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控制台窗口。
break empty_project.c:main。
关于安装OpenOCD的教程:
Raspberian
。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:
sudo openocd -f board/stm32f4discovery.cfg
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
注意:我不是专家,所以我确定还有很多东西需要我解决。另一方面,我可能会做一些挖掘来寻找更多。如果这不起作用,那么我建议您查看芯片本身或将错误报告给nRF51 SoC
本身的创建者。