Data pipe (MultiCeiver)
Одна станция на nRF24L01+ может принимать данные от шести передатчиков на одной частоте и различать, от кого пришёл пакет. Для этого в приёмнике шесть логических каналов с разными адресами — data pipes. Nordic называет эту функцию MultiCeiver, и у неё есть правила адресации, о которые часто спотыкаются.
Обновлено Редакция GAW
Data pipe (канал данных) — логический канал приёма радиотрансивера nRF24L01+ со своим адресом. Шесть таких каналов работают параллельно в одном частотном канале: приёмник одновременно ищет в эфире все шесть адресов, а номер канала, из которого пришёл пакет, показывает поле RX_P_NO регистра STATUS. Nordic называет эту функцию MultiCeiver (Product Specification v1.0, разд. 7.6).
Как устроена адресация
| Канал | Регистр адреса | Что задаёт |
|---|---|---|
| 0 | RX_ADDR_P0 | полный уникальный адрес до 5 байт |
| 1 | RX_ADDR_P1 | полный адрес; его 4 старших байта общие для каналов 1–5 |
| 2–5 | RX_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).
Источники
- 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 МГц
- Nordic Semiconductor. nRF24L01+ Ultra low power 2.4GHz RF Transceiver IC — страница изделия — архивная копия (Wayback, март 2017): «6 data pipe MultiCeiver», три отдельных FIFO по 32 байта на передачу и приём, скорости 250 кбит/с, 1 и 2 Мбит/с
Нашли ошибку?
Смотрите также
- nRF24L01+Радио 2,4 ГГц по SPI: питание, уровни, токи, каналы, ShockBurst, тайминги
- Enhanced ShockBurstПакетный протокол nRF24L01+ с автоподтверждением и повторами
- Multidrop и multipointОдин передатчик или несколько на одной дифференциальной паре
- FIFO (буфер «первым пришёл — первым ушёл»)Аппаратная очередь между периферией и программой
- IEEE 802.15.4Маломощное радио для Zigbee и Thread: скорость, диапазон, чипы