Работа С Nrf51822 С Помощью St-Link И Clion + Openocd

Добрый день, сообщество Хабра! Настало время каникул для студентов технических вузов.

А это значит, что пришло время домашних проектов и покорения новых вершин микроэлектронных технологий.

Сегодня мы поговорим о моих исследованиях с платами на базе чипа NRF51822, который представляет собой несколько устаревший Bluetooth-модуль от Nordic Semiconductor. Эта компания славится радиомодулями с низким потреблением тока и микросхема NRF51822 не является исключением.

Но не будем отклоняться от темы.

Давайте поговорим о железе.

Создание отладочного стенда Платы были заказаны еще в октябре.

yj-14015-nrf51822 для экспериментов с Bluetooth. Покупать платы, не припаяв их к штырьковым разъемам для стандартных проводов для любителей электроники, было плохой идеей.

yj-14015-nrf51822

Работа с nRF51822 с помощью ST-Link и Clion + OpenOCD

Расстояние между контактами менее 1 мм создало большие трудности для меня, человека с крайне ограниченным опытом пайки.

Выводы на плате не были предназначены для пайки к проводам и их было легко оторвать.

Такая участь постигла единственный силовой выход VDD. Но с помощью соседа нам удалось припаять провод к выводу конденсатора на плате.

Вместе были соединены выходы GND, SWDIO, SWCLK и некоторые другие выходы GPIO. В результате получилось нечто похожее на Франкенштейна: Паяная плата

Работа с nRF51822 с помощью ST-Link и Clion + OpenOCD

Будем отлаживать и прошивать наше устройство с помощью СТ-Линк V2 Схема подключения предельно проста и логична:

СТ-Линк V2 nrf51822
3,3 В ВДД
Земля Земля
СВДИО СВДИО
СВДКЛК СКЛК
В отличие от Франкенштейна, одного разряда тока было недостаточно, чтобы оживить этот модуль.

Прежде всего я попытался прочитать память nrf51822, используя Утилита STM32 ST-LINK .

С некоторыми оговорками это работало с платами STM32, но не с nrf. На этом моя работа с доской временно прекратилась.

Чуть позже я нашел Статья 1 И статья 2 о работе с nrf51822. Там были ссылки на SDK и подробное описание организации nrf-памяти.

Автор статей использовал более дорогой отладчик JLink, в отличие от нас.

Дешевизна решения очень важна, если вы плохой студент :).

Изучение SDK Если вы хотите использовать функцию Bluetooth, что вполне логично для блютуз чипа, вам придется поставить так называемый «softdevice» в начало программируемой памяти nrf5. Он поставляется в виде прошивки и содержит функцию Bluetooth. В оставшейся памяти записана ваша прошивка.

Из него можно вызвать процедуры softdevice для настройки bluetooth. Существует несколько различных программных устройств.

Для nrf51 можно использовать s110 (для серверных приложений) и s130 (для серверных и клиентских приложений).

Чтобы понять совместимость версий SDK и программных устройств, существует матрица совместимости .

Это показывает, что для нашей платы подходит SDK до версии 12.3.0. Но мы остановимся на SDK 10.0.0 потому что он поддерживает s110 и s130. Настройка OpenOCD В примерах из SDK и в статьях для прошивки через JLink используется утилита nrfjprog, а нам нужно прошивать через ST-Link V2. Вместо этого мы воспользуемся крутой программой OpenOCD , скачать для Windows .

Позволяет прошивать и отлаживать Мне чертовски надоела Туева огромное количество различных плат и микросхем.

Существует конфигурация и для чипа nrf51. Чтобы заставить OpenOCD прошить нашу плату, нам нужно запустить команду в формате, представленном ниже (после добавления папки OpenOCD/bin в Path).

Вы можете прочитать больше о командах OpenOCD в документация .

  
  
   

openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "nrf51 mass_erase 0" -c "flash write_image <PATH_TO_HEX> <OFFSET>" ^ -c reset -c exit

Дьявол, как всегда, кроется в деталях:
  • «перезагрузка остановки» отправляет команду сброса чипа и останавливает устройство.

    В этом состоянии прошивку можно стереть/записать

  • "nrf51 Mass_erase 0" разрешает запись в раздел загрузчика и стирает всю программируемую память чипа (в некоторых случаях поможет избежать ошибок загрузки прошивки)
  • вместо нужно подставить путь к шестнадцатеричному файлу
  • устанавливает смещение адреса записи прошивки.

    Этот параметр полезен, если вы хотите прошить свою прошивку отдельно от программного устройства.

    Если вы хотите записать прошивку начиная с начала памяти (с адреса 0x0), то этот параметр можно сбросить

  • сброс сбрасывает чип, чтобы он работал с новой прошивкой
SDK включает шестнадцатеричные файлы программных устройств.

Для загрузки s130 на плату можно использовать следующую последовательность команд:

set file=<nRF5_SDK>/components/softdevice/s130/hex/s130_nrf51_1.0.0_softdevice.hex openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "nrf51 mass_erase 0" -c "flash write_image %file%" -c reset -c exit

Затем вы можете залить нашу прошивку.

Важно удалить «nrf51 Mass_erase 0», чтобы софтдевайс не стирался.

А также не забывайте про офсет. Для s130 смещение — 0x1c000, а для s110 — 0x18000. Эти значения можно найти в характеристиках на с130 И с110 .



set file=<PATH_TO_HEX> openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "flash write_image %file% 0x1c000" -c reset -c exit

Теперь программируемая память nrf51822 должна содержать софтдевайс и нашу прошивку.

Для тестов я использовал пример из папки /examples/ble_peripheral/ble_app_beacon и приложение для Android под названием «nRF Connect».

После выполнения команд я начал видеть устройство под названием nRF. Это то, чего мы хотели.

Настройка проекта CLion SDK nrf51 содержит примеры на основе make-файлов.

Для работы с CLion необходимо описать сборку проекта с помощью файлов CMake. Гугление показало, что Проект CMake для nrf51 уже есть на Github. Он написан для использования с SDK 12.X.X. Из-за этого некоторые пути к файлам нашего SDK 10.0.0 были написаны неправильно.

Кроме того, в проекте также используется утилита nrfjprog. Поэтому пришлось повозиться с настройкой проекта и переписать таргеты для прошивки с использованием OpenOCD. Результат моей работы можно посмотреть на сайте github .

В readme описаны инструкции по настройке проекта и отладке в CLion. P.S. Многие технические детали, связанные с особенностями nrf51822, ускользнули от моего повествования.

Надеюсь когда-нибудь восполню пробелы, дополнив статью или написав новую.

Теги: #Программирование микроконтроллеров #C++ #embedded #CMake #clion #nrf51822 #openocd #ST-Link

Вместе с данным постом часто просматривают: