• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение NRF52840

Ну, почти прошил), но уперся в отсутствие библиотеки libusb, по подсказке алисы.ai скачал с оф сайта, прописал PATH, проверил: where libusb-1.0.dll, получил ответ: C:\libusb-1.0.29\MinGW-llvm-aarch64\dll\libusb-1.0.dll , но при прошивке, получаю ответ: 0000672 W STLink, CMSIS-DAPv2 and PicoProbe probes are not supported because no libusb library was found. [common]. Прошивал через dap-link, завтра попробую st-link. Хотя было заявлено:
  • Программатор: Самый доступный вариант — ST-Link v2. Также подойдут J-Link или DAPLink.
 

nikolz

Well-known member
Не совсем по теме, но про DeepSeek.
-----------------------
Использую его уже давно. в последние полгода он стал очень хорошо писать программы.
------------------------------
Теперь практически всегда, если что то начинаю писать, то с ним.
иногда ему подсказываю как оптимально написать.
Он проверяет и говорит свои доводы за и против.
---------------------------
Что же касается его советов.
То он, как и все люди ищет ответы по всему интернет и потом их анализирует. полагаю лучше, чем многие из людей.
--------------------------
Что же касается Алисы ,то она тупее DeepSeek на порядок.
Полагаю что она ищет в основном по русскому интернету.
-------------------------
Поэтому не надо наезжать на DeepSeek.
--------------------------
Более того, замечу,
что он хорошо анализирует предлагаемые решения и порою с ними объективно не соглашается.
-----------------------
Самое замечательное то, что хотя он и знает много,
но никогда не обливает дерьмом собеседника, чтобы доказать свое превосходство.
--------------------
Читаем что нас ждет:
https://habr.com/ru/news/1024000/
 
Всем огромное спасибо, получилось прошить через openosd, бутлоадер заработал, прошивка залилась.


Но возник ещё один вопрос, когда посмотрел что за команды используются при прошивке. nrf5 mass_erase
Команда выполняет полное стирание памяти микроконтроллеров семейства NRF5 (Nordic Semiconductor).
Последствия стирания
При использовании mass_erase сбрасываются критически важные настройки, хранящиеся в UICR:
  • RegOut0 — регистр управления выходным напряжением регулятора. На заводе он настроен на 3,3 В, а после стирания принимает значение по умолчанию — 1,8 В. Это может вызвать проблемы совместимости с внешними устройствами (например, с GPIO Raspberry Pi на 3,3 В).
  • другие калибровочные данные и флаги защиты.
  • Проблемы с напряжением после стирания. Если устройство перестало работать из‑за сброса RegOut0:
    • вручную запрограммируйте UICR с нужным значением 3,3 В;
    • используйте программатор с внешним регулятором напряжения.

Как это влияет на GPIO
Напряжение логических уровней GPIO напрямую зависит от VDD:
  • при VDD = 3,3 В уровень логической 1 на GPIO = 3,3 В;
  • при VDD = 1,8 В уровень логической 1 на GPIO = 1,8 В.



И вот насколько это критично будет и как вернуть к 3v3&
 
Не совсем по теме, но про DeepSeek.
-----------------------
Использую его уже давно. в последние полгода он стал очень хорошо писать программы.
------------------------------
Теперь практически всегда, если что то начинаю писать, то с ним.
иногда ему подсказываю как оптимально написать.
Он проверяет и говорит свои доводы за и против.
---------------------------
Что же касается его советов.
То он, как и все люди ищет ответы по всему интернет и потом их анализирует. полагаю лучше, чем многие из людей.
--------------------------
Что же касается Алисы ,то она тупее DeepSeek на порядок.
Полагаю что она ищет в основном по русскому интернету.
-------------------------
Поэтому не надо наезжать на DeepSeek.
--------------------------
Более того, замечу,
что он хорошо анализирует предлагаемые решения и порою с ними объективно не соглашается.
-----------------------
Самое замечательное то, что хотя он и знает много,
но никогда не обливает дерьмом собеседника, чтобы доказать свое превосходство.
--------------------
Читаем что нас ждет:
https://habr.com/ru/news/1024000/
Извините, я не имел в виду deepseek конкретно! Я с ним не работал еще)
 

nikolz

Well-known member
Всем огромное спасибо, получилось прошить через openosd, бутлоадер заработал, прошивка залилась.


Но возник ещё один вопрос, когда посмотрел что за команды используются при прошивке. nrf5 mass_erase
Команда выполняет полное стирание памяти микроконтроллеров семейства NRF5 (Nordic Semiconductor).
Последствия стирания
При использовании mass_erase сбрасываются критически важные настройки, хранящиеся в UICR:
  • RegOut0 — регистр управления выходным напряжением регулятора. На заводе он настроен на 3,3 В, а после стирания принимает значение по умолчанию — 1,8 В. Это может вызвать проблемы совместимости с внешними устройствами (например, с GPIO Raspberry Pi на 3,3 В).
  • другие калибровочные данные и флаги защиты.
  • Проблемы с напряжением после стирания.Если устройство перестало работать из‑за сброса RegOut0:
    • вручную запрограммируйте UICR с нужным значением 3,3 В;
    • используйте программатор с внешним регулятором напряжения.

Как это влияет на GPIO
Напряжение логических уровней GPIO напрямую зависит от VDD:
  • при VDD = 3,3 В уровень логической 1 на GPIO = 3,3 В;
  • при VDD = 1,8 В уровень логической 1 на GPIO = 1,8 В.
И вот насколько это критично будет и как вернуть к 3v3&
DeepSeek отвечает:
Отличный и очень важный вопрос! Вы всё верно поняли — mass_erase действительно сбрасывает настройку выходного напряжения, что может привести к неработоспособности платы или устройств, подключенных к ее выводам. Хорошая новость в том, что это полностью обратимо, и вернуть всё обратно к 3.3 В очень просто.

Давайте разберемся по порядку, насколько это критично и как это исправить.

⚠ Насколько это критично?
Критичность зависит от вашей конкретной платы. Есть два основных сценария:

  1. Платы, работающие в "нормальном режиме" (Normal Voltage Mode):
    • Примеры: Многие платы, такие как Adafruit Feather nRF52840, используют внешний стабилизатор на 3.3 В.
    • Последствия: Для них этот параметр не имеет значения. Даже после стирания плата будет работать, а на ее выводах будет стандартное напряжение 3.3 В. Вы можете даже не заметить проблемы.
  2. Платы, работающие в "режиме высокого напряжения" (High Voltage Mode) — Здесь и кроется проблема:
    • Примеры: Официальные платы от Nordic, такие как nRF52840 Dongle (PCA10059).
    • Последствия: Такие платы получают питание от USB (около 5 В) и используют внутренний стабилизатор самого чипа, чтобы понизить его до напряжения для логики. После mass_erase регистр REGOUT0 сбрасывается в значение по умолчанию — 1.8 В. Это приводит к тому, что:
      • Напряжение на всех выводах GPIO падает до 1.8 В.
      • Светодиоды на плате могут светиться очень тускло, а некоторые (например, синий и зеленый) могут вообще не загораться.
      • USB может перестать работать, так как для его корректного запуска требуется напряжение выше 3.0 В.
      • Устройства, подключенные к выводам и рассчитанные на 3.3 В логику (например, датчики), перестанут с ними взаимодействовать.
🔧 Как вернуть напряжение к 3.3 В?
Есть несколько способов. Самый простой и надежный — использовать официальную утилиту nrfjprog от Nordic.

Способ 1: Команда nrfjprog (Самый рекомендуемый)
Этот метод напрямую записывает нужное значение в ячейку памяти UICR.

  1. Установите nRF Command Line Tools. В этот пакет входит нужная нам программа nrfjprog. Скачать его можно на сайте Nordic Semiconductor.
  2. Подключите плату. Для этого вам понадобится программатор, например, J-Link или его версия, встроенная в плату (на некоторых платах есть порт для этого). Плата должна быть подключена к программатору, а не только к USB по питанию.
  3. Выполните команду. Откройте терминал (командную строку) и выполните:
    bash
    nrfjprog --memwr 0x10001304 --val 5
    • 0x10001304 — это точный адрес в памяти, где хранится регистр REGOUT0.
    • --val 5 — это значение, которое устанавливает выходное напряжение 3.3 В. Число 5 в данном случае — это код из даташита Nordic, обозначающий VOUT = 3.3V.
  4. Сбросьте питание платы. Чтобы новые настройки вступили в силу, необходимо выключить и снова включить питание платы. После этого на выводах снова будет 3.3 В.
Важно: Некоторые источники могут предлагать использовать значение 0xFFFFFFFD. Оно также работает, но рекомендуется использовать просто 5, так как это прямая и более понятная запись.
Способ 2: Через отладчик (GDB)
Если у вас уже настроена среда разработки с GDB-сервером, можно выполнить команду прямо в процессе отладки:

bash
(gdb) set *0x10001304 = 5
После этого нужно сбросить питание платы.

💎 Выводы
  • Проблема реальна и чаще всего проявляется на платах-донглах от Nordic. На многих сторонних платах с собственным стабилизатором питания её можно не заметить.
  • Решается проблема просто, одной командой nrfjprog.
  • На будущее: при разработке собственного кода можно добавить небольшую проверку при старте. Если код видит, что REGOUT0 имеет значение по умолчанию (1.8 В), он может автоматически перезаписать его на 3.3 В. Это гарантирует, что ваше устройство всегда будет работать правильно, даже если кто-то случайно сотрет всю память.
Если возникнут сложности с подключением программатора или выполнение команды не даст результата, напишите, и мы разберемся дальше.
 
DeepSeek отвечает:
Отличный и очень важный вопрос! Вы всё верно поняли — mass_erase действительно сбрасывает настройку выходного напряжения, что может привести к неработоспособности платы или устройств, подключенных к ее выводам. Хорошая новость в том, что это полностью обратимо, и вернуть всё обратно к 3.3 В очень просто.

Давайте разберемся по порядку, насколько это критично и как это исправить.

⚠ Насколько это критично?
Критичность зависит от вашей конкретной платы. Есть два основных сценария:

  1. Платы, работающие в "нормальном режиме" (Normal Voltage Mode):
    • Примеры: Многие платы, такие как Adafruit Feather nRF52840, используют внешний стабилизатор на 3.3 В.
    • Последствия: Для них этот параметр не имеет значения. Даже после стирания плата будет работать, а на ее выводах будет стандартное напряжение 3.3 В. Вы можете даже не заметить проблемы.
  2. Платы, работающие в "режиме высокого напряжения" (High Voltage Mode) — Здесь и кроется проблема:
    • Примеры: Официальные платы от Nordic, такие как nRF52840 Dongle (PCA10059).
    • Последствия: Такие платы получают питание от USB (около 5 В) и используют внутренний стабилизатор самого чипа, чтобы понизить его до напряжения для логики. После mass_erase регистр REGOUT0 сбрасывается в значение по умолчанию — 1.8 В. Это приводит к тому, что:
      • Напряжение на всех выводах GPIO падает до 1.8 В.
      • Светодиоды на плате могут светиться очень тускло, а некоторые (например, синий и зеленый) могут вообще не загораться.
      • USB может перестать работать, так как для его корректного запуска требуется напряжение выше 3.0 В.
      • Устройства, подключенные к выводам и рассчитанные на 3.3 В логику (например, датчики), перестанут с ними взаимодействовать.
🔧 Как вернуть напряжение к 3.3 В?
Есть несколько способов. Самый простой и надежный — использовать официальную утилиту nrfjprog от Nordic.

Способ 1: Команда nrfjprog (Самый рекомендуемый)
Этот метод напрямую записывает нужное значение в ячейку памяти UICR.

  1. Установите nRF Command Line Tools. В этот пакет входит нужная нам программа nrfjprog. Скачать его можно на сайте Nordic Semiconductor.
  2. Подключите плату. Для этого вам понадобится программатор, например, J-Link или его версия, встроенная в плату (на некоторых платах есть порт для этого). Плата должна быть подключена к программатору, а не только к USB по питанию.
  3. Выполните команду. Откройте терминал (командную строку) и выполните:
    bash
    nrfjprog --memwr 0x10001304 --val 5
    • 0x10001304 — это точный адрес в памяти, где хранится регистр REGOUT0.
    • --val 5 — это значение, которое устанавливает выходное напряжение 3.3 В. Число 5 в данном случае — это код из даташита Nordic, обозначающий VOUT = 3.3V.
  4. Сбросьте питание платы. Чтобы новые настройки вступили в силу, необходимо выключить и снова включить питание платы. После этого на выводах снова будет 3.3 В.

Способ 2: Через отладчик (GDB)
Если у вас уже настроена среда разработки с GDB-сервером, можно выполнить команду прямо в процессе отладки:

bash
(gdb) set *0x10001304 = 5
После этого нужно сбросить питание платы.

💎 Выводы
  • Проблема реальна и чаще всего проявляется на платах-донглах от Nordic. На многих сторонних платах с собственным стабилизатором питания её можно не заметить.
  • Решается проблема просто, одной командой nrfjprog.
  • На будущее: при разработке собственного кода можно добавить небольшую проверку при старте. Если код видит, что REGOUT0 имеет значение по умолчанию (1.8 В), он может автоматически перезаписать его на 3.3 В. Это гарантирует, что ваше устройство всегда будет работать правильно, даже если кто-то случайно сотрет всю память.
Если возникнут сложности с подключением программатора или выполнение команды не даст результата, напишите, и мы разберемся дальше.
Насколько я понял эта проблема моих плат не касается.
 

Akvalar

New member
Я случайно залил на свою NRF52840 прошивку от другого микроконтроллера через DFU. После этого NRF перестала определятся. Попробовал к ней подключиться через st-link and openocd, вот что пишет:
Код:
C:\nrf\openocd-20260302\OpenOCD-20260302-0.12.0>bin\openocd  -s share\openocd -f interface/stlink.cfg -f target/nrf52.cfg
Open On-Chip Debugger 0.12.0 (2026-03-02) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
libusb1 d52e355daa09f17ce64819122cb067b8a2ee0d4b
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
WARNING: 'target/nrf52.cfg' is deprecated, use 'target/nordic/nrf52.cfg' instead
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : STLINK V2J37S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.207952
Error: init mode failed (unable to connect to the target)
Что можно сделать? Как восстановить?
 

pvvx

Активный участник сообщества
Я случайно залил на свою NRF52840 прошивку от другого микроконтроллера через DFU. После этого NRF перестала определятся. Попробовал к ней подключиться через st-link and openocd, вот что пишет:
Код:
C:\nrf\openocd-20260302\OpenOCD-20260302-0.12.0>bin\openocd  -s share\openocd -f interface/stlink.cfg -f target/nrf52.cfg
Open On-Chip Debugger 0.12.0 (2026-03-02) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
libusb1 d52e355daa09f17ce64819122cb067b8a2ee0d4b
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
WARNING: 'target/nrf52.cfg' is deprecated, use 'target/nordic/nrf52.cfg' instead
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : STLINK V2J37S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.207952
Error: init mode failed (unable to connect to the target)
Что можно сделать? Как восстановить?
Напишите в google вопрос: "Какие сигналы кроме интерфейса SWD на выводах nRF52840 необходимо установить или подключить к Jlink для перепрошивки bootloader, если ранее в чип записан неверный код?"
и ИИ вам всё популярно объяснит. Включая коментарии по логам ошибок, которые вы ему скопируете...
 

Akvalar

New member
ИИ вам всё популярно объяснит.
Отвечаю популярно и по пунктам:
Для перепрошивки bootloader на nRF52840 через J-Link не нужно подключать дополнительные сигналы помимо интерфейса SWD (SWDIO и SWDCLK). Вся необходимая функциональность для записи нового загрузчика реализуется именно через эти линии.
у меня нет J-link, есть St-link. Но я думаю сути это не меняет.

Для перепрошивки bootloader на nRF52840 через ST-Link помимо интерфейса SWD (сигналы SWDIO — данные и SWCLK — тактовая частота) не нужно подавать на выводы никаких дополнительных сигналов, если вы используете штатный способ входа в режим программирования.
Почему не нужны дополнительные сигналы

Ключевой момент: если в чип уже записан некорректный код, задача — не просто подключиться к SWD, а перезаписать bootloader. Для этого используется специальный режим, который активируется подачей сигнала на вывод BOOT0 при включении питания. В этом режиме чип переходит во внутренний загрузчик, который и позволяет стереть и записать новый bootloader через альтернативные интерфейсы (часто это UART).
О Это интереснее. А где же пин BOOT0 ? Что то я такого не видел. Спрашиваем того же ИИ. Вот ответ:

У чипа nRF52840 нет аппаратного вывода BOOT0, как у микроконтроллеров STM32.
В STM32 вывод BOOT0 зашит в кремний и жестко управляет логикой запуска системного загрузчика из ПЗУ. В nRF52840 встроенного неизменяемого USB/UART-загрузчика от производителя нет — вся логика загрузки (Bootloader / DFU) реализуется программно и зависит от прошивки, которую вы используете (Nordic SDK, Zephyr, Adafruit TinyUF2 и т.д.). [1, 2, 3]
Если вам нужно перевести устройство на nRF52840 в режим загрузчика (DFU mode) для прошивки, это делается следующими способами:
У ё-моё. А чего ж ты мне тогда мозги делаешь? Ну и че дальше?
3. Что делать, если чип «кирпич» или абсолютно чистый?
Да да, вот вот, это мне и надо. Что же делать?
Если загрузчика в чипе вообще нет (новый чип с завода) или он поврежден, никакие кнопки и замыкания пинов не помогут.
В этом случае прошивка осуществляется исключительно через SWD-интерфейс с помощью программатора (J-Link, ST-Link с OpenOCD, CMSIS-DAP) через 4 обязательных контакта: VDD, GND, SWDIO, SWCLK. [1, 2]
Млин, так если он не подключается????????????
Составьте обращение в службу поддержки Nordic Semiconductor или обсудите Ваш вопросах на форумах.
А что делать если на форуме отправляют за помощью к ИИ?
Тогда ваша человеческая цивилизация зашла в тупик и близка к уничтожению.
Собственно, уже даже ИИ нам об этом говорит, поэтому давайте не будем тупить, а будем помогать друг другу, а не отправлять к ИИ.
 

nikolz

Well-known member
Работаю с ИИ давно и он мне помогает реально
Поэтому я задал ему Ваш вопрос Вот что он сказал:

1. Проверить режим загрузчика (самое простое)
Прежде чем паять и подключать программатор, стоит проверить, не входит ли чип в режим DFU принудительно.
  • Двойной сброс (Double Reset): Многие платы на nRF52840 (особенно от Adafruit или аналогичные) поддерживают вход в загрузчик, если дважды быстро нажать кнопку Reset (или кратковременно замкнуть пин Reset на GND). После этого плата должна определиться как USB-устройство (иногда как флешка или COM-порт) .
  • Зажать кнопку DFU/Reset при включении: Если на плате есть отдельная кнопка DFU или Reset, попробовать зажать её и подать питание (подключить USB). Это аппаратно заставляет чип остаться в загрузчике, не запуская «убитую» прошивку .
2. Использовать SWD (J-Link или второй nRF52840 DK)
Если USB-режимы не работают, устройство «кирпич» только для USB, но само ядро и отладочный порт (SWD) обычно живы. Нужен программатор (J-Link, или второй рабочий nRF52840 DK в качестве отладчика).
Что нужно сделать:
  1. Подключить программатор к пинам SWDIO, SWCLK, GND и VDD (или VTG) на плате.
  2. Выполнить команду полного стирания и восстановления защиты. Для этого используется утилита nrfjprog (из nRF Command Line Tools) или nRF Connect Programmer:
    • В командной строке: nrfjprog --recover -f NRF52 (эта команда стирает всю память и снимает защиту, даже если чип был заблокирован) .
    • Если через nRF Connect Programmer: выбрать устройство и нажать Erase & Write (или Erase all).
  3. После recover заново прошить правильный загрузчик (bootloader) и затем саму прошивку. Для nRF52840 часто проще всего залить оригинальный загрузчик от производителя платы (например, Adafruit, если это Feather, или Nordic, если это DK), а потом через USB залить пользовательский код.
3. Нюанс с напряжением (если используется J-Link)
Если человек использует J-Link для восстановления, стоит упомянуть один частый подводный камень: после полного стирания (recover) настройки внутреннего регулятора сбрасываются, и напряжение на пинах может упасть до 1.8V. Если J-Link не поддерживает 1.8V (например, J-Link EDU), он может не «увидеть» чип . В таком случае нужно либо использовать J-Link Pro, либо запитать плату отдельно от 3.3V, либо использовать другой отладчик (например, второй nRF DK).
Резюме для ответа на форуме:
  • Если плата определяется как USB-устройство: попробовать двойной сброс или зажать кнопку Reset при подключении, затем залить правильный загрузчик.
  • Если USB мёртв: подключить J-Link к SWD-пинам, сделать nrfjprog --recover, затем прошить оригинальный bootloader (и SoftDevice, если нужно) и только потом — рабочую прошивку.
  • Проверить питание: убедиться, что при подключении J-Link на плату подаётся питание (VTref).
Если у человека нет J-Link, можно попробовать использовать второй nRF52840 DK в качестве отладчика (через пины Debug Out -> Debug In).
===============================

это рекомендовала Алиса. Она тоже иногда отвечает по-делу

Почему плата перестала определяться
Когда на nRF52840 заливают прошивку «не от того» микроконтроллера:
  • Сбивается вектор сброса — процессор стартует не туда, где лежит корректный код, и не выходит в USB/DFU.
  • Перетирается загрузчик (bootloader) — без него плата не входит в режим прошивки и не определяется как диск/устройство.
  • Неверные смещения во Flash — прошивка может лежать не по тем адресам, которые ожидает загрузчик, либо затирает критические области (включая SoftDevice).
  • Конфликт с защитой Flash (на некоторых платах) — после неудачной прошивки доступ к памяти блокируется.
Что делать пошагово
  1. Попробуй принудительно ввести плату в режим DFU/загрузчика.
    В зависимости от платы это делается по‑разному:
    • двойное быстрое нажатие кнопки RESET;
    • зажать кнопку (RESET/BOOT/DFU), подключить к USB, потом отпустить;
    • дважды замкнуть RST на GND с интервалом <0.5 с.
      Если плата «ожила» и определилась как съёмный диск (UF2BOOT/NRF52BOOT) или как DFU‑устройство — сразу ставь корректный bootloader для этой платы (Adafruit/Seeed/Makerdiary и т.п.).
  2. Если не определяется вообще — нужен SWD‑программатор.
    Это самый надёжный вариант при «убитом» бутлоадере. Подойдут: ST‑Link v2, J‑Link, DAPLink. Подключаются 3–4 провода: SWDIO, SWCLK, GND (+ VCC, если плата не питается от программатора).
    Через pyOCD или OpenOCD можно:
    • стереть Flash полностью;
    • прошить правильный bootloader;
    • затем залить целевую прошивку.
  3. Пример через pyOCD:
    bash


    pyocd flash erase --target nrf52840
    pyocd flash write bootloader.hex --target nrf52840

    (файл bootloader берётся под конкретную плату и тип загрузчика — UF2, DFU и т.д.)
  4. Если есть только USB и нет программатора — попробуй «стирающий» UF2.
    Некоторые платы позволяют стереть Flash через специальный UF2‑файл (например, FLASH_ERASE_nrf52_softdevice.uf2). Его копируют на плату в режиме DFU. После этого можно снова прошить корректный bootloader и приложение. Но это работает только если загрузчик ещё частично жив и плата определяется как диск.
  5. Проверь питание и кабель.
    После неудачной прошивки иногда проявляются проблемы с USB из‑за сбоя питания или подтяжек. Попробуй другой кабель, другой порт, измерь напряжение на плате.
  6. Уточни модель платы.
    Платы на nRF52840 сильно отличаются: Adafruit Feather/Pro Micro, Seeed XIAO, Makerdiary, самодельные. У них разные bootloader’ы, разные смещения Flash и разные способы входа в DFU. Если скажешь точную модель платы, подскажу точный алгоритм и файлы.
Чего лучше не делать
  • Не пытайся «допрошить» ещё какой‑нибудь бинарник через DFU, пока не восстановишь bootloader — рискуешь окончательно заблокировать Flash.
  • Не меняй смещения и адреса «наугад» — можно окончательно испортить карту памяти.
Если скажешь, какая именно плата (модель/производитель) и что уже пробовал (каким способом и какой файл заливал), дам точные шаги и ссылки на нужные файлы bootloader под неё.
 

pvvx

Активный участник сообщества
у меня нет J-link, есть St-link. Но я думаю сути это не меняет.
Иногда поменяет
Запустите патченный STLinkReflash.exe и получите J-Link.
В утилитах Segger пропатчите JLinkARM.dll.
После этого перепрошитый ST-Link в J-Link будет работать со всеми известными вам чипами с JLink утилитами...
 

Akvalar

New member
Во-первых, всем спасибо, кто попытался помочь и передал мне советы ИИ.
Но, мне нужны конкретные ответы на конкретные вопросы.
Дано: перепрошитая nrf52840 в левую прошивку, после чего она перестала определяться и не прошивается через openocd по swd (делапо этой инструкции : https://crtv-club.readthedocs.io/ru/latest/nrf52_stlink_flashing.html).
Имеется: китайский st-link v.2 и рабочая nrf52840
Задачи: стереть из нее все содержимое и записать новый загрузчик.
Вопросы:
1. Какой софт и откуда скачать?
2. Как подключить?
3. Какие команды выполнить, что бы очистить память?
4. Как залить новый загрузчик? (Если через openocd не получится. )
5. Возможно необходимые манипуляции, которые нужно произвести дополнительно. Инструкции.
 

pvvx

Активный участник сообщества
https://chat.deepseek.com/ : Дано: перепрошитая nrf52840 в левую прошивку, после чего она перестала определяться и не прошивается через openocd по swd (делапо этой инструкции : https://crtv-club.readthedocs.io/ru/latest/nrf52_stlink_flashing.html). Имеется: китайский st-link v.2 и рабочая nrf52840 Задачи: стереть из нее все содержимое и записать новый загрузчик.
Ситуация неприятная, но не отчаянная. Скорее всего, после прошивки «левой» прошивки в чипе сработала аппаратная защита APPROTECT, которая блокирует доступ по SWD. Это стандартное поведение для новых ревизий nRF52840, и его можно обойти, но с оговорками для вашего оборудования.


Главная сложность в том, что дешёвый ST-Link V2 — это «высокоуровневый» адаптер, и он не всегда может напрямую достучаться до специального порта CTRL-AP, который нужен для снятия такой блокировки. Однако, поскольку у вас уже есть опыт работы с OpenOCD по инструкции, мы можем попробовать несколько методов, от наиболее вероятного к более сложным.

🛠 Метод 1: Попытка восстановления через OpenOCD с изменённой конфигурацией сброса
Это самый прямой путь. Проблема часто заключается в том, что OpenOCD не может правильно выполнить сброс после стирания, и чип мгновенно блокируется снова. Мы можем попробовать заставить его удерживать чип в состоянии сброса во время подключения.

  1. Создайте файл конфигурации OpenOCD (например, nrf52_recover.cfg) со следующим содержимым. Обратите внимание на строку reset_config, это ключевой момент:
    tcl
    source [find interface/stlink.cfg]
    transport select hla_swd

    source [find target/nrf52.cfg]

    # Ключевая настройка: удерживать SRST (аппаратный сброс) при подключении
    reset_config srst_only srst_push_pull connect_assert_srst srst_nogate
  2. Запустите OpenOCD в режиме сервера, указав этот файл конфигурации:
    bash
    openocd -f nrf52_recover.cfg
    В выводе вы должны увидеть, что OpenOCD подключился к чипу, даже если он заблокирован.
  3. В отдельном терминале подключитесь к серверу OpenOCD через telnet (порт 4444 по умолчанию) и выполните команду восстановления:
    bash
    telnet localhost 4444
    После подключения введите:
    text
    nrf52_recover
    Эта команда пытается выполнить ERASEALL через CTRL-AP и снять защиту. Если всё пройдёт успешно, вы увидите сообщение об успешном стирании и разблокировке.
  4. Сразу после этого, не отключая питание и не выполняя сброс, прошейте новый загрузчик. В том же telnet-сеансе или через отдельный экземпляр OpenOCD выполните:
    text
    program /путь/к/вашему/загрузчику.hex verify reset
Важное замечание: Как упоминалось, ST-Link V2 может не поддерживать доступ к CTRL-AP, и команда nrf52_recover может выдать ошибку. Если это произошло, переходите к следующему методу.

🔄 Метод 2: Использование готового скрипта для ST-Link V2
Существуют скрипты, специально адаптированные для работы с nRF52840 через ST-Link V2. Они могут использовать другой транспорт (dapdirect_swd), который иногда работает там, где hla_swd бессилен.

  1. Скачайте пример конфигурационного файла openocd.cfg из репозитория OpenSourceEBike. В нём уже прописан транспорт dapdirect_swd и нужные VID/PID для клонов ST-Link.
  2. Разместите файл прошивки загрузчика (.hex или .bin) в той же папке.
  3. Отредактируйте скрипт, указав имя вашего файла прошивки в переменной _fw_filename (строка 6).
  4. Запустите OpenOCD с этим скриптом. Скрипт должен автоматически выполнить стирание и прошивку.
Этот метод может обойти некоторые ограничения стандартного драйвера ST-Link.

⚠ Метод 3: «Тяжёлая артиллерия» (если ничего не помогло)
Если оба метода с ST-Link V2 потерпят неудачу, это будет означать, что ограничение оборудования непреодолимо. В этом случае остаётся только использовать инструменты, которые официально поддерживают работу с CTRL-AP:

  • J-Link (или его клон): Оригинальный J-Link или качественный клон (например, J-Link OB) поддерживают команду nrfjprog --recover или аналогичную в J-Link Commander, которая гарантированно снимает APPROTECT.
  • Плата разработчика nRF52 DK: Если у вас есть доступ к любой плате nRF52 DK (nRF52840 DK, nRF52833 DK и т.д.), вы можете использовать её встроенный отладчик J-Link как программатор для вашей «убитой» платы. Это самый надёжный метод. Вам нужно будет соединить контакты SWDIO, SWDCLK, GND и, возможно, RESET и VDD на обеих платах, а затем выполнить nrfjprog -f NRF52 --recover с компьютера, подключенного к DK.
💎 Итог
Начните с Метода 1 (модифицированный reset_config). Если nrf52_recover не сработает, попробуйте Метод 2 со скриптом для ST-Link V2. Эти два способа — ваш лучший шанс обойтись имеющимся оборудованием. Если же чип упорно не поддаётся, знайте, что это известное ограничение дешёвых адаптеров, и для гарантированного восстановления, скорее всего, потребуется J-Link или плата разработки от Nordic.

Надеюсь, один из этих методов поможет вернуть вашу плату к жизни. Если что-то пойдёт не так, присылайте вывод OpenOCD, попробуем разобраться.
 

pvvx

Активный участник сообщества
Но, мне нужны конкретные ответы на конкретные вопросы.
Для этого вы не указали конкретные данные.
К примеру:
1. какой у вас модуль/плата nrf52840.
2. какой у вас ST-Link V2 (если с чипом CKS32F103C8T6, то в поиске на данном форуме и найдите "CKS32F103C8T6" - там будет как сделать из него J-link)
 
Сверху Снизу