nRF24L01+ — недорогой SPI модуль беспроводной связи

nRF24L01+ - недорогой SPI модуль беспроводной связиNRF24L01 — это одночиповый трансивер (приемопередатчик) выполнен на базе микросхемы nRF24L01+, работающий под общим диапазоном ISM 2.4-2.5 ГГц. Беспроводной приемопередатчик включает в себя частотный генератор, улучшенный контроллер режима SchockBurstTM, усилитель мощности, кристаллический усилитель, модулятор и демодулятор. Выбор выходного канала мощности и протокол могут быть установлены с помощью интерфейса SPI. Он имеет очень низкое потребление тока. В режиме передачи его передающая мощность составляет 6 дБм, а потребление тока составляет 9.0 мА. В режиме приема ток составляет 12.3 мА. Потребление еще ниже в режиме отключения питания и в режиме ожидания.

Модуль поддерживает работу со скоростью 250 Кбит/с, 1 Мбит/сек или 2 Мбит/с, и может работать на 126 независимых каналах, поэтому сразу несколько устройств могут общаться между собой не мешая друг другу. Для передачи данных используется собственный протокол.

Беспроводной модуль NRF24L01+ с усилителем и внешней антенной может работать на расстоянии до 1100 метров при скорости 250 кбит/c, при 1 Мбит/с — 750 метров, при скорости 2 Мбит/c — 520 метров.

nRF24L01+ позволяет передавать информацию в обоих направлениях и объединять несколько устройств в сети типа «звезда». Приёмник поддерживает получение данных по шести каналам, в зависимости от переданного адреса. Каналы 1-5 различаются только младшим байтом адреса. Адрес канала 0 может быть настроен независимо, но при передаче этот канал используется для получения подтверждений приёма.

nRF24L01+ - Работа модуля в сети топологии звезда (MultiCeiver)

Технические характеристики nRF24L01+

  • Напряжение питания: 1.9 В — 3.6 В;
  • Максимальное входное напряжение логической единицы: 5.0 В;
  • Выходное напряжение логической единицы: 3.3 В;
  • Потребляемый ток при мощности 0dBm: 11.3 мА;
  • Потребляемый ток при передачи 2 Мбит: 13.5 мА;
  • Частота: 2.4 ГГц;
  • Программируемая выходная мощность: 0, 6, 12 и 18 dBm;
  • Скорость передачи данных: 250 — 2000 Кбит/сек;
  • Дальность связи при прямой видимости: до 100 м;
  • Дальность связи в помещении: до 30 м;
  • Размеры: 29мм x 16мм x 11мм.

Назначение выводов/Распиновка nRF24L01+

NRF24L01+ - Распиновка

Пин Имя Описание
1 GND Земля (0V)
2 VCC Напряжение питания (1.9 — 3.6V)
3 CE Chip Enable — активирует режим RX или TX. Высокий уровень микросхемы.
4 CSN SPI Chip Select — выбор микросхемы, выбор ведомого SPI. Включение низкого уровня микросхемы. В этом случае устройство реагирует на SPI команды
5 SCK Такт SPI, максимальное значение 10 МГц
6 MOSI Master Out Slave In — вход данных.
7 MISO Master In Slave Out — выход данных.
8 IRQ Сигнал для аппаратного прерывания,чаще всего не используется. Необходим для немедленной реакции микроконтроллера при приеме нового пакета данных.

Назначение выводов - Распиновка nRF24L01+

Блок-схема nRF24L01+

Блок-схема nRF24L01+

Принципиальная схема

nRF24L01+(Pluss) - Принципиальная схема

Команды

Сеанс обмена начинается с установки низкого уровня на линии CSN. Первый переданный после этого от микроконтроллера байт является командой. Одновременно с байтом команды от микроконтроллера, к микроконтроллеру по линии MISO передаётся байт статуса.

Перечень команд:

Наименование Двоичный код 16-чный код Размер данных Описание
R_REGISTER 000n nnnn 0x00 + n 1-5 (приём) Прочитать регистр n
W_REGISTER 001n nnnn 0x20 + n 1-5 (передача) Записать регистр n
R_RX_PAYLOAD 0110 0001 0x61 1-32 (приём) Принять данные из верхнего слота очереди приёмника. После чтения данные из очереди удаляются
W_TX_PAYLOAD 1010 0000 0xA0 1-32 (передача) Записать в очередь передатчика данные для отправки
FLUSH_TX 1110 0001 0xE1 0 Сбросить очередь передатчика
FLUSH_RX 1110 0010 0xE2 0 Сбросить очередь приёмника
REUSE_TX_PL 1110 0011 0xE3 0 Использовать повторно последний переданный пакет
R_RX_PL_WID 0110 0000 0x60 1 (приём) Прочитать размер данных принятого пакета в начале очереди приёмника. Значение больше 32, означает ошибку приёма, в таком случае пакет должен быть удалён командой FLUSH_RX
W_ACK_PAYLOAD 1010 1ppp 0xA8 + p 1-32 (передача) Записать данные для отправки с пакетом подтверждения по каналу p. При этом бит EN_ACK_PAY в регистре FEATURE должен быть установлен
W_TX_PAYLOAD_NOACK 1011 0000 0xB0 1-32 (передача) Записать в очередь передатчика данные для отправки, для которых не требуется подтверждение приёма.
NOP 1111 1111 0xFF 0 Нет операции. Может быть использовано для чтения регистра статуса

Все байты данных, сопутствующие команде должны быть переданы/получены в течение одного сеанса обмена. Сеанс обмена завершается установкой высокого уровня на линии CSN.

Описание регистров nRF24L01+

0x00 CONFIG

Регистр настроек.

7 6 5 4 3 2 1 0
MASK_RX_DR MASK_TX_DS MASK_MAX_RT EN_CRC CRCO PWR_UP PRIM_RX

0x01 EN_AA

Включает автоподтверждение приёма.

7 6 5 4 3 2 1 0
ENAA_P5 ENAA_P4 ENAA_P3 ENAA_P2 ENAA_P1 ENAA_P0

0x02 EN_RXADDR

Выбирает активные каналы приёмника.

7 6 5 4 3 2 1 0
ERX_P5 ERX_P4 ERX_P3 ERX_P2 ERX_P1 ERX_P0

0x03 SETUP_AW

Задаёт длину поля адреса.

7 6 5 4 3 2 1 0
AW

0x04 SETUP_RETR

Настройка параметров автоматического повтора отправки.

7 6 5 4 3 2 1 0
ARD ARC

0x05 RF_CH

Регистр задаёт номер радиоканала — частоту несущей с шагом 1Мгц. Радиочастота несущей вычисляется по формуле 2400 + RF_CH МГц. Допустимые значения от 0 до 125. При обмене на скорости 2Мбит/с, частота должна отличатся от частоты используемой другими устройствами минимум на 2 МГц.

0x06 RF_SETUP

Задаёт настройки радиоканала.

7 6 5 4 3 2 1 0
CONT_WAVE RF_DR_LOW PLL_LOCK RF_DR_HIGH RF_PWR

0x07 STATUS

Регистр статуса. Его значение также передаётся на линии MISO одновременно с передачей байта команды по интерфейсу SPI.

7 6 5 4 3 2 1 0
RX_DR TX_DS MAX_RT RX_P_NO TX_FULL

0x08 OBSERVE_TX

Регистр контроля передатчика

7 6 5 4 3 2 1 0
PLOS_CNT ARC_CNT

0x09 RPD

Оценка мощности принимаемого сигнала

7 6 5 4 3 2 1 0
RPD

0x0A RX_ADDR_P0

40-битный (5 байт) регистр, используемый для указания адреса канала 0 приёмника. Этот канал используется для приёма автоподтверждений в режиме передатчика. Автоподтверждения высылаются принимающей стороной с указанием собственного адреса. Поэтому значение этого регистра должно соответствовать значению регистра TX_ADDR для корректной работы в режиме передатчика. Реальная используемая ширина адреса задаётся в регистре SETUP_AW. Значение регистра записывается и читается, начиная с младших байт. Если записано менее 5 байт, то старшие байты остаются неизменными. Значение регистра по умолчанию: 0xE7E7E7E7E7.

0x0B RX_ADDR_P1

40-битный (5 байт) регистр, используемый для указания адреса канала 1 приёмника. Старшие 4 байта этого регистра являются общими для адресов на каналах 1 — 5. Реальная используемая ширина адреса задаётся в регистре SETUP_AW. Значение регистра записывается и читается, начиная с младших байт. Если записано менее 5 байт, то старшие байты остаются неизменными. Значение регистра по умолчанию: 0xC2C2C2C2C2.

0x0C-0x0F RX_ADDR_P2 — RX_ADDR_P5

8-битные регистры, задающие значения младшего байта адреса для каналов 2-5. Значения старших 32 бит берутся из регистра RX_ADDR_P1.
Значение регистров по умолчанию: 0xC3, 0xC4, 0xC5, 0xC6, соответственно.

0x10 TX_ADDR

40-битный (5 байт) регистр, используемый в режиме передатчика в качестве адреса удалённого устройства. При включенном режиме автоподтверждения, удалённое устройство ответит подтверждением с указанием своего же адреса. Это подтверждение принимается на канале 0, поэтому для успешной передачи, значение регистра RX_ADDR_P0 должно быть идентично этому. Реальная используемая ширина адреса задаётся в регистре SETUP_AW. Значение регистра записывается и читается, начиная с младших байт. Если записано менее 5 байт, то старшие байты остаются неизменными. Значение регистра по умолчанию: 0xE7E7E7E7E7.

0x11-0x16 RX_PW_P0 — RX_PW_P5

8-битные регистры, задающие размер данных, принимаемых по каналам, соответственно 0-5, если не включена поддержка произвольной длины пакетов в регистрах DYNPD и FEATURE. Значение 0 указывает что канал не используется. Допустимы значения длины от 1 до 32.

0x17 FIFO_STATUS

Состояние очередей FIFO приёмника и передатчика

7 6 5 4 3 2 1 0
TX_REUSE TX_FULL TX_EMPTY RX_FULL RX_EMPTY

0x1C DYNPD

Разрешение использования пакетов произвольной длины.

7 6 5 4 3 2 1 0
DPL_P5 DPL_P4 DPL_P3 DPL_P2 DPL_P1 DPL_P0

0x1D FEATURE

Регистр опций

7 6 5 4 3 2 1 0
EN_DPL EN_ACK_PAY EN_DYN_ACK

Режимы работы nRF24L01+

nRF24L01+ может пребывать в одном из четырех состояний: выключенном (Power Down), режиме бездействия (Standby), приема (RX) или передачи (TX). Переход из одного состояния в другое может происходить при изменении уровня на выводе CE, опустошении буфера передачи и других событиях. В этом разделе подробно описываются эти режимы.

Диаграмма состояний

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

nRF24L01+(Pluss) - Диаграмма состояний

  • Рекомендуемый режим работы (Recommended operating mode): это рекомендуемое состояние, используемое при нормальной работе.
  • Возможный режим работы (Possible operating mode): это возможное рабочее состояние, но не используется во время нормальной работы.
  • Состояние перехода (Transition state): это состояние, ограниченное по времени, используемое при запуске генератора и оседании PLL.

Когда VDD достигает 1.9 В или выше, nRF24L01+ переходит в состояние сброса питания и остается в режиме сброса, до входа в режим энергосбережения.

Режим пониженного энергопотребления

В режиме отключения питания (пониженного энергопотребления) nRF24L01+ отключается и потребляет минимуму тока. Все значения регистров сохраняются, а SPI остается активным, что позволяет изменить конфигурации и выгрузить/загрузить данные регистров. Режим пониженного энергопотребления питания вводится путем сброса бита PWR_UP в регистре CONFIG.

Режимы ожидания

Режим ожидания-I

Установив бит PWR_UP в регистре CONFIG, устройство переходит в режим ожидания-I. Этот режим используется для минимизации среднего потребления тока при сохранении короткого времени пуска. В этом режиме активна только часть кварцевого генератора. Переход в активные режимы происходит только в том случае, если CE установлен в "1", а когда CE установлен в низком уровне, nRF24L01 возвращается в режим ожидания-I из режимов TX и RX.

Режим ожидания-II

В режиме ожидания-II активны дополнительные тактовые буферы и используется больший ток по сравнению с режимом ожидания-I. nRF24L01+ входит в режим ожидания II, если CE = 1, а буфер TX FIFO чист. Если новый пакет загружен в TX FIFO, PLL немедленно запускается, и пакет передается после обычной задержки установления PLL (130 мкс).

Режим RX/приёмника

Режим RX — это активный режим, в котором nRF24L01+ используется в качестве приемника. Чтобы войти в этот режим, нужно установить биты PWR_UP (включает питание), PRIM_RX (выбор режима: 0 — PTX (передатчик) 1 — PRX (приёмник)) и вывод CE в "1".

Находясь в режиме приёма, микросхема производит демодуляцию полученного радиосигнала, передавая извлеченные биты протоколу канального уровня, процедуры которого выполняют поиск пакета данных. Если пакет данных был опознан (адрес приемника в пакете совпадает с адресом микросхемы и контрольная сумма CRC оказалась правильной), полезная нагрузка помещается в приемный буфер.

Приемопередатчик находится в режиме приема до тех пор, пока микроконтроллер не переведет его в режим Standby или Power Down. Однако, если используются функции Enhanced Shockburst, то может быть осуществлен автоматический переход в другие режимы.

Краткое описание алгоритма приёма

Соответствующие каналы приёма должны быть разрешены в регистрах EN_AA и EN_RXADDR, и их адреса настроены в регистрах RX_ADDR_Pх.

Прослушивание эфира начинается с появлением на линии CE высокого уровня. Приёмник анализирует эфир и пытается выделить адресованные ему пакеты с совпадающей контрольной суммой. Когда очередной такой пакет получен, выставляется бит RX_DR в регистре STATUS, и на линии прерывания появляется низкий уровень. Три бита начиная с RX_P_NO в регистре STATUS показывают номер канала, по которому пришёл пакет. Прочитать содержимое полученного пакета можно командой R_RX_PAYLOAD. Сбросить бит RX_DR в регистре STATUS можно путём записи в него единицы.

Режим TX/передатчика

Режим TX — активный режим передачи. Для перехода в него необходимо установить бит PWR_UP в "1", бит PRIM_RX в "0", наличие данных в буфере передатчика (TX FIFO) и подача высокого уровня на вывод CE не менее 10 мкс. В этом режиме микросхема будет находиться до тех пор, пока не окончится передача пакета данных. Затем в зависимости от состояния вывода CE она может перейти в режим Standby (если CE=o), либо продолжить передачу если приемный буфер не пуст.

Краткое описание алгоритма передачи

В регистры TX_ADDR и RX_ADDR_P0 должен быть загружен адрес удалённой стороны. После этого, данные для отправки помещаются в очередь передатчика командой W_TX_PAYLOAD. Начало передачи инициализируется кратким, но не менее 10мкс импульсом на линии CE.

Если пакет передан успешно и подтверждение получено, в регистре STATUS выставляется бит TX_DS, если превышено допустимое количество повторов, а подтверждение передачи не получено, выставляется бит MAX_RT. Обе ситуации приводят к выставлению на линии IRQ низкого уровня.

Если выставлен бит MAX_RT, то переданный пакет остаётся в очереди передатчика, удалить его можно командой FLUSH_TX. Сбросить биты TX_DS и MAX_RT в регистре STATUS можно путём записи в них единиц. Пока бит MAX_RT установлен, дальнейший радиообмен невозможен.

Настройка режимов работы

В следующей таблице описано, как настроить режимы работы.

Режим PWR_UP PRIM_RX CE входной контакт FIFO состояние
RX mode 1 1 1
TX mode 1 0 1 Данные в TX FIFO. Очистит все уровни в TX FIFO.
TX mode 1 0 Минимум 10 мкс высокого импульса Данные в TX FIFO. Очистит один уровень в TX FIFO.
Standby-II 1 0 1 TX FIFO пуст.
Standby-I 1 0 Нет пакетов для передачи.
Power Down 0

Скорость передачи данных

Для приема и передачи данных можно выбирать скорость 250 кбит/с, 1 Мбит/с, 2 Мбит/с. Снижение скорости приема позволяет увеличить чувствительность приемника, однако при высокой скорости обмена информацией снижается среднее потребление тока и вероятность возникновения коллизий, т.е. возникновения ситуации одновременной передачи с другими устройствами.

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

nRF24L01+ полностью совместим с nRF24L01. Для совместимости с nRF2401A, nRF2402, nRF24E1 и nRF24E2 скорость передачи данных должна быть установлена на 250 Кбит/с или 1 Мбит/с.

Радиочастота несущей/номер радиоканала

Для передачи используется 126 частотных каналов, каждый канал занимает полосу частот менее 1 МГц при скорости передачи 250 кБит/с и 1 МГц на скорости передачи 1 МГц. Для исключения взаимовлияния каналов расстояние между центральными частотами должно составлять не менее 2 МГц. Также существует возможность настройки коэффициента усиления выходного усилителя мощности.

Частота канала РЧ устанавливается регистром RF_CH по следующей формуле:

F0= 2400 + RF_CH [MHz]

Вы должны запрограммировать передатчик и приемник на одну и ту же частоту для связи друг с другом.

Enhanced ShockBurst

Микросхема поддерживает работу протокола канального уровня Enhanced ShockBurst, гарантирующего надежную пеоедачу данных.

Preamble Address Packet Control Field Payload CRC
1 байт 3-5 байт 9 бит 0-32 байта 1-2 байта

Структура пакета Enhanced ShockBurst

Заголовок (Preamble) представляет собой последовательность битов, сгенерированную автоматически на основе адреса абонента, необходимую для синхронизации приемника с передатчиком.

Поле адреса (Address) может иметь длину три, четыре или пять байт.

Поле управления пакетом (Packet Control Field) содержит 9 бит. Первые шесть бит определяют количество битов, содержащихся в поле полезной нагрузки (Payload). Следующие 2 бита нужны для того, чтобы определить новый ли пакет получил приемник или отправленный повторно. Последний бит говорит о том, надо ли высылать подтверждение получения пакета.

Если одновременно будут передавать несколько передатчиков, или возникнут другие препятствия, произойдет коллизия. Приемник не сможет получить пакет. Поэтому nRF24L01+ имеет настройку автоматической повторной отправки пакета (Aoto Retransmission (ART)). Эти настройки указывают с каким интервалом и сколько раз пытаться отправить пакет.

Контрольная сумма (CRC) рассчитывается по полю адреса, управляющему полю и полю данных. Если при приёме пакета контрольная сумма не совпала, то пакет игнорируется, никаких действий не предпринимается.

Получив пакет данных, приемник распознает адрес этого пакета и тем самым идентифицирует, какой передатчик его ему отправил. Далее приемник высылает пакет подтверждения приёма с таким же адресом, как и принятый пакет. Если это сделать ему не удалось, то он посылает его еще раз, при этом количество таких попыток можно задать программно. Если же отправить данные в итоге не получилось, то генерируется прерывание.

Управляющее поле/Packet Control Field

Управляющее поле имеет следующую структуру:

Длина данных PID NO_ACK
6 бит 2 бита 1 бит

Длина данных — размер поля «Данные» в пакете. Если опция данных произвольной длины отключена, принимает значение 33 (100001), в этом случае длина данных на принимающей стороне определяется значением соответствующего регистра RX_PW_Px. Значения в диапазоне 1-32 кодируют размер данных в режиме произвольной длины, значение 0 указывает на отсутствие данных и используется в пакетах подтверждения. Режим произвольной длины должен быть включен у передающей стороны для канала 0, чтобы принимать пакеты подтверждения.

PID — двухбитное поле, значение которого циклически увеличивается на 1 при отправке нового пакета. В случае если принимающая сторона приняла пакет, но отправленное подтверждение о приёме не дошло до отправляющей стороны, может быть предпринята повторная отправка с таким же значением PID, как при первой попытке. Если приёмник получает пакет, где поле PID равно полученному в предыдущий раз и значение поля CRC также идентично последнему полученному, то автоматически отправляется подтверждение о получении, но полученные данные считаются повтором и игнорируются, не помещаются в очередь FIFO приёмника, и прерывание TX_DS в этом случае не появляется.

NO_ACK — флаг указывающий получателю на то, что подтверждение получения пакета высылать не требуется. Сами пакеты подтверждения маркируются этим флагам. Также можно отправить пакет не требующий подтверждения командой W_TX_PAYLOAD_NOACK, если в регистре FEATURE установлен бит EN_DYN_ACK.

Примечание

Перед первым включением следует смонтировать на модуле 2 конденсатора. Между выводами VCC и GND припать конденсатор в SMD корпусе (планарный) емкостью 0.1 мкФ со стороны пайки к монтажным площадкам на плате, затем к ним припаять электролитический конденсатор емкостью 100 мкФ на напряжение 10 В. Питать лучше не от Arduino, а от отдельного стабилизатора напряжения 3.3 В, способного обеспечить ток нагрузки 200 мА.

nRF24L01+ - электролитический конденсатор емкостью 100 мкФ

Также можно использовать плату питания для nrf24l01. Адаптер имеет две колодки подписанных выводов: двухрядная (для подключения радио модуля) и однорядная (для подключения к arduino). Адаптер оснащен стабилизатором напряжения (Vin = 5 В, Vout = 3,3 В), для питания радио модуля, собранным на базе чипа AMS1117, а также светодиодом, который служит индикатором наличия питания.

Адаптер (плата) питания для nrf24l01+

Материалы

NRF24L01 Test with Arduino
nRF24L01 Datasheet
Подключение модулей связи 2,4ГГц на базе чипов nRF24L01 + к микроконтроллеру
ТЕХНИЧЕСКИЙ ОБЗОР МИКРОСХЕМЫ ПРИЕМОПЕРЕДАТЧИКА nRF24L01 +
Модуль приемопередатчика 2,4 ГГц NRF24L01

Купить nRF24L01+ на AliExpress

Похожие записи

Комментарии 11

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *