Руководство для разработчика приложений на базе STM32WB55

16 декабря 2019

автомобильная электроникаучёт ресурсовсветотехникапотребительская электроникаинтернет вещейST Microelectronicsстатьяинтегральные микросхемыбеспроводные технологиисредства разработки и материалы

Михаил Емельянов (г. Уфа)

Представив двухъядерные беспроводные микроконтроллеры STM32WB для IoT-приложений, компания STMicroelectronics предлагает разработчикам экосистему, включающую в себя отладочные платы, примеры кода для микроконтроллера, готовое ПО всех уровней и большой массив документации.

Еще лет пятнадцать-двадцать назад персональный компьютер, не подключенный ни к локальной, ни к глобальной сети, воспринимался нормально. «Отсутствие сети некритично, – считало большинство специалистов, – компьютер может выполнять свою работу самостоятельно, а передачу результатов работы можно организовать при помощи принтера или на дискетах». Теперь, когда мы видим колоссальную разницу в эффективности работы между одиночным компьютером и компьютером, подключенным к сети, ПК без сетевого соединения стал анахронизмом.

Прямо сейчас мы находимся на гребне следующей волны – объединения при помощи беспроводных сетей сенсоров, устройств низкоуровневой обработки данных, облачных хранилищ и производительных серверов. Очень скоро электронное устройство, не имеющее функционала IoT, тоже будет восприниматься как анахронизм, и, что гораздо важнее, будет намного менее производительным, эффективным и удобным, чем IoT-конкурент.

Компания STMicroelectronics, – мировой лидер в разработке аппаратных решений для IoT, – в последнее время выпустила несколько серий микроконтроллеров, предназначенных для создания IoT-устройств. И если, например, микроконтроллеры STM32G0 (о которых можно прочитать в нашей публикации «Новое семейство микроконтроллеров STM32G0») могут применяться как основа беспроводных устройств нижнего уровня, таких как сенсоры и исполнительные устройства, то рассмотренному в этой статье семейству двухъядерных микроконтроллеров STM32WB отводится скорее роль офицера армии IoT. На его основе можно построить не только высокопроизводительное устройство обработки данных, но и такие беспроводные устройства как BLE-датчик или узел ZigBee-сети.

Обзор возможностей STM32WB

Микроконтроллеры серии STM32WB изначально созданы как аппаратная основа для беспроводных IoT-устройств и построены по двухъядерной схеме, объединяющей более производительное ядро ARM Cortex‑M4 (далее – CPU1), работающее на частоте до 64 МГц и предназначенное для исполнения основной пользовательской программы, и менее скоростное ядро ARM Cortex-M0+ с рабочей частотой до 32 МГц (далее – CPU2), реализующее работу с беспроводным протоколом. Кроме двух ядер, на кристалле имеется набор разделяемой периферии, доступ к которой регулируется при помощи аппаратных семафоров. Более подробно микроконтроллеры STM32WB описаны в другой статье – «STM32WB: новый перспективный мультисистемный чип BLE/ZigBee/Thread/802.15.4».

На базе STM32WB можно построить устройство, имеющее доступ к следующим беспроводным сетям:

  • Bluetooth 5 с технологией BLE (Bluetooth Low Energy);
  • IEEE 802.15.4. На базе стандарта 802.15.4 построены технологии ZigBee и Thread, которые способны организовывать ячеистую топологию сети с самовосстановлением. Подробная информация о сетях на базе 802.15.4 имеется в статье «ZigBee VS Thread: Технологии построения беспроводных mesh-сетей».

Стеки, поддерживаемые STM32WB, показаны на рисунке 1.

Рис. 1. Стеки, поддерживаемые STM32WB

Рис. 1. Стеки, поддерживаемые STM32WB

Для полноценной работы с микроконтроллером важно осознавать, что STM32WB поставляется с большим набором предварительно разработанного программного обеспечения, доступного для скачивания на сайте. Во-первых, это пакеты STM32CubeWB и STM32CubeMonitor-RF для конфигурации, настройки и тестирования системы, созданной на базе STM32WB. Во-вторых, компания ST предоставляет двоичные файлы для CPU2, которые и определяют используемый беспроводной протокол. Выбрать необходимый двоичный файл можно в соответствии с таблицей 1.

Межпроцессорное взаимодействие между CPU1 и CPU2 осуществляется через IPCC (Inter-Processor Communication Controller – контроллер межпроцессорного обмена). Каждый раз, когда пользовательский код CPU1 вызывает какую-либо процедуру, определенную в стеке, загруженном в CPU2, происходит передача сообщения через IPCC. API (Application Programming Interface – интерфейс прикладного программирования) используемого стека старается максимально скрыть от программиста факт использования двухпроцессорной конфигурации, имитируя работу на обычном одноядерном микроконтроллере, облегчая труд разработчика и оставляя за кадром работу с IPCC и разделяемой памятью.

Таблица 1. Поддерживаемые технологии

Используемая технология Двоичные файлы
BLE stm32wb5x_BLE_Stack_fw.bin

stm32wb5x_BLE_HCILayer_fw.bin

Thread stm32wb5x_Thread_FTD_fw.bin stm32wb5x_Thread_MTD_fw.bin
Одновременная работа с BLE и Thread stm32wb5x_BLE_Thread_fw.bin
MAC 802.15.4 stm32wb5x_Mac_802_15_4_fw.bin

Работа с STM32CubeWB подробно рассмотрена в материале «UM2550, Getting started with STM32CubeWB for STM32WB Series» (в разделе 5 описана загрузка двоичного файла в CPU2). Работа с STM32CubeMonitor-RF рассмотрена в документе «UM2288, STM32CubeMonitor-RF software tool for wireless performance measurements». 

Работа с полным BLE-стеком в CPU2

Архитектура STM32WB предполагает разделение работы с BLE на пользовательскую часть, исполняемую на CPU1, и процедуры реального времени, плотно взаимодействующие с аппаратной частью и исполняемые на CPU2.

Приложение на CPU1 отвечает за сбор и обработку данных, передаваемых через BLE.

BLE-стек в CPU2 отвечает за:

  • взаимодействие с PHY (аппаратным трансивером 2,4 ГГц);
  • диспетчер энергопотребления (Low Power Manager);
  • работу с GAP (Generic Access Profile) – набором процедур, ответственных за такие аспекты функционирования как обнаружение Bluetooth-устройства, установление/завершение сеанса связи и обеспечение безопасности сеанса;
  • работу с GATT (General Attribute Protocol) – обязательный Bluetooth-профиль, отвечающий за отправку и прием небольших информационных пакетов, таких как уникальный номер устройства или уровень заряда аккумулятора;
  • трассировку отладочной информации.

Создание приложения BLE поверх интерфейса HCI

Для лучшего понимания разницы между работой с готовым Bluetooth-стеком и самостоятельной реализацией BLE поверх интерфейса HCI сравните рисунки 2 и 3. Большинство примеров кода для создания BLE-устройств основано на разделении программного кода (рисунок 2). Это основной вариант использования чипа STM32WB55. Однако также возможен вариант разделения Bluetooth-стека между CPU1 и CPU2 на уровне HCI.

Рис. 2. Разделение Bluetooth-стека между контроллерами при использовании двоичных библиотек STMicroelectronics

Рис. 2. Разделение Bluetooth-стека между контроллерами при использовании двоичных библиотек STMicroelectronics

Рис. 3. Разделение Bluetooth-стека между контроллерами при использовании CPU2 как сопроцессора уровня HCI

Рис. 3. Разделение Bluetooth-стека между контроллерами при использовании CPU2 как сопроцессора уровня HCI

В этом варианте части высокоуровневых слоев, таких как GAP, GATT и L2CAP (Logical Link Control and Adaptation Protocol – протокол управления логическим подключением и адаптацией) перемещаются в код процессора CPU1 (рис. 3). Данный подход позволяет применить альтернативную реализацию Bluetooth-стека в CPU1, разработанную самостоятельно или взятую из проектов с открытым исходным кодом. В таком случае CPU2 используется как сопроцессор со стандартизированным интерфейсом BLE-HCI (Host Controller Interface – интерфейс хост-контроллер, который обеспечивает унифицированный доступ к низкоуровневым ресурсам).

Большинство реализаций HCI для связи с сопроцессором использует интерфейс UART. Эквивалентным физическим уровнем в микроконтроллере STM32WB является почтовый ящик (mailbox), используемый для связи CPU1 и CPU2.

Почтовый ящик используется как для пересылки данных стека BLE, так и для системного обмена данными. В случае самостоятельной разработки стека необходимо реализовать буфер BLE-команд и интерфейс для сообщений, полученных через почтовый ящик. Кроме того, пользователь должен самостоятельно уведомлять драйвер почтового ящика об окончании обработки асинхронного пакета данных.

Системный обмен данными не обрабатывается стеком BLE, поэтому и здесь нужно будет реализовать пользовательский транспортный уровень, включая буферизацию системных команд, интерфейс для сообщений и уведомление об освобождении асинхронного буфера. 

Приложение Thread

CPU2 реализует стек OpenThread, предоставляя доступ CPU1 к соответствующему API. При работе с Thread вы можете использовать следующие двоичные файлы:

  • stm32wb5x_Thread_FTD_fw – реализуются все роли Thread-устройства (FTD, full Thread device, полнофункциональное устройство Thread), кроме граничного маршрутизатора;
  • stm32wb5x_Thread_MTD_fw – реализуются только роли конечного устройства (Minimal End Device, MED) или засыпающего конечного устройства (Sleepy End Device, SED). Такая конфигурация занимает меньше памяти, чем предыдущий вариант;
  • stm32wb5x_BLE_Thread_fw – поддерживается одновременно как Thread FTD, так и BLE. 

Приложение MAC 802.15.4

При загрузке в CPU2 бинарного файла STM32wb5x_Mac_802_15_4_fwCPU1 получает доступ непосредственно к уровню MAC 802.15.4 и вы можете создать собственное приложение поверх него.

Совместная работа BLE и Thread

Прошивка stm32wb5x_BLE_Thread_fw поддерживает совместную работу BLE и Thread. Работа ведется в статическом конкурентном режиме. Для переключения из BLE в Thread и наоборот требуется полная остановка используемого стека и инициализация вновь запускаемого. Переключение между стеками может занять несколько секунд, так как оно требует полной повторной инициализации беспроводной сети.

Архитектура ПО STM32WB

Основные положения:

  • ПО для CPU1 предоставляется в виде исходных текстов и библиотек;
  • ПО для CPU2 предоставляется в виде предварительно скомпилированных бинарных файлов, подвергнутых после компиляции шифрованию, и, с точки зрения пользователя, выглядящих как «черный ящик»;
  • обмен между процессорами ведется при помощи почтового ящика.

Список ресурсов, доступных в рамках конфигурационного ПО STM32Cube:

  • HAL/LL (Hardware Abstraction Layer/Low Layer) для высокоуровневого доступа к регистрам процессора;
  • BSP (Board Support Package) – комплект ПО, ориентированного на конкретные отладочные платы на базе STM32WB или на конкретную аппаратную реализацию разрабатываемого изделия;
  • ПО среднего уровня (middleware), такое как ОС FreeRTOS или стек USB.

Кроме того, для эффективной системной интеграции доступны следующие приложения:

  • планировщик (sequencer) для последовательного выполнения задач в фоновом режиме и перехода в режим пониженного энергопотребления при отсутствии активности;
  • таймер-сервер (timer server) для предоставления приложению таймеров, работающих на базе RTC (Real Time Clock – часы реального времени) в режимах «Stop» и «Standby».

Микросхема с фабрики идет «чистой», то есть без какого-либо кода для CPU1 и CPU2. В процессе производства изделия необходимо через порт SWD или по USB загрузить бинарный файл используемого беспроводного протокола для CPU2 и собственно приложение пользователя для CPU1.

Разделяемая периферии

Некоторая периферия для CPU1 и CPU2 является общей, доступ к ней реализуется при помощи аппаратных семафоров. В общей сложности, программисту доступно 32 семафора: от Sem0 до Sem31. В настоящее время система использует для собственных нужд шесть семафоров (Sem0…Sem5,) но их количество может вырасти в следующих реализациях ПО CPU2, поэтому в случае использования свободных семафоров для прикладной программы во избежание пересечения с системными запросами рекомендуется использовать сначала Sem31, потом Sem30 – и так далее по нисходящей.

Системные семафоры используются для доступа к следующей периферии:

  • Sem0: RNG (Random Number Generator – генератор случайных чисел). Для уменьшения задержки доступа к RNG со стороны CPU2 прикладной программе на CPU1 рекомендуется заранее, до начала работы выбранного стека, создать массив случайных чисел, которые могут быть использованы позже;
  • Sem1: PKA (PUBLIC KEY ALGORITHM – часть механизма AES-шифрования);
  • Sem2: Flash-память. В частности, стек BLE использует запись во Flash при работе с GATT;
  • Sem3: переход в микропотребляющие режимы;
  • Sem4: предотвращение состояния гонки при переключении системной тактовой частоты в условиях, когда один процессор входит в состояние пониженного энергопотребления, а второй выходит из него;
  • Sem5: контроль частоты 48 МГц (CLK48), используемой для тактирования RNG и USB.

Планировщик

Планировщик является отдаленным аналогом ОС и способен по очереди выполнять задачи, которые предварительно нужно особым образом зарегистрировать в системе. Планировщик обладает следующими особенностями:

  • максимальное количество задач – 32;
  • возможность добавления и извлечения задач из общего пула задач;
  • возможность изменения логики вызова задач, основываясь на полученных сообщениях;
  • способность планировщика в случае отсутствия задач переключать микроконтроллер в режим микропотребления. Выход из микропотребляющего режима возможен не только по таймеру, но и по приходу нового сообщения.

Таймер-сервер

Таймер-сервер обладает следующими особенностями:

  • до 255 виртуальных таймеров, в зависимости от выделенной емкости ОЗУ;
  • режимы однократного и непрерывного счета;
  • возможность задания разных значений для периода срабатывания и задержки между срабатыванием и повторным запуском;
  • возможность удаления неиспользуемых таймеров;
  • период до 232 – 1 такта.

Таймер-сервер работает на базе RTC и может использоваться одновременно со штатными функциями RTC, такими как календарь.

Диспетчер энергопотребления

Диспетчер энергопотребления – часть ПО CPU2, отвечающая за переключение режимов энергопотребления с учетом запросов нескольких одновременно исполняемых задач. Диспетчер обладает следующими особенностями:

  • максимальное количество задач, запросы которых учитываются при выборе режима энергопотребления – до 32;
  • возможность работы в режимах «Stop» и «Off»;
  • отслеживание запросов даже в режиме пониженного энергопотребления;
  • обратный вызов (callback) при входе или выходе из режима пониженного энергопотребления.

Начальное конфигурирование

Перед началом процесса конфигурирования в CPU2 должен быть прошит бинарный файл, соответствующий выбранному беспроводному интерфейсу. Код первоначальной инициализации системы рекомендуется разбить на три фрагмента, находящихся в трех разных файлах:

  • Main.c: низкоуровневая инициализация – настройка тактовых частот, режимов энергопотребления, часов реального времени, таймер-сервера и прочего; настройка выбранной ОС (например, FreeRTOS, подключаемой еще на этапе конфигурирования проекта в STM32Cube) или, в случае отсутствия ОС, запуск главного программного цикла. Необходимо помнить, что тактовая частота CPU2 всегда должна равняться 32 МГц.
  • App_entry.c – инициализация периферии, специфичной для конкретного приложения (BSP) – светодиоды, кнопки и другие органы ввода-вывода, внешняя память, интерфейсы UART, SPI, USB и так далее. Здесь же нужно настроить параметры межпроцессорного обмена через почтовый ящик. После этого нужно вернуться в главный программный цикл (или передать управление ОС) и ждать сообщения о готовности (System Ready Event) от CPU2, после чего можно переходить к следующему этапу.
  • App_ble.c, или app_thread.c, либо, в общем виде, app_xxx.c, в зависимости от выбранного стека – инициализация выбранного беспроводного интерфейса. После получения сообщения о готовности от CPU2 необходимо вызвать APP_BLE_Init() для конфигурирования стека BLE и/или APP_THREAD_Init() для конфигурирования стека Open Thread. Подробности работы с BLE, Thread и MAC 802.15.4 рассмотрены в следующих трех разделах.

Реализация приложения BLE

Работа с беспроводной сетью BLE проходит через несколько этапов, каждый из которых представлен в API CPU2 соответствующими процедурами.

В ходе этапа инициализации необходимо выполнить следующие операции (в скобках здесь и далее упомянуты конкретные методы, имеющиеся в API CPU2):

  • сконфигурировать публичный адрес устройства BLE (aci_hal_write_config_data());
  • настроить мощность передатчика (aci_hal_set_tx_power_level());
  • настроить профиль GATT (aci_gatt_init());
  • в зависимости от выбранной роли BLE-устройства, сконфигурировать GAP (aci_gap_init(“role”));
  • в случае использования функционала BLE, связанного с безопасностью, определить требования к аутентификации (aci_gap_set_io_capability() и aci_gap_set_authentication_requirement());
  • в случае, когда устройство работает как GATT-сервер, сконфигурировать конкретный набор предоставляемых сервисов (aci_gatt_add_service(), aci_gatt_add_char() и aci_gatt_add_char_desc()).

После инициализации в качестве периферийного BLE-устройства следует этап широковещательной передачи данных, иначе называемый рекламным этапом (Advertising Phase), когда устройство работает с сообщениями, у которых фиксирован код доступа (AccessAddress0x8E89BED6) и которые видны всем BLE-устройствам, находящимся в режиме сканирования. Это необходимо для дальнейшего установления связи между конкретной парой из ведущего и периферийного устройств и реализуется следующими процедурами режима обнаружения GAP (GAP discoverable mode):

  • перевод устройства в режим обнаружения (aci_gap_set_discoverable());
  • перевод устройства в режим обнаружения, ограниченный по времени (aci_gap_set_limited_discoverable()). Максимальное время работы в этом режиме ограничено 180 с. Выход из обоих режимов обнаружения осуществляется при помощи команды aci_gap_set_non_discoverable();
  • перевод устройства в режим прямого подключения (aci_gap_set_direct_connectable()). Устройство может находиться в этом режиме максимум 1,28 с, после чего режим обнаружения отключается.

В случае, если устройство работает в качестве ведущего (Central), необходимо использовать процедуры инициализации соединения с периферийным устройством, реализуемые в рамках этапа обнаружения и подключения, это:

  • запуск сканирования периферийных устройств, находящихся в режиме обнаружения (aci_gap_start_general_discovery_proc());
  • запуск сканирования периферийных устройств, находящихся в режиме обнаружения, ограниченного по времени (aci_gap_start_limited_discovery_proc());
  • подключение к конкретным периферийным устройствам, предварительно добавленным в «белый список» (aci_gap_start_auto_connection_establish_proc());
  • подключение к одному конкретному периферийному устройству (aci_gap_create_connection()).

Запущенные процедуры подключения можно завершить при помощи команды aci_gap_terminate_gap_proc().

Дальнейшие действия BLE-устройства зависят от того, является ли оно GATT-сервером или GATT-клиентом.

Сервер запускает службы (services), базирующиеся либо на стандартном профиле Bluetooth SIG (в этом случае можно использовать предопределенные UUID 16 бит, оговоренные в стандарте), либо на проприетарном, нестандартном профиле (в таком случае разработчик должен сгенерировать профиль 128 бит, компания STMicroelectronics рекомендует обратиться за дополнительной информацией на сайт). Создание сервиса и инициализация его характеристик производятся процедурами aci_gatt_add_service() и aci_gatt_add_char() соответственно.

Клиент, в свою очередь, ищет запущенные службы. Он способен читать и переопределять их характеристики и переключать режим уведомлений сервера. GATT-клиент способен, в частности, выполнить следующие действия:

  • включить режим поиска всех имеющихся служб (aci_gatt_disc_all_primary_services());
  • включить режим поиска службы с конкретным UUID (aci_gatt_disc_primary_service_by_uuid());
  • определить характеристики выбранной службы (aci_gatt_disc_all_char_of_service());
  • определить характеристики службы с конкретным UUID (aci_gatt_disc_char_by_uuid()).

Для лучшего понимания распределения ролей между ведущим и ведомым BLE-устройствами нужно помнить, что, как правило, периферийное GAP-устройство соответствует GATT-серверу и наоборот, ведущее GAP-устройство, соответствует GATT-клиенту.

В случае, если после установления соединения потребуется изменить его параметры, необходимо применить команды aci_gap_start_connection_update() (если инициатором выступает ведущее устройство) или aci_l2cap_connection_parameter_update_req() (со стороны периферийного устройства).

Наконец, непосредственно обмен данными в рамках стека BLE осуществляется при помощи следующих процедур чтения и записи:

  • запись данных ведущим устройством в периферийное (aci_gatt_write_long_char_value());
  • чтение данных ведущим устройством из периферийного (aci_gatt_read_long_char_value());
  • запись данных периферийным устройством в ведущее (aci_gatt_update_char_value_ext());
  • чтение данных периферийным устройством из ведущего (aci_gatt_read_handle_value()).

Максимальный объем данных, передаваемых за одни цикл, составляет 243 байта, пакеты данных большего размера передаются за несколько проходов.

Реализация приложения Thread

Стек Thread, реализованный в CPU2, предоставляется компанией Nest и носит название OpenThread. Как и при работе с BLE, перед началом разработки ПО для CPU1 необходимо загрузить в CPU2 двоичный файл, соответствующий используемому стеку.

API OpenThread предоставляет набор служб, реализованных в разных слоях стека. Кроме собственно двоичных файлов, комплект встроенного ПО содержит подробную документацию методов API (в общей сложности, OpenThread предоставляет пользователю доступ к более чем тремстам методам, описание которых имеется в файле STM32WBxx_OpenThread_API_User_Manual.chm) и несколько готовых примеров, демонстрирующих процесс работы приложения Thread.

Для STM32WB доступны три режима и, соответственно, три двоичных файла для работы с Thread: FTD, MTD и совместная работа Thread и BLE в статическом конкурентном режиме. Хотя ПО для CPU2 и поставляется в виде готовой прошивки, тем не менее, при компиляции проекта важно выбрать правильные настройки (таблица 2).

Таблица 2. Выбор файла настроек для проекта на базе OpenThread

Конфигурация Файл
FTD openthread_api_config_ftd.h
MTD openthread_api_config_mtd.h
Совместная работа Thread и BLE openthread_api_config_concurrent.h

Реализация OpenThread на STM32WB имеет некоторые особенности, связанные с двухъядерной конфигурацией микроконтроллера. В частности, обратные вызовы передаются как параметры процедур, что не соответствует одноядерной реализации OpenThread. Для лучшего понимания особенностей функционирования стека компания STMicroelectronics настоятельно рекомендует использовать примеры исходного кода, входящие в комплект поставки стека OpenThread для STM32WB. Примеры предназначены для отладочных плат серии STM32WBxx_NUCLEO (может потребоваться изменение исходного кода при использовании примеров на своем устройстве) и включают в себя следующие варианты:

  • Thread_Cli_Cmd, позволяющий управлять стеком через UART при помощи терминала, запущенного на ПК;
  • Thread_Coap_DataTransfer. Демонстрация передачи больших блоков данных при помощи протокола CoAP. Используются две отладочные платы, одна из которых выступает в роли роутера (Leader mode), а вторая работает в дочернем режиме (Child mode). Сначала дочернее устройство при помощи широкополосной передачи данных устанавливает связь с роутером, потом начинается передача данных;
  • Thread_Coap_Generic. Демонстрируется работа с сообщениями CoAP. Как и в предыдущем варианте, для работы нужны два устройства;
  • Thread_Coap_Multiboard, показывающий пример построения mesh (ячеистых) сетей. В примере может использоваться до пяти устройств с разными IPv6-адресами;
  • Thread_Commissioning. Продемонстрирован процесс присоединения нового устройства к существующей сети;
  • Thread_SED_Coap_Multicast. Демонстрируется совместная работа двух устройств, одно из которых выполняет роль роутера (ядро CPU2 должно быть сконфигурировано как FTD), а второе работает в режиме засыпающего конечного устройства (CPU2 должно находиться в режиме MTD);
  • ThreadFUOTA (Firmware Update Over-the-Air – обновление ПО через беспроводной интерфейс). Демонстрируется процесс обновления ПО на удаленной плате.

Реализация приложения MAC 802.15.4

Как и в случае BLE и Thread, для работоспособности MAC 802.15.4 необходимо запрограммировать CPU2 бинарным файлом согласно таблице 1. После этого у ПО CPU1 появится доступ к API MAC, который, в соответствии с IEEEStd 802.15.4-2011, может быть сконфигурирован либо как FFD (Full Feature Device – полнофункциональное устройство, в частности, координатор), либо как RFD (Reduced Feature Device – устройство с ограниченными возможностями, также называемое «узлом»). Кроме того, API подразделяется на MCPS (MAC Common Part Sub-layer Entity – часть API, ответственная за передачу данных) и MLME (MAC Sub-layer Management entity – управляющее API). Описания конкретных методов API собраны в файле STM32WBxx_MAC_802_15_4_User_Manual.chm.

Перед началом работы разработчику рекомендуется ознакомиться с двумя примерами, для реализации которых понадобятся два устройства на базе STM32WB:

  • Mac_802_15_4_FFD – реализация координатора, в которой демонстрируется процесс организации сети и обмен информацией с узлом;
  • Mac_802_15_4_RFD – реализация узла, который отправляет запрос на присоединение к координатору, а после получения сетевого адреса обменивается с координатором данными.

Прямое тестирование BLE

В процессе разработки Bluetooth-устройства рано или поздно возникнет вопрос соответствия разработанного прибора принятым стандартам. Методы тестирования можно разбить на две большие группы: эфирные испытания, когда параметры работы тестируемой техники проверяют при помощи внешнего радиоприемного оборудования, зачастую в специализированных экранированных камерах, и режим прямого тестирования (Direct Test Mode, DTM), когда параметры испытуемой системы измеряют изнутри при помощи специализированных узлов и алгоритмов, встраивание которых должен предусмотреть разработчик чипа. Наличие DTM не исключает необходимости подключения внешних измерительных приборов к ВЧ-тракту разрабатываемого устройства, но в любом случае сильно упрощает и удешевляет испытательные и контрольные мероприятия.

DTM, имеющийся у микроконтроллера STM32WB, доступен через BLE-HCI, что полностью соответствует спецификации Bluetooth Core Specification v5.0. Для перевода STM32WB в режим DTM нужно проделать следующие операции:

  • загрузить в CPU2 бинарный файл stm32wb5x_BLE_Stack_fw.bin;
  • запрограммировать CPU1. Для использования DTM самостоятельная разработка ПО для MCU1 не нужна, в CPU1 достаточно загрузить бинарный файл из папки Ble_TransparentMode, входящей в комплект поставки стека BLE для STM32WB (это может быть файл с названием BLE_TransparentModeVCP_reference.hex). Данное ПО не занимается интерпретацией полученных команд, а просто передает их стеку BLE посредством IPCC;
  • организовать аппаратное подключение к компьютеру, с которого будут выдаваться команды DTM-API. Подключение возможно как через UART, так и через интерфейс USB, работающий в режиме виртуального COM-порта (Virtual COM Port, VCP). Варианты работы с отладочной платой P-NUCLEO-WB55, которая обладает аппаратными возможностями для проверки обоих вариантов, показаны на рисунках 4 и 5.

Рис. 4. Работа с DTM через RS-232: соединение RS-232 компьютера с UART микроконтроллера через преобразователь уровней

Рис. 4. Работа с DTM через RS-232: соединение RS-232 компьютера с UART микроконтроллера через преобразователь уровней

Рис. 5. Работа с DTM через VCP: соединение компьютера по интерфейсу USB с VCP микроконтроллера

Рис. 5. Работа с DTM через VCP: соединение компьютера по интерфейсу USB с VCP микроконтроллера

Готовые примеры BLE-приложений

STMicroelectronics предоставляет разработчикам около 20 готовых примеров приложений, реализованных на базе STM32WB с использованием стека BLE (входят в состав пакета STM32Cube_FW_WB_V1.3.0).

Например, датчик сердечного ритма (Heart Rate Sensor) демонстрирует сразу несколько аспектов создания приложений на основе BLE:

  • корректное разбиение всего стека приложения на ПО сенсора и ПО центрального узла сбора информации;
  • инициализация BSP;
  • применение ПО среднего уровня;
  • создание ведущего GAP-устройства и GATT-клиента;
  • создание периферийного GAP-устройства и GATT-сервера;
  • создание служб и их характеристик;
  • взаимодействие с сотовым телефоном по Bluetooth.

Дополнительно к этому, проект соединения точка-точка P2P (Peer-to-Peer – пиринговая, или децентрализованная сеть) наглядно демонстрирует особенности протокола обмена между GATT-сервером и GATT-клиентом, изменение характеристик уже существующей службы, получение уведомлений и контроль удаленного устройства.

Также имеется пример приложения, реализующего прозрачный режим обмена данными через UART между двумя BLE-устройствами на базе STM32WB55. Пример называется BLE_Cable Repalacement – замена кабельного соединения (аналог SPP в классическом Bluetooth). Этот же пример позволяет вести обмен данными между портом UART STM32WB55 и BLE-телефоном при условии реализации на телефоне пользовательского приложения, которое будет работать с используемыми в примере BLE_Cable Repalacement-сервисами и характеристиками.

BLE FUOTA

Как и в варианте Thread, микроконтроллер STM32WB с запущенным стеком BLE способен обновлять ПО через беспроводной интерфейс Firmware Update Over-the-Air (FUOTA). Пример работы с FUOTA также присутствует в наборе готовых BLE-приложений вместе со всеми необходимыми исходными кодами. Для запуска FUOTA ПО CPU1 создает специализированную GATT-службу в рамках общего стека BLE, способную загрузить данные в удаленное устройство. Обновление через беспроводной интерфейс способно:

  • загрузить и обновить ПО CPU1 (в том числе и код, непосредственно ответственный за FUOTA);
  • загрузить и обновить ПО CPU2;
  • загрузить блок данных и расположить его по любому адресу Flash-памяти, доступной CPU1.

В рамках примера рассмотрены все стадии удаленного обновления ПО, в том числе перезагрузка, очистка выбранных секторов Flash-памяти, беспроводная загрузка нового двоичного образа и его запуск.

Заключение

В целом, создание устройств с беспроводными интерфейсами является достаточно непростой задачей. Большие возможности рассматриваемой технологии предполагают необходимость усвоения большого объема информации в достаточно широком круге вопросов. К счастью, компания STMicroelectronics старается облегчить этот путь, не только предоставляя возможность работать с новыми двухъядерными специализированными процессорами, но и развивая инфраструктуру, включающую готовые отладочные платы, примеры кода для микроконтроллера и большой массив документации.

Нужно особенно отметить огромную работу, проделанную для создания готового ПО всех уровней:

  • верхнего, упрощающего настройку, конфигурирование и тестирование;
  • среднего, облегчающего интегрирование ОС и интерфейсов;
  • нижнего, представляющего готовые унифицированные реализации всех самых популярных беспроводных стеков и позволяющего разработчику сосредоточиться на специфическом функционале разрабатываемого устройства, укорачивающего время выхода на рынок и кардинально уменьшающего количество ошибок в разрабатываемом коде.

Дополнительные материалы

Кроме упомянутых в статье источников информации, полезно ознакомиться со следующими материалами:

  1. «STM32 Cortex-M4 MCUs and MPUs», Programming manual PM0214
  2. «Multiprotocol wireless 32-bit MCU ARM-based Cortex-M4 with FPU, Bluetooth Low-Energy and 802.15.4 radio solution», Reference manual RM0434
  3. «ST firmware upgrade services for STM32WB Series», Application note AN5185
  4. «Over-the-air application and wireless firmware update for STM32WB Series microcontrollers», Application note AN5247
  5. «STM32WBx5 Bluetooth Low Energy (BLE) wireless interface», Application note AN5270
  6. «Building wireless applications with STM32WB Series microcontrollers», Application note AN5289
  7. Bluetooth Core specification
  8. 15.4-2015/Cor 1-2018 – IEEE Standard for Low-Rate Wireless Networks
  9. Форум ST Microelectronics, посвященный микроконтроллерам STM32WB
•••

Наши информационные каналы

О компании ST Microelectronics

Компания STMicroelectronics является №1 производителем электроники в Европе. Компоненты ST широко представлены в окружающих нас потребительских товарах – от iPhone до автомобилей разных марок. Лидеры индустриального рынка выбирают компоненты ST за их надежность и выдающиеся технические параметры. В компании ST работает 48 000 сотрудников в 35 странах. Производственные мощности расположены в 12 странах мира. Более 11 тысяч сотрудников заняты исследованиями и разработками – инновационное лидерство ...читать далее

Товары
Наименование
STM32WB55CGU7 (ST)
STM32WB55CGU6TR (ST)
STM32WB55CGU6 (ST)
STM32WB55CСU6 (ST)
STM32WB55CEU6TR (ST)
STM32WB55CEU6 (ST)
STM32WB55CCU7 (ST)
STM32WB55CCU6TR (ST)
STM32WB55CCU6 (ST)
P-NUCLEO-WB55 (ST)