Проблема перепрошивки чипа nrf52 с помощью Openocd - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть собственный чип nrf52 на печатной плате с открытыми выводами SWD. Я клонировал и установил последнюю версию openocd из https://github.com/ntfreak/openocd. Последняя версия включает в себя все последние пути для чипа nrf52, поэтому нет необходимости вносить какие-либо дополнительные изменения, как это предлагается во многих старых руководствах в Интернете. Я могу подключиться к чипу с помощью ST-LinkV2. при подключении я могу читать и записывать области памяти, используя mdw и mdb. Я также могу запустить некоторые базовые команды openocd, например dump_image e.t.c, что подтверждает, что установка прошла хорошо. Но команды остановки и программы всегда приводят к таким ошибкам, как:

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

Пожалуйста, я хотел бы знать, имел ли кто-нибудь успех при программировании нового пустого чипа nrf52 с помощью stlink-v2 и необходимых шагов, или если кто-либо сталкивался с подобными проблемами. Благодаря.

Вот мой конфигурационный файл:

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

transport select hla_swd

source [find target/nrf52.cfg]

#reset_config srst_nogate connect_assert_srst

Ответы [ 4 ]

0 голосов
/ 25 января 2019

Я решил проблему с «защищенным чипом nRF52» таким образом, в Windows, используя отладчик Particle.io https://store.particle.io/products/particle-debugger для программирования чипов nRF52 от Arduino, как описано в https://www.forward.com.au/pfod/BLE/LowPower/index.html

Примечание. Описанный здесь процесс восстановления НЕ требует установки Arduino

Загрузите скомпилированный OpenOCD OpenOCD-20181130.7z для Windows из http://gnutoolchains.com/arm-eabi/openocd/

Последняя версия openocd src на https://github.com/ntfreak/openocd также должна работать, так как в нее входит apreg cmd в target \ arm_adi_v5.c

распаковать, открыть приглашение cmd, чтобы распаковать dir, введите 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 и подключиться к локальному хосту через порт 4444, т. Е. 127.0.0.1 порт telnet 4444

cmd показывает окно

Info : accepting 'telnet' connection on tcp/4444

в telnet (т.е. тератерм) тип

nrf52.dap apreg 1 0x04

возвращает 0 <<< защищен чипом то </p>

nrf52.dap apreg 1 0x04 0x01

тогда

nrf52.dap apreg 1 0x04

возвращает 1 << чип незащищен </p>

затем плата цикла питания

Теперь можно использовать arduino ide для прошивки программных устройств и кодирования маломощных BLE

0 голосов
/ 09 октября 2018

Несмотря на то, что команда dap указана в openOCD help, она не реализована для транспорта hla_swd, который необходимо использовать с ST-Link.

Если ST-Linkуниверсальный тип из Китая, он может быть обновлен до CMSIS-DAP , который использует транспорт swd и поддерживает команду nrf52.dap apreg 1 0x04 0x01 для отключения защиты от обратного чтения и удаления флэш-памяти.Для этого вам понадобится другой ST-Link, или вместо этого вы можете установить CMSIS-DAP на общую плату STM32F103C8T6 .

После этого вы можете использовать ST-Link для программированияnRF52 или продолжайте использовать CMSIS-DAP, который также можно использовать для программирования микроконтроллера STM32.

ST-Links, встроенные в плату Nucleo, также могут быть обновлены до J-Link , что позволяет использоватьопция «recovery» в nRFgo Studio для удаления флэш-памяти также должна работать с «nrfjtool --recover» или OpenOCD.

0 голосов
/ 10 октября 2018

Если кто-то сталкивался с этой проблемой, я решил проблему, получив оригинальный Jlink-Edu.Мне также пришлось вытащить вывод сброса микроконтроллера, чтобы заставить работать jlink.

0 голосов
/ 17 сентября 2018

Есть много сообщений JTAG.

Я думаю, вы можете пропустить

transport select hla_swd

строка в вашем (борту) файле cfg. Чипы NRF5x правильно работают только с SWD, а ST-Link использует вариант hla_swd.

...