Здравствуйте.
Какое-то время я вынашивал идею написать статью о данном стеке, его особенностях и применении с использованием чипа nRF51822. А недавняя публикация "BLE стек от TI" заставила меня сесть и попытаться превратить идею в что-то материальное.
Nordic Semiconductor предоставляет очень интересное, на мой взгляд, решение. С одной стороны мощный чип на ядре ARM Cortex-M0, с другой стороны постоянно развивающееся ПО стека и набора библиотек, входящих в состав SDK.
К сожалению, на Хабре нет статей, посвященных тематике BLE на NORDIC-е, как в прочем, практически нет их и в рунете, поэтому надеюсь, что статья будет полезна тем, кто начинает использовать продукцию этой фирмы в части, касающейся BLE, а также тем, кто увлекается технологией Bluetooth и BLE в частности.
1. Железо
Рассматриваемый нами чип nRF51822 со стороны размера памяти представлен в 3 вариантах:
- 256КБ флеш и 16КБ ОЗУ;
- 128КБ флеш и 16КБ ОЗУ;
- 256КБ флеш и 32КБ ОЗУ.
При этом ОЗУ разделено на блоки и каждый блок имеет свое управление питанием. Я акцентирую на это внимание, потому, что при программировании чипа надо знать, что для приложения всегда используется старшая половина ОЗУ, тогда как младшая половина всегда используется стеком.
В зависимости от версии стека, так же может меняться адрес загрузки клиентского ПО. На это тоже необходимо обращать внимание. Если неверно указать адрес загрузки ПО, то программатор выдаст ошибку, по описанию которой никогда не понять почему именно не удалось прошить чип. Адрес загрузки ПО указывается в спецификации на каждую версию стека.
Итак, если dы решили работать со BLE от NORDIC, то прежде всего вам необходимо приобрести один из отладочных наборов. Вот некоторые из них:
— nRF51822 Evaluation Kit (EK) – независимая платформа для оценки и прототипирования, основанная на чипе nRF51822.
В состав набора входит:
- плата с чипом, с парой кнопок и парой светодиодов. На плате расположен программатор от Segger, имеющий свой уникальный номер, позволяющий программировать наш чип, производить отладку и, что не мало важно, позволяющий использовать UART для связи nRF51822 с компьютером посредством USB;
- USB донгл, так же с чипом nRF51822 и программатором от Segger, имеющий специальную прошивку NORDIC и используемый для связи с платой.
— nRF51822 Development Kit (DK) – зависимая от “Starter Kit” платформа, дает возможность создавать полноценные приложения используя не только BLE, но и все ресурсы чипа nRF51822, как микроконтоллера.
В состав набора входит:
- плата с nRF51822 и с PCB антенной;
- плата с nRF51822 и с разъемом для антенны;
- USB донгл такой же, как в EK;
- 5 чипов nRF51822;
- программатор
Кстати «зависимость» от “Starter Kit” не критична, если Вы умеете пользоваться паяльником или у Вас есть макетная плата и проводки.
— nRF51822 Starter Kit (SK) – это своего рода «материнская плата», к которой можно подключить EK и DK для использования всех возможностей чипа nRF51822.
В состав набора входит 2 материнские платы с наборами кабелей.
С недавнего времени фирма не рекомендует пользоваться EK и DK, т.к. появились новые отладочные наборы: "nRF51 DK" и "nRF51 Dongle", но я считаю, что EK и DK пока остаются очень хорошим средством изучения и прототипирования.
В настоящий момент в моей задаче используется nRF51822 DK без SK. Благодаря разъемам на платах DK, можно с помощью соединительных проводов и макетной платы подключать любую периферию, например, светодиоды для отображения наличия соединения или какой ни будь ошибки. Особенностью использования DK без SK является то, что на плату DK необходимо подать питание, а для этого нужно знать распиновку разъемов платы.
Она есть в документе «nRF51822_Development_Kit_User_Guide». В связи с тем, что в качестве «супер-хоста» для nRF51822 я использую отладочный модуль STM32L152-DISCOVERY, питание 3.3В подается оттуда.
Нюанс: пока Вы не приобретете один из наборов, Вы не сможете загрузить с сайта ни спецификацию, ни стек, ни программное обеспечение, за исключением ПО «nRFgo Studio» и документации на чипы.
Каждый отладочный набор имеет свой уникальный номер (ключ), наклеенный на коробку с набором. После покупки набора необходимо зарегистрироваться на сайте и в профиле пользователя ввести ключ, указанный на коробке. После этого Вам станут доступны:
- спецификации продукта;
- руководства пользователя;
- спецификации, прошивка и API стека;
- программное обеспечение;
- «Reference layout»;
2. Программное обеспечение, предлагаемое NORDIC
- стек SoftDevice S110 (S120, S130) – содержит заголовочные файлы API и бинарный (HEX) файл в котором содержится прошивка стека (для каждого типа стека свой HEX). Исходного кода самого стека нет.
- nRF51 SDK – содержит в себе заголовочные файлы API к стеку, а также исходные коды библиотек на языке С для упрощения работы со стеком и периферией чипов nRF51422 и nRF51822;
- Master Control Panel (MCP) – 32 и 64 разрядное ПО, предназначенное для работы с USB донглом и позволяющее производить поиск устройств, обнаруживать сервисы, читать атрибуты сервисов, устанавливать Bluetooth соединение, принимать и передавать данные. В режиме сервера есть возможность создавать любые сервисы, с характеристиками, определенными как в Bluetooth SIG, так и со своими собственными. В общем, это главная программа для отладки Вашего ПО с другой стороны беспроводного соединения. При установке Master Control Panel также устанавливается ПО под названием «Master Emulator». О нем мало где написано, но оно может понравиться многим разработчикам. Дело в том, что это API, позволяющее создать .NET приложение для ПК с ролью мастер-устройство.
- nRFgo Studio — 32 и 64 разрядное ПО, предназначенное для прошивки стека и клиентского ПО. Также с его помощью можно изменять прошивку материнских плат, входящих в комплект SK; создавать свои сервисы в том числе и на своих же UUID-ах; настраивать параметры безопасности соединения, настраивать GAP и advertising, настраивать периферию чипа, вычислять потребление энергии чипом и многое другое.
- nRF Sniffer – ПО для просмотра пакетов, передающихся от одного устройства к другому;
- nRF51-BLE-Driver – на самом деле это не драйвер в обычном смысле слова. Это DLL, предоставляющее API к стеку на языке С. Благодаря ему, Вы можете написать приложение для ПК, которое будет общаться со стеком, который можно вшить в USB донгл, входящий в состав DK или EK. API предоставляет реализацию только роли периферийного устройства.
- также можно загрузить исходные коды приложений для Android и iOS, позволяющие работать с отладочными наборами. Сами приложения можно найти в соответствующих платформам магазинах приложений. Приложения позволяют протестировать например, работу обновления прошивки по воздуху (DFU – Device Firmware Update Service) или UART по Bluetooth.
3. Средства разработки
Для программирования можно использовать как платные, так и бесплатные средства разработки. NORDIC предлагает использовать Keil MDK-ARM, IAR, а также любое IDE, позволяющее работать с GCC ARM. Для работы с GCC предлагается документ под названием «nAN-29 nRF51 Development with GCC and Eclipse Application Note» в котором описываются предложения для разработчиков, желающих использовать Eclipse, GCC и GDB.
NORDIC считает, что предпочтительнее использовать Keil и даже установщик «nRF51 SDK» интегрирует SDK в Keil, благодаря чему упрощается процесс создания проекта приложения. Все примеры, находящиеся в SDK, имеют файлы проектов формата Keil.
4. Стек SoftDevice
Стек предлагается в 3-х вариантах.
- S110 SoftDevice –предназначен для использования в случае, если ваше устройство должно обладать ролью периферийного устройства (Peripheral/Broadcaster).
- S120 SoftDevice – предназначен для использования в случае, если ваше устройство должно быть центральным устройством (Central/Observer). Данный стек может поддерживать до 8-ми одновременных соединений с периферийными устройствами.
- S120 SoftDevice – предназначен для использования в случае, если ваше устройство должно быть одновременно и периферийным и центральным (Central/Peripheral/Broadcaster/Observer).
API любого из вариантов стека позволяет управлять и контроллером BLE и хостом, т.е. и другой периферией, входящей в чип. Правильнее сказать так: если Вы используете стек SoftDevice, то управление остальной периферией происходит через API стека и он контролирует что и когда можно применять. Естественно чип можно использовать вообще без стека, как обычный микроконтроллер.
В информации о релизе очередной версии SDK всегда указывается поддерживаемая версия стека. Это очень важно, потому, что первое, с чем сталкивается программист, это невозможность прошить свою программу из-за несоответствия версии SDK и SoftDevice. Например, версия SDK 6.1.0 работает со следующими версиями стека: S110 — 7.0.0, 7.1.0; S120 — 1.0.0.
5. Прошивка стека и клиентского приложения.
В связи с тем, что стек предлагается только в виде бинарного файла-прошивки, встает вопрос, а как же работать с чипом, если надо шить и стек и свою программу?
Как видно из этих двух рисунков, стек шьется в нижнюю часть флеш-памяти и использует младшую половину ОЗУ, начинающуюся с адреса 0х2000000. Приложение же шьется в флеш-память, начиная с адреса CODE_R1_BASE использует ОЗУ с адреса RAM_R1_BASE.
Переменные CODE_R1_BASE и RAM_R1_BASE отличаются в зависимости от версии стека.
Стек шьется с помощью программы «nRFgo Studio» один раз, после чего можно писать свое приложение и шить его или «nRFgo Studio» или, что удобнее, с помощью Keil.
HEX-файл стека шьется один раз, после чего можно писать свое приложение и шить его или «nRFgo Studio» или, что удобнее, с помощью Keil.
Здесь показан пример настройки памяти в Keil для стека S110 v.6.0.0:
CODE_R1_BASE у нас равен 0x16000, а RAM_R1_BASE равен 0x20002000
А здесь показан пример настройки памяти в Keil для стека S120 v.1.0.0:
CODE_R1_BASE у нас равен 0x18000, а RAM_R1_BASE равен 0x20002800
6. Заключение
SDK предлагает большое количество примеров использования чипа nRF51822 как просто микроконтроллера, так и с применением стека. Благодаря примерам, можно быстро освоить программирование чипа параллельно изучая все тонкости SDK, а их там не мало.
NORDIC создал хороший форум, где можно получить ответ на практически любой вопрос. Сотрудники фирмы часто сами отвечают на вопросы и довольно быстро.
Благодарю вас за то, что дочитали мою статью до конца. Если вам будет интересно, а я пройду песочницу, то в следующей статье расскажу об особенностях реализации клиентского ПО с использованием SDK стека.
Хочу пожелать удачи и успехов в освоении и применении продукции Nordic Semiconductor, лично мне нравятся их решения.
Спасибо за внимание.
Автор: Lebets_VI