3

我在 pcb 上有一个定制的 nrf52 芯片,暴露了 swd 引脚。我已经从https://github.com/ntfreak/openocd克隆并安装了最新的 openocd 。最新版本包括 nrf52 芯片的所有最新路径,因此无需像许多较早的在线指南中建议的那样进行任何其他更改。我可以使用 ST-LinkV2 连接到芯片。连接后,我可以使用 mdw 和 mdb 读取和写入内存位置。我还可以运行一些基本的 openocd 命令,例如 dump_image 等,这可以确认设置是好的。但是停止和程序命令总是会导致错误,例如:

JTAG failure -4
JTAG failure -4
JTAG failure -4
JTAG failure -4
JTAG failure -4
JTAG failure -4
target halted due to debug-request, current mode: Thread 
xPSR: 00000000 pc: 00000000 msp: 00000000
jtag status contains invalid mode value - communication failure
Polling target nrf52.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms
Previous state query failed, trying to reconnect
jtag status contains invalid mode value - communication failure
Polling target nrf52.cpu failed, trying to reexamine

如果我尝试使用 flash image_write 我得到错误,

JTAG failure
Error setting register
error starting target flash write algorithm
Failed to enable read-only operation
Failed to write to nrf52 flash
error writing to flash at address 0x00000000 at offset 0x00000000
in procedure 'dap'
jtag status contains invalid mode value - communication failure
Polling target nrf52.cpu failed, trying to reexamine

我已经在线阅读了不同的指南,其中一种可能的解决方案涉及 APPPROTECT 寄存器,必须禁用该寄存器才能启用对闪存的任何写入。 APP_PROTECT,但是应该帮助我们访问这个位的 dap 命令,

dap apreg 1 0x04 0x01

返回错误:

invalid subcommand apreg 1 0x04 0x01

拜托,我想知道是否有人用 stlink-v2 成功编程了一个新的空 nrf52 芯片以及必要的步骤,或者是否有人遇到过类似的问题。谢谢。

这是我的配置文件:

#nRF52832 Target
source [find interface/stlink.cfg]

transport select hla_swd

source [find target/nrf52.cfg]

#reset_config srst_nogate connect_assert_srst
4

4 回答 4

4

我以这种方式解决了“受保护的 nRF52”芯片问题,在 Windows 上,使用 Particle.io 调试器https://store.particle.io/products/particle-debugger设置从 Arduino 编程 nRF52 芯片,如https://中所述www.forward.com.au/pfod/BLE/LowPower/index.html

注意:这里描述的恢复过程不需要安装 Arduino

从http://gnutoolchains.com/arm-eabi/openocd/下载 OpenOCD-20181130.7z 为 windows 预编译的 openocd

https://github.com/ntfreak/openocd上最新版本的 openocd src也应该可以工作,因为它在 target\arm_adi_v5.c 中包含 apreg cmd

解压,打开cmd提示解压目录,输入cmd

bin\openocd.exe -d2 -f interface/cmsis-dap.cfg -f target/nrf52.cfg 

回复

Info : auto-selecting first available session transport "swd". To override use '
transport select <transport>'.
adapter speed: 1000 kHz
cortex_m reset_config sysresetreq
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: FW Version = 1.10
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x2ba01477
Error: Could not find MEM-AP to control the core
Info : Listening on port 3333 for gdb connections

打开 telnet 程序,例如 teraTerm 并连接到 localhost 的 4444 端口,即 127.0.0.1 telnet 端口 4444

cmd窗口显示

Info : accepting 'telnet' connection on tcp/4444

在 telnet(即 teraTerm)类型中

nrf52.dap apreg 1 0x04

返回 0 <<< 芯片保护然后

nrf52.dap apreg 1 0x04 0x01

然后

nrf52.dap apreg 1 0x04

返回 1 << 芯片不受保护

然后电源循环板

现在可以使用 arduino ide 闪存软设备和编码低功耗 BLE

于 2019-01-25T20:43:16.003 回答
2

尽管该dap命令由 openOCD 列出help,但它并未针对hla_swd您必须与 ST-Link 一起使用的传输实现。

如果ST-Link是来自中国的通用类型,它可以升级为使用swd传输的CMSIS-DAP,并支持nrf52.dap apreg 1 0x04 0x01禁用回读保护和擦除闪存的命令。您需要另一个 ST-Link 来执行此操作,或者您可以在通用 STM32F103C8T6 板上安装 CMSIS-DAP

之后,您可以使用 ST-Link 对 nRF52 进行编程,也可以继续使用 CMSIS-DAP,它也可用于对 STM32 MCU 进行编程。

Nucleo 板嵌入式 ST-Links 也可以升级到 J-Link,它允许使用 nRFgo Studio 中的“恢复”选项来擦除闪存,它也应该与“nrfjtool --recover”或 OpenOCD 一起使用。

于 2018-10-09T14:12:33.470 回答
1

如果有人遇到这个问题,我通过获取一个原始的 Jlink-Edu 解决了这个问题。我还必须将微控制器的复位引脚拉高以使 jlink 工作。

于 2018-10-10T17:10:36.387 回答
0

有很多 JTAG 消息。

我想你可能会错过

transport select hla_swd

(板)cfg 文件中的行。NRF5x 芯片仅适用于 SWD,ST-Link 使用该hla_swd变体。

于 2018-09-17T10:58:42.480 回答