На склад поступили жидко-кристаллические индикаторы и дисплеи от KSE
РадиоЛоцман - Все об электронике

Стеки для организации беспроводной передачи данных на основе устройств STM32W108. Часть 1

STMicroelectronics STM32W108

Журнал РАДИОЛОЦМАН, июль 2014

Михаил Русских

Рассматриваются определяемые стандартом IEEE 802.15.4 физический уровень и уровень управления доступом к среде для беспроводных персональных сетей. Поясняется назначение библиотеки SimpleMAC для систем-на-кристалле STM32W108, приводятся функции инициализации, изменения каналов и передачи пакетов.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Для реализации распределенных систем управления и мониторинга автономных устройств в промышленности и сфере домашней автоматики наилучшим образом подходит оборудование беспроводной передачи данных, поддерживающее стандарт IEEE 802.15.4 [1]. Простота технологии, низкая стоимость радиомодулей и их малое энергопотребление позволяют организовывать надежные и недорогие сети с небольшой, но достаточной для передачи рабочей информации скоростью.

Зачастую в таких сетях, представляющих собой связанную по беспроводному каналу совокупность датчиков или исполнительных устройств, конечная точка должна представлять собой систему, включающую в себя приемопередатчик и микроконтроллер с периферией для работы с подключаемым устройством. Поскольку использование отдельных радиомодулей и контроллеров на одной плате увеличивает сложность оборудования, его стоимость и габариты, производители электронных компонентов выпускают системы-на-кристалле (СнК), экономящие время и стоимость разработки. Одну из удачных линеек таких СнК предлагает компания STmicroelectronics. В ее устройствах STM32W108 [2] сочетаются 32-разрядный микроконтроллер с ядром Cortex-M3 и приемопередатчик, поддерживающий стандарт IEEE 802.15.4. При этом стоимость одной такой СнК в среднем составляет 150 рублей. Кроме того, компания предоставляет программные стеки SimpleMAC и ZigBee RF4CE, которые существенно упрощают организацию сетей на основе этих СнК. О таких стеках пойдет речь в данном материале.

Вначале следует рассмотреть библиотеку SimpleMAC [3], позволяющую на основе уровня управления доступом к среде (MAC) стандарта IEEE 802.15.4 осуществлять обмен данными в сети беспроводной связи. До этого стоит уделить немного внимания физическому уровню (PHY) и MAC-уровню, чтобы лучше понимать принцип работы функций библиотеки.

Физический уровень

На физическом уровне ведется работа непосредственно с самим приемопередатчиком: производится его включение и отключение, определяется качество беспроводного соединения, выбирается частота каналов и осуществляются прием и передача пакетов данных. Стандарт IEEE 802.15.4 определяет два уровня PHY, работающих на разных частотах: 868/915 МГц и 2.4 ГГц. Первый применяется в Европе (частотный диапазон 868 – 868.6 МГц) и Северной Америке (902–928 МГц), а второй (2400–2483.5 МГц) применяется во всем мире. Помимо различия в частотах, они также отличаются количеством каналов и скоростью передачи данных. Подуровень 868 МГц предполагает только один канал со скоростью передачи 20 Кб/с, подуровень 915 МГц – 10 каналов со скоростью 40 Кб/с, а уровень 2.4 ГГц – 16 каналов со скоростью 250 Кб/с.

Кроме того, к задачам физического уровня относится оценка незанятости канала (CCA или Clear Сhannel Assessment) для функционирования алгоритма доступа к каналу с исключением столкновений (CSMA-CA или Carrier Sense Multiple Access with Collision Avoidance).

Информация в сети передается кадрами. Общая структура такого кадра представлена на Рисунке 1. Префиксный заголовок (SHR) состоит из преамбулы, которая выражается 32 нулями, и стартового разграничителя кадра (SFD), обозначающего конец преамбулы синхронизации и начало пакета данных. SFD должен иметь значение 10100111 в двоичном коде. После этого идет заголовок физического уровня, содержащий 7 бит длины кадра. Затем передается блок сервисных данных (PSDU), который представляет собой MAC-уровень.

Стеки для организации беспроводной передачи данных на основе устройств STM32W108
Рисунок 1. Структура кадра физического уровня.

Уровень управления доступом к среде

MAC-уровень обеспечивает адресацию и механизмы управления доступом к каналам, благодаря чему устройства могут общаться между собой в многоточечной сети. Стандарт IEEE 802.15.4 позволяет узлам сети взаимодействовать как напрямую друг с другом (топология peer-to-peer), так и образовывать структуры типа «звезда». Причем, с помощью этих двух структур можно организовывать сети с комбинированной кластерной топологией. Для маршрутизации информационных потоков в рамках топологических схем служит координатор персональной сети (PAN или Personal Area Network). В структуре типа «звезда» координатором PAN становится устройство с полной функциональностью, с которым связаны устройства с ограниченной функциональностью. При организации коммуникации peer-to-peer одно из устройств также должно стать координатором PAN. Как правило, оно является первым подключившимся к каналу. Далее сеть может строиться по принципу «точка-точка» или «дерево».

Каждый узел должен иметь уникальный 64-разрядный адрес, который может использоваться для прямых коммуникаций в пределах персональной сети. Также координатор PAN может использовать сокращенные 16-разрядные адреса для групповой адресации сетевых устройств.

Стандарт IEEE 802.15.4 на MAC-уровне предполагает два типа передачи данных: с использованием кадров-маяков и без них. В первом случае, если узел хочет передать данные координатору (Рисунок 2а), вначале он должен выполнить поиск маяка для того, чтобы синхронизироваться со структурой суперкадра. После этого устройство в соответствующий момент времени может передать пакет данных. При необходимости координатор может отправить этому устройству кадр подтверждения пакета данных. Если же нужно осуществить передачу данных от координатора к узлу сети (Рисунок 2б), то этот узел будет «прослушивать» маяки, и при обнаружении информации об ожидающем отправки сообщении он передаст команду запроса данных. Затем координатор перешлет узлу подтверждение получения запроса данных, после чего отправит и сами данные, при получении которых устройство должно будет послать координатору подтверждение их получения. В случае коммуникации без использования маяков при передаче данных узлом координатору (Рисунок 2в) посылается пакет данных в соответствии с бездоменной схемой CSMA-CA. Координатор может подтвердить получение этого пакета. Если данные должен передать координатор (Рисунок 2г), то узел прежде отправляет MAC-команду запроса данных, также в соответствии с бездоменным механизмом CSMA-CA, после чего координатор передаст подтверждение получения запроса, а затем и кадр данных, после получения которого устройство отправит подтверждение приема информации.

Стеки для организации беспроводной передачи данных на основе устройств STM32W108
Рисунок 2. Модели передачи данных.

Общий формат кадра MAC-уровня изображен на Рисунке 3. Он состоит из заголовка (MHR), поля данных и завершающего поля (MFR) с контрольной суммой кадра (FCS). В свою очередь, заголовок содержит поле управления (FCF), порядковый номер и адресные поля, к которым относятся PAN-идентификатор точки назначения, адрес точки назначения, PAN-идентификатор отправителя и адрес отправителя.

Стеки для организации беспроводной передачи данных на основе устройств STM32W108
Рисунок 3. Общий формат кадра MAC-уровня.

Поле управления состоит из 15 бит, его структура показана на Рисунке 4. Тип кадра, описываемый тремя битами, может принимать следующие значения: маяк (000), данные (001), подтверждение (010), МАС-команда (011). Коды 100-111 зарезервированы. При установленном бите безопасности предполагается, что кадр защищен на MAC-уровне. Бит задержки кадра принимает значение 1, если узел, посылающий кадр, имеет дополнительные данные для получателя. Бит запроса подтверждения определяет необходимость подтверждения в случае приема получателем данных или MAC-команды. При установленном бите оно будет отправлено. В случае установленного бита Intra-PAN пакет будет передан внутри сети, иначе он будет передан в другую сеть. Режим адресации точки назначения может быть представлен следующими значениями: идентификатор PAN и адресные поля отсутствуют (00), зарезервировано (01), адресное поле содержит 16-битный короткий адрес (10), адресное поле содержит 64-битный расширенный адрес (11). Те же значения может принимать режим адресации отправителя.

Стеки для организации беспроводной передачи данных на основе устройств STM32W108
Рисунок 4. Формат поля управления.

Библиотека SimpleMAC

Библиотека SimpleMAC охватывает функции уровней PHY и MAC. К первым можно отнести, например, выбор радиоканала, управление мощностью передачи, выбор альтернативного пути передачи, управление режимом сна и пробуждением передатчика, индикацию качества канала. Ко вторым – автоматический прием и верификацию подтверждений, передачу с поддержкой CSMA-CA, организацию периодов отсрочки, прием пакетов с проверкой контрольной суммы, установку адреса узла и идентификатора сети, а также прочие функции, характерные для MAC-уровня.

Библиотеку условно можно разделить на несколько классов функций интерфейса программирования приложения (API):

  • функции инициализации и пробуждения;
  • функции для работы с каналами;
  • функции передачи пакетов;
  • функции приема пакетов;
  • криптографические функции, которые обеспечивают интерфейс с аппаратным AES-сопроцессором;
  • функции для работы с MAC-таймером;
  • прочие функции для диагностики и конфигурации.

В рамках библиотеки SimpleMAC приняты определенные правила в наименовании функций API. Все функции библиотеки SimpleMAC начинаются с префикса «ST_», за которым следует основное наименование семейства API (например, Radio или AES). Функции, которые применяются в приложении и вызываются из библиотеки SimpleMAC, заканчиваются словом «Callback». В свою очередь, функции, применяемые в приложении и вызываемые из библиотеки SimpleMAC во время прерывания, имеют окончание «IsrCallback».

Далее рассмотрим основные функции, необходимые для надежной работы беспроводной сети.

Функции инициализации и пробуждения

Для инициализации радиомодуля и его единовременной калибровки используется функция ST_RadioInit(RadioPowerMode initialRadioPowerMode). Она должна быть вызвана после перезагрузки микроконтроллера или его выхода из режима глубокого сна. Функция включит радиомодуль и настроит канал связи. После настройки приемопередатчик останется в состоянии, указанном в параметре initialRadioPowerMode. Этот параметр может принимать два значения: ST_RADIO_POWER_MODE_OFF (радиомодуль будет отключен) и ST_RADIO_POWER_MODE_RX_ON (радиомодуль будет включен). Необходимо помнить, что все остальные функции библиотеки SimpleMAC не следует вызывать, пока не будет произведена инициализация с помощью ST_RadioInit.

Для ввода приемопередатчика в режим сна и вывода из него служат функции ST_RadioSleep() и ST_RadioWake(). Первая функция, по сути, выключает радиомодуль, при этом все выполняемые операции по приему или передаче пакетов прекращаются. ST_RadioWake вновь вводит приемопередатчик в работу, и в данном случае используются все настройки, которые были установлены ранее. ST_RadioWake должна быть вызвана не раньше, чем за 250 мкс после вызова ST_RadioSleep.

Функции для работы с каналами

Для установки канала, на котором будет работать модуль, служит функция ST_RadioSetChannel(int8u channel). Параметр channel указывает канал в рамках стандарта 802.15.4. Если ST_RadioSetChannel вызывается до ST_RadioInit, то указанный номер канала будет установлен, но настройка произведена не будет. Если приемопередатчик находится в режиме сна, то эта функция разбудит его, чтобы выполнить калибровку канала, а затем снова переведет в сон. Весь процесс настройки одного канала может занять до 200 мс. Результаты таких настроек могут сохраняться во флеш-памяти для использования в следующий раз, когда будет выбран тот же канал. Поэтому при повторном вызове ST_RadioSetChannel с тем же номером канала калибровка может занять меньший промежуток времени.

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

Иногда в процессе работы настройки радиомодуля могут нарушиться вследствие изменения условий окружающей среды, например, температуры. Благодаря функции ST_RadioCheckRadio() можно определить необходимость дополнительной калибровки. Она возвращает два значения: TRUE (если для компенсации нужна калибровка) и FALSE (если калибровка не нужна). Следует учитывать, что эта функция не должна вызываться в процессе передачи пакетов. Если ST_RadioCheckRadio вернула TRUE, то необходимо вызвать функцию ST_RadioCalibrateCurrentChannel(). Она позволит выполнить необходимую перекалибровку для текущего канала.

Функции передачи пакетов

Для того, чтобы передать пакет в эфир, нужно воспользоваться функцией ST_RadioTransmit(int8u *packet). Здесь *packet представляет собой указатель на этот пакет. Передача происходит в соответствии со структурой radioTransmitConfig, которую заранее должен задать программист. Для этого он должен объявить глобальную переменную radioTransmitConfig типа RadioTransmitConfig. Данный тип соответствует структуре, содержащей параметры, определяющие характер передачи. Эти параметры представлены в Таблице 1.

Таблица 1. Параметры структуры radioTransmitConfig
Параметр Тип Описание
waitForAck boolean Ожидать подтверждения (ACK), если подтверждения
разрешены в поле управления
checkCca boolean Проверить незанятость канала и осуществить задержку
перед передачей информации
ccaAttemptMax int8u Количество попыток проверки незанятости канала.
Это значение может быть от 0 до 5.
По умолчанию установлено 4.
backoffExponentMin int8u Показатель степени отсрочки для первой попытки
детектирования незанятости канала. Это значение может
быть от 0 до 3. По умолчанию установлено 3.
backoffExponentMax int8u Показатель степени отсрочки для последней попытки
детектирования незанятости канала.
По умолчанию установлено 5.
minimumBackoff int8u Минимальное количество задержек
appendCrc boolean Добавить контрольную сумму (CRC) к
передаваемому пакету

Первый байт пакета должен содержать число байт передаваемой полезной информации. Если параметр radioTransmitConfig.appendCrc имеет значение TRUE, то количество байт в пакете увеличивается на 2, поскольку добавляются еще два байта CRC. Например, пакет с двумя байтами полезной информации будет представлен в памяти в виде {0x04, 0x00, 0x01, 0xc0, 0xc1}, где 0xc0 и 0xc1 – байты CRC. Если параметр radioTransmitConfig.checkCca установлен в TRUE, то функция перед отправкой данных проверит незанятость канала и выставит задержку, в противном случае передача осуществится немедленно.

Если процесс передачи данных был успешно начат, то автоматически после ST_RadioTransmit вызывается функция ST_RadioTransmitCompleteIsrCallback(StStatus status, int32u sfdSentTime, boolean framePending), которая предназначена для индикации завершенности этой передачи. Перед отправкой нового пакета следует проверить параметр status, чтобы решить, какое действие нужно предпринять дальше. Этот параметр может принимать следующие значения:

  • ST_SUCCESS (последний байт пакета, не требующего подтверждения, был передан),
  • ST_PHY_ACK_RECEIVED (запрашиваемое подтверждение получено),
  • ST_MAC_NO_ACK_RECEIVED (запрашиваемое подтверждение не было получено вовремя),
  • ST_PHY_TX_CCA_FAIL (передача невозможна из-за отсутствия свободных каналов),
  • ST_PHY_TX_UNDERFLOW (произошло отрицательное переполнение буфера передачи),
  • ST_PHY_TX_INCOMPLETE (не удалось зафиксировать синтезатор частот с фазовой синхронизацией во время передачи).

Параметр sfdSentTime представляет собой значение MAC-таймера в момент времени, когда был послан стартовый разграничитель кадра. Параметр framePending принимает значение TRUE, если полученное подтверждение сообщает о том, что кадр находится в ожидании. Это очень важная информация, позволяющая уведомить отправителя, что узел назначения ожидает от него данные.

Мощность передачи радиомодуля можно устанавливать программно. Для этого служит функция ST_RadioSetPower(int8s power). Параметр power определяет желаемый уровень мощности в дБм. Можно также узнать текущую мощность передачи с помощью функции ST_RadioGetPower(), которая возвращает значение типа int8s, выраженное в дБм.

Кроме того, библиотека SimpleMAC позволяет определять момент последней синхронизации на основании стартового разграничителя кадра. Данная функция по умолчанию отключена, чтобы активировать её, необходимо вызвать функцию ST_RadioEnableSfdSentNotification(boolean enable), в которой параметр enable приравнять значению TRUE. После этого библиотекой будет вызываться функция прерывания ST_RadioSfdSentIsrCallback(int32u sfdSentTime), где параметр sfdSentTime имеет значение MAC-таймера, определяющее момент последней синхронизации.

В следующей части будет завершено рассмотрение библиотеки SimpleMAC и начат обзор протокола ZigBee RF4CE.

Источники

Продолжение

24 предложений от 18 поставщиков
32-бит ARM Cortex M3, 24МГц, 128кб Flash, Ember Zig Bee Stack, низкое потребление, ускоритель кодирования, генератор случайных чисел, PTI, проводные интерфейсы,...
EIS Components
Весь мир
STM32W108B-SK
STMicroelectronics
75 ₽
STM32W108CBU61
STMicroelectronics
136 ₽
ChipWorker
Весь мир
STM32W108HBU63
STMicroelectronics
196 ₽
Элитан
Россия
STM32W108HBU61
STMicroelectronics
1 194 ₽
Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя