Перейти к содержанию

Data pipe (MultiCeiver)

Одна станция на nRF24L01+ может принимать данные от шести передатчиков на одной частоте и различать, от кого пришёл пакет. Для этого в приёмнике шесть логических каналов с разными адресами — data pipes. Nordic называет эту функцию MultiCeiver, и у неё есть правила адресации, о которые часто спотыкаются.

Обновлено Редакция GAW

Data pipe (канал данных) — логический канал приёма радиотрансивера nRF24L01+ со своим адресом. Шесть таких каналов работают параллельно в одном частотном канале: приёмник одновременно ищет в эфире все шесть адресов, а номер канала, из которого пришёл пакет, показывает поле RX_P_NO регистра STATUS. Nordic называет эту функцию MultiCeiver (Product Specification v1.0, разд. 7.6).

Как устроена адресация

КаналРегистр адресаЧто задаёт
0RX_ADDR_P0полный уникальный адрес до 5 байт
1RX_ADDR_P1полный адрес; его 4 старших байта общие для каналов 1–5
2–5RX_ADDR_P2…P5только младший байт, он должен отличаться у всех

По умолчанию включены каналы 0 и 1, остальные включают битами регистра EN_RXADDR. Пример Nordic: каналы 1–5 с адресами 0xC2C2C2C2C2, 0xC2C2C2C2C3 … 0xC2C2C2C2C6 и отдельный адрес канала 0 (рис. 13). Общими для всех каналов остаются частота, скорость, ширина адреса, настройки CRC и усиление приёмника.

Звезда из шести узлов

До шести передатчиков (PTX) могут работать с одним приёмником (PRX). Подтверждение по протоколу Enhanced ShockBurst PRX отправляет на адрес канала, по которому пришёл пакет, поэтому на каждом PTX надо выставить (разд. 7.6):

  • TX_ADDR — адрес нужного канала приёмника;
  • RX_ADDR_P0 — тот же адрес, чтобы принять ACK.

Одновременно принимать пакет может только один канал. Чтобы передатчики не сталкивались постоянно, Nordic советует разнести у них задержку повтора ARD — тогда они помешают друг другу только один раз.

Не путать

С частотным каналом RF_CH: data pipes делят один радиоканал и различаются только адресом. Разные частотные каналы — это разные сети, которые друг друга не слышат. И с адресом устройства в шине вроде RS-485: здесь адрес проверяет сам трансивер, до микроконтроллера доходят только свои пакеты.

Частые вопросы

Сколько передатчиков может слушать один nRF24L01+?

Шесть одновременно, по одному на каждый логический канал приёма (data pipe 0–5) на одной частоте (Product Specification v1.0, разд. 7.6). Если узлов больше, их адреса меняют программно или делят время; принимать пакет в каждый момент может только один канал.

Почему адреса каналов 1–5 должны совпадать в старших байтах?

Так устроен приёмник: у канала 0 полный уникальный 5-байтный адрес, а каналы 1–5 разделяют четыре старших байта адреса из RX_ADDR_P1, и различаются только младшим байтом. В регистры RX_ADDR_P2…P5 записывают один байт. Все младшие байты должны быть разными (разд. 7.6).

Почему передатчик не получает подтверждения?

Частая причина — адрес канала 0 на передатчике. Приёмник отправляет ACK на адрес того канала, по которому принял пакет, а передатчик слушает ACK своим каналом 0. Поэтому на PTX RX_ADDR_P0 должен совпадать с TX_ADDR, а TX_ADDR — с адресом нужного канала приёмника (разд. 7.6).

Источники

  1. Nordic Semiconductor. nRF24L01+ Single Chip 2.4GHz Transceiver, Product Specification v1.0 (September 2008) — 7.6: MultiCeiver — шесть параллельных каналов приёма (data pipes) с уникальными адресами в одном частотном канале; до шести PTX на один PRX; все адреса ищутся одновременно, принимать может только один канал за раз; общие для всех каналов настройки — CRC, ширина адреса, частота, скорость, усиление МШУ; каналы включают битами EN_RXADDR, по умолчанию включены 0 и 1; адреса — в RX_ADDR_Px; канал 0 — уникальный 5-байтный адрес, каналы 1–5 — общие четыре старших байта, младший байт уникален; рис. 13: пример 0xC2C2C2C2C2…C6; ACK отправляется на адрес канала, по которому принят пакет; на PTX TX_ADDR равен RX_ADDR_P0 и адресу канала на PRX; ARD можно разнести, чтобы передатчики мешали друг другу один раз; рег. 07 STATUS: RX_P_NO — номер канала, из которого пакет лежит в RX FIFO; 6.3: частота F0 = 2400 + RF_CH МГц
  2. Nordic Semiconductor. nRF24L01+ Ultra low power 2.4GHz RF Transceiver IC — страница изделия — архивная копия (Wayback, март 2017): «6 data pipe MultiCeiver», три отдельных FIFO по 32 байта на передачу и приём, скорости 250 кбит/с, 1 и 2 Мбит/с

Нашли ошибку?