- PVSM.RU - https://www.pvsm.ru -
Добрый день, сообщество !
Вот и наступило время каникул у студентов технических ВУЗов. А значит пришло время для домашних проектов и покорения новых вершин микроэлектронной техники. Сегодня речь пойдет о моих изысканиях с платами на базе микросхемы NRF51822, которая является несколько устаревшим Bluetooth модулем от компании Nordic Semiconductor. Эта компания славится радио модулями с низким потреблением тока и микросхема NRF51822 — не исключение. Но не будем отвлекаться от темы. Поговорим про железо.
Еще в октябре были заказаны платы yj-14015-nrf51822 для экспериментов с Bluetoth. Плохой идеей было покупать платы без распайки на штырьевые разъемы под стандартные провода для любителей электроники.
Расстояние между контактами менее 1 мм создали большие сложности для меня, человека с крайне скромным опытом пайки. Выходы на плате были не предназначены для пайки к проводам и их легко было оторвать. Эта судьба постигла единственный выход питания VDD. Но с помощью усилий соседа удалось подпаять провод к выводу конденсатора на плате. Совместными усилиями были распаяны выходы GND, SWDIO, SWCLK и некоторые другие выходы GPIO. В итоге получилось нечто, похожее своим видом на Франкенштейна:
Отлаживать и прошивать наш девайс будем с помощью ST-Link V2 [1] Схема подключения предельно простая и логичная:
ST-Link V2 | nrf51822 |
---|---|
3.3V | VDD |
GND | GND |
SWDIO | SWDIO |
SWDCLK | SCLK |
В отличии от Франкенштейна одного разряда тока было не достаточно для оживления этого модуля. В первую очередь я попытался считать память nrf51822 с помощью STM32 ST-LINK utility [2]. С некоторыми оговорками это работало с платами STM32 но только не с nrf. На этом моя работа с платой временно прекратилась. Чуть позже я нашел статью 1 [3] и статью 2 [4] про работу с nrf51822. В ней были приведены ссылки на SDK и детальное описание способа организации памяти nrf. Автор статей использовал более дорогой отладчик JLink в отличии от нас. Дешевизна решения очень важна, если вы нищий студент:).
Если вы хотите использовать bluetooth функционал, что довольно логично для bluetooth микросхемы, вы должны будете положить в начало программируемой памяти nrf5 так называемый "softdevice". Он поставляется в виде прошивки и содержит функционал bluetooth. В оставшуюся часть памяти записывается ваша прошивка. Из нее можно вызывать процедуры softdevice для настройки bluetooth.
Существует несколько разных softdevice-ов. Для nrf51 можно использовать s110 (для серверных приложений) и s130 (для серверных и клиентских приложений). Для понимания совместимости версий SDK и softdevice-ов есть матрица совместимости [5]. Из нее видно, что для нашей платы подходят SDK до версии 12.3.0. Но мы остановимся на SDK 10.0.0 [6] т.к. он поддерживает s110 и s130.
В примерах из SDK и в статьях используется утилита nrfjprog для прошивки через JLink, а нам нужно прошивать через ST-Link V2. Вместо нее будем использовать крутую программу OpenOCD [7], скачать для Windows [8]. Она позволяет прошивать и отлаживать туеву хучу огромное количество различных плат и микросхем. Существует конфигурация [9] и для микросхемы nrf51. Чтобы заставить OpenOCD прошить нашу плату, необходимо выполнить команду формата, представленного ниже (предварительно добавив папку OpenOCD/bin в Path). Подробнее про команды OpenOCD можно прочесть в документации [10].
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
Дьявол как всегда кроется в деталях:
В SDK входят hex файлы softdevice-ов. Чтобы залить 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", чтобы softdevice не стерся. А также не забыть про смещение. Для s130 смещение 0x1c000, а для s110 — 0x18000. Эти значения можно узнать в спецификации для s130 [11] и s110 [12].
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 должны лежать прошивка softdevice и наша. Для тестов я использовал пример из папки <nRF5_SDK>/examples/ble_peripheral/ble_app_beacon и приложение для Android под названием "nRF Connect". После выполнения команд я начал видеть устройство с названием nRF. Этого мы и добивались.
SDK nrf51 содержит примеры на базе make- файлов. Для работы с CLion необходимо описать сборку проекта с помощью CMake- файлов. Гугление показало, что CMake проект для nrf51 [13] уже есть на гитхабе. Он написан для использования с SDK 12.X.X. Из-за этого некоторые пути к файлам для нашего SDK 10.0.0 оказались прописаны не верно. Кроме того в проекте так же используется утилита nrfjprog. Поэтому пришлось повозиться с настройкой проекта и переписать таргеты для прошивки с помощью OpenOCD. Результат моей работы можно найти на гитхабе [14]. В readme описана инструкция по настройке проекта и отладке в CLion.
Многие технические детали, связанные с особенностями nrf51822, ускользнули из моего повествования. Надеюсь, я когда нибудь восполню пробелы, дополнив статью или написав новую.
Автор: zzuummaa
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/embedded/307860
Ссылки в тексте:
[1] ST-Link V2: https://www.aliexpress.com/item/ST-LINK-Stlink-ST-Link-V2-Mini-STM8-STM32-Simulator-Download-Programmer-Programming-with-Cover/32921831799.html
[2] STM32 ST-LINK utility: https://www.st.com/en/development-tools/stsw-link004.html
[3] статью 1: https://www.diytronic.ru/2017/12/05/testing-nrf51822-ble-module/
[4] статью 2: https://www.diytronic.ru/2018/01/08/nrf51822-trying-to-make-bluetooth-working/
[5] матрица совместимости: https://www.nordicsemi.com/DocLib/Content/Comp_Matrix/nRF51/latest/COMP/nrf51/nRF51422_nRF51822_ic_rev_sdk_sd_comp_matrix
[6] SDK 10.0.0: https://developer.nordicsemi.com/nRF5_SDK/nRF51_SDK_v10.x.x/doc/10.0.0/
[7] OpenOCD: http://openocd.org/
[8] скачать для Windows: http://sysprogs.com/files/gnutoolchains/arm-eabi/openocd/OpenOCD-20181130.7z
[9] конфигурация: https://acassis.wordpress.com/2016/02/25/using-openocd-to-program-a-homebrew-nrf51822-board/
[10] документации: http://openocd.org/doc/html/General-Commands.html
[11] s130: http://infocenter.nordicsemi.com/pdf/S130_SDS_v1.0.pdf
[12] s110: http://infocenter.nordicsemi.com/pdf/S110_SDS_v2.0.pdf
[13] CMake проект для nrf51: https://github.com/Polidea/cmake-nRF5x
[14] гитхабе: https://github.com/zzuummaa/nrf5_sdk_cmake
[15] Источник: https://habr.com/ru/post/439148/?utm_campaign=439148
Нажмите здесь для печати.