nRF24L01+ однокристальный трансивер 2.4 ГГц |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nRF24L01+ это однокристальный приемопередатчик (трансивер) диапазона 2.4 ГГц, в который встроена фирменная подсистема радиопротокола Enhanced ShockBurst™ компании Nordic Semiconductor, рассчитанная на беспроводные приложения с очень низким уровнем потребления энергии. Микросхема nRF24L01+ разработана для мирового промышленного диапазона частот ISM 2.400 - 2.4835 ГГц. Чтобы реализовать обмен данными по радио с помощью nRF24L01+, нужен только MCU (микроконтроллер) и несколько пассивных внешних компонентов. Примечание: все непонятные термины и сокращения см. в разделе "Словарик", в конце статьи. Работать с nRF24L01+ можно через последовательный порт SPI. Карта регистров, доступная через SPI, содержит все регистры конфигурации nRF24L01+, и они доступны во всех рабочих режимах микросхемы. Встроенная подсистема Enhanced ShockBurst™ основана на пакетном обмене, и она поддерживает несколько режимов - от управления в ручном режиме до продвинутого автономного протокола. Внутренние стеки FIFO обеспечивает обработку потока данных между радиоблоком и MCU. Enhanced ShockBurst™ снижает стоимость разработки системы, поддерживая все высокоскоростные операции слоя обмена данными. В радиоблоке используется модуляция GFSK. Пользователь может конфигурировать используемый частотный канал, выходную мощность и скорость передачи данных по воздуху. nRF24L01+ поддерживает скорости передачи данных по воздуху 250 kbps, 1 Mbps и 2Mbps. Высокие скорости передачи данных в комбинации с двумя режимами пониженного энергопотребления делают nRF24L01+ подходящим решением для приложений, где очень критична потребляемая мощность. GFSK (Gaussian Frequency-Shift Keying) - вид частотной манипуляции (модуляции), при которой используется фильтр Гаусса для сглаживания частотных перестроек при изменении значения информационного символа. В случае, когда информационный символ принимает два значения, манипуляция называется двоичной (из Википедии). Чип nRF24L01+ совместим по выводам с nRF24L01, и совместим для работы по воздуху с nRF2401A, nRF2402, nRF24E1 и nRF24E2. Параметры по интермодуляции и блокировки приема по соседнему каналу в nRF24L01+ значительно улучшены по сравнению с nRF24L01, и дополнительная внутренняя фильтрация nRF24L01+ улучшила совместимость с регуляторными радиочасттными стандартами. Внутренние регуляторы напряжения гарантируют высокий уровень подавления помех по питанию (Power Supply Rejection Ratio, PSRR) и устойчивую работу в широком диапазоне напряжений питания. • Радиообмен - Популярный промышленный диапазон для передачи данных 2.4GHz ISM • Передатчик - Программируемая выходная мощность: 0, -6, -12 или -18dBm • Приемник - Быстрая АРУ (Fast AGC) для улучшения динамического диапазона • Синтезатор RF - Синтезатор полностью интегрирован в чип, не требуется внешний фильтр петли ФАПЧ, варикап для VCO и внешние LC контуры • Подсистема протокола Enhanced ShockBurst™ - От 1 до 32 байт длина динамической полезной нагрузки • Управление питанием - Встроенный регулятор напряжения • Интерфейс хоста (MCU) - 4-выводный аппаратный SPI • Компактный 20-выводный корпус QFN размером 4x4mm Основные области применения: • Беспроводные устройства PC Рис. 1. Блок-схема nRF24L01+. Рис. 2. Цоколевка корпуса nRF24L01+ QFN20 4x4 мм (вид сверху). Таблица 1. Описание функций выводов nRF24L01+.
Примечание: в столбце "Функция" применены следующие обозначения. I означает цифровой вход, O цифровой выход, anI аналоговый вход, anO аналоговый выход, P вход питания, PO выход питания, RF радиочастотные выводы. Таблица 2. Предельные допустимые значения параметров.
Примечание: превышение одного или большего количества значений из таблицы 2 может необратимо повредить микросхему nRF24L01+. Таблица 3. Рабочие условия.
Таблица 4. Энергопотребление.
Примечания: (a) Этот ток для кварца 12 пФ. Ток при внешнем тактировании зависит от уровня тактового сигнала. Таблица 5. Параметры RF.
Примечания: (a) Стандарты регулирования радиовещания определяют диапазон частот, который Вы можете использовать. Таблица 6. Работа передатчика.
Примечание (a): импеданс нагрузки антенны = 15Ω+j88Ω. Таблица 7. Чувствительность приемника.
Таблица 8. Чувствительность RX в соответствии со стандартом ETSI EN 300 440-1 V1.3.1 (2001-09).
Примечание для таблицы 8: (a) Измерения узкополосной селективности блокировки по соседнему каналу: • От 0 до ±40MHz; размер шага 1 МГц. Таблица 9. Селективность nRF24L01+ на эквивалентной модуляции интересующего сигнала. Измерено с использованием Pin = -67dBm для желаемого сигнала.
Примечание для таблицы 9: (a) Измерения узкополосной селективности блокировки по соседнему каналу: • От 0 до ±40MHz; размер шага 1 МГц. Измерения блокировки на широкой полосе: • От 30 МГц до 2000 МГц; размер шага 10 МГц. Желаемый сигнал для измерения блокировки на широкой полосе: -67dBm при 1Mbps и режиме 2Mbps. Для частоты помехи смещение n*2*fXTAL, параметры блокирования ухудшаются примерно на 5dB по сравнению с соседними параметрами. Если полезный сигнал имеет уровень 3dB или больше уровня чувствительности, то соотношение несущая/помеха не зависит от уровня полезного сигнала на указанном смещении частоты. Таблица 10. Тест интермодуляции RX, выполненный в соответствии со спецификацией Bluetooth version 2.0.
Примечание: уровень полезного сигнала на Pin = -64 dBm. Используются два сигнала помехи одинаковой входной мощности. Помеха, ближайшая по частоте, не модулирована, другая помеха модулирована эквивалентно полезному сигналу. Представлена входная мощность помех, где чувствительность обеспечивает BER = 0.1%. Таблица 11. Параметры кварца.
Примечания: (a) Точность частоты учитывает допуск на 25ºC, температурный дрейф, старение кристалла и нагрузку кристалла. Время запуска кварцевого генератора (startup time) пропорционально эквивалентной индуктивности кварцевого резонатора. Тенденции в производстве поддерживают уменьшение физических размеров кристалла. Эффект от этого состоит в увеличении эквивалентной последовательной индуктивности Ls, что приводит к увеличению времени запуска. Максимальное время запуска кварцевого генератора Tpd2stby = 1.5 мс установлено при использовании кварца с эквивалентной последовательной индуктивностью 30 мГн. Специфичный для определенной реализации, самый худший случай времени запуска может быть вычислен по формуле: Tpd2stby = Ls / 30 мГн * 1.5 мс, если Ls превышает 30 мГн. Примечание: в некоторых даташитах кварцев Ls называется L1 или Lm, и Cs называется C1 или Cm. Рис. 3. Эквивалентная схема кварцевого резонатора. Таблица 12. Цифровой вход.
Примечание (a): если входной сигнал > 3.6V (входы допускают уровни логики 5V), то VDD микросхемы nRF24L01+ должно быть в диапазоне от 2.7V до 3.3V (номинальное значение 3.0V±10%). Таблица 13. Цифровой выход.
Таблица 14. Сброс по питанию (Power on reset, POR).
Примечания: (a) От 0V до 1.9V. [Управление рабочими режимами и параметрами радиосвязи] В микросхему nRF24L01+ встроена машина состояний, которая управляет переходами между рабочими режимами кристалла. Машина состояний получает на входе определяемые пользователем значения из регистров, а также значения внутренних сигналов. Вы можете сконфигурировать nRF24L01+ в режимах "выключено" (Power Down), "приостановка" (Standby), прием (RX) или передача (TX). Диаграмма состояний на рис. 4 показывает рабочие режимы, и как они функционируют. Здесь выделены 3 разных типа состояний: • Рекомендуемый рабочий режим: это рекомендованное состояние, используемое для нормального функционирования микросхемы. Когда напряжение питания VDD достигает уровня 1.9V или выше, микросхема nRF24L01+ входит в состояние сброса по питанию (Power on reset, POR), где она остается в состоянии сброса, пока не войдет в режим Power Down. Рис. 4. Диаграмма состояний управления радиоблоком. Power Down. В режиме "выключено" (power down) работа микросхемы nRF24L01+ запрещена, при этом потребляемый ток минимальный. Все значения регистров доступны и сохраняют свое значение, SPI работает, что позволяет менять конфигурацию путем обмена данными с регистрами. Времена запуска (start up) показаны в таблице 16. В режим Power Down микросхема может войти путем сброса в лог. 0 бита PWR_UP в регистре CONFIG. Standby-I. При установке в лог. 1 бита PWR_UP регистра CONFIG микросхема входит в режим Standby-I. Этот режим используется для минимизации среднего потребления тока, с сохранением возможности быстрого перехода микрохсемы в рабочий режим. В этом режиме дополнительный ток потребляет только работающий кварцевый генератор. Переход в активные режимы прозойдет только если уровень CE перейдет в лог. 1, и когда CE перейдет в лог. 0, nRF24L01 возвратится в режим Standby-I из обоих активных режимов TX и RX. Standby-II. В этом режиме активны дополнительные буферы тактов, и ток потребления больше, чем в режиме Standby-I. Микросхема nRF24L01+ войдет в режим Standby-II, если CE удерживается в лог. 1 и буфер TX FIFO блока PTX пуст. Если новый пакет будет выгружен в TX FIFO, то немедленно запустится PLL и пакет будет переда после номинальной задержки на запуск PLL (PLL settling delay, 130 мкс). Значения регистров в обоих режимах Standby сохраняются, и интерфейс SPI работает. Интервалы времен запуска см. в таблице 16. Режим приема (RX). Это активный режим, в котором радиотракт nRF24L01+ используется как приемник. Для входа в этот режим в nRF24L01+ должен быть установлен бит PWR_UP, бит PRIM_RX, и ножка CE должна быть в лог. 1. В режиме RX приемник демодулирует сигналы от канала RF, постоянно предоставляя данные подсистеме обработки протокола, которая непрерывно ищет поступления допустимого пакета. Если корректный пакет найден (совпал адрес и сошлась CRC), то полезная нагрузка пакета передается в свободный слот стеков RX FIFO. Если стеки RX FIFO переполнены, то принятый пакет отбрасывается. Микросхема nRF24L01+ остается в режиме RX, пока MCU не сконфигурирует её в режим Standby-I или режим Power Down. Однако если разрешена функция автоматизации протокола (особеность Enhanced ShockBurst™), то nRF24L01+ может войти в другие режимы, для выполнения протокола. В режиме RX доступен сигнал детектора принимаемой мощности (Received Power Detector, RPD). RPD это сигнал, который устанавливается в лог. 1, когда на сконфигурированной частоте канала приема уровень сигнала RF выше чем -64 dBm. Внутренний сигнал RPD фильтруется перед тем, как поступить в регистр RPD. Сигнал RF должен присутствовать как минимум 40 мкс перед тем, как RPD установится в лог. 1. Как использовать RPD, описано далее в секции "Измерения RPD". Режим передачи (TX). Это активный режим, в котором радиотракт передает пакеты. Для входа в этот режим в nRF24L01+ должен быть установлен бит PWR_UP, сброшен бит PRIM_RX, и ножка CE должна быть в лог. 1. Микросхема nRF24L01+ остается в режиме TX, пока не завершится передача пакета. Если CE = 0, то nRF24L01+ возвратится в режим Standby-I. Если CE = 1, то следующее действие определяет состояние TX FIFO. Если стек TX FIFO не пуст, то nRF24L01+ остается в режиме TX, и передает следующий пакет. Если TX FIFO пуст, то nRF24L01+ переходит в режим Standby-II. В режиме TX блок PLL передатчика nRF24L01+ работает с разомкнутым контуром, поэтому важно не удерживать nRF24L01+ в режиме TX на время больше 4 мс. Если разрешены функции Enhanced ShockBurst™, то nRF24L01+ никогда не остается в режиме TX дольше 4 мс. Конфигурирование рабочих режимов. Таблица 15 описывает, как конфигурировать рабочие режимы nRF24L01+. Таблица 15. Основные режимы nRF24L01+.
Примечания: (a) Если CE удерживается в лог. 1, то все стеки TX FIFO опустошаются, и обрабатываются все необходимые ACK и повторные передачи. Передача продолжается, пока пополняется содержимое TX FIFO. Если TX FIFO опустошился и CE все еще остается в лог. 1, то nRF24L01+ войдет в режим Standby-II. В этом режиме передача пакета запустится, как только будет установлено в лог. 1 сигнал CSN после выгрузки (upload, UL) пакета в TX FIFO. Информация об интервалах времени для переходов между режимами и уровней сигнала CE представлена в таблице 16. Переход из режима TX в режим RX и обратно одинаковый, как и переход из режимов Standby в режим TX или режим RX (максимум 130 мкс). Таблица 16. Интервалы времени рабочих режимов микросхемы nRF24L01+.
Примечание (a): см. таблицу 11 для параметров кварца. Чтобы перевести микросхему nRF24L01+ в режим TX или RX из режима Power Down, она сначала должна быть переведена в один из режимов Standby mode. Этот процесс дает задержку Tpd2stby (см. таблицу 16.) после того, как nRF24L01+ покинет режим Power Down перед тем, как ножка CE будет установлена в лог. 1. Примечание: если VDD выключено, то значение регистра потеряется, и необходимо заново сконфигурировать микросхему nRF24L01+ перед вводом её в режим TX или RX. Скорость передачи по радиоканалу. Микросхема nRF24L01+ для передачи и приема данных использует модулированный радиосигнал. Скорость может быть выбрана 250kbps, 1Mbps или 2Mbps. На малых скоростях передачи чувствительность приемника будет выше, чем на высоких скоростях. Однако высокая скорость передачи данных по воздуху дает возможность снизить среднее энергопотребление и вероятность коллизий (и соответственно повторных передач) на радиоканале. Скорость передачи данных по радио устанавливается битами RF_DR регистра RF_SETUP. Передатчик и приемник должны быть запрограммированы на одинаковую скорость передачи по радио, чтобы они могли передавать данные друг другу на расстоянии. Микросхема nRF24L01+ полностью совместима с nRF24L01. Для совместимости с микросхемами nRF2401A, nRF2402, nRF24E1 и nRF24E2 скорость на радиоканале должна быть установлена 250kbps или 1Mbps. Частота радиоканала. Частота канала RF определяет центр частотного спектра канала, используемого nRF24L01+. Канал занимает полосу частот меньше 1 МГц на скоростях 250kbps и 1Mbps, и полосу меньше 2MHz на скорости 2Mbps. Микрохсема nRF24L01+ может работать на частотах от 2.400 ГГц до 2.525 ГГц. Разрешающая способность программирования частоты RF-канала составляет 1 МГц. На скорости передачи 2Mbps канал занимает полосу частот шире, чем шаг перестройки частоты радиоканала. Чтобы гарантировать отсутствие наложения (помех друг другу) разных радиоканалов на скорости 2Mbps, между каналами должен быть обеспечен интервал 2 МГц или больше. На скорости передачи 1Mbps и 250kbps полоса канала такая же или меньше, чем разрешающая способность по установке частоты RF. Частота канала RF устанавливается регистром RF_CH по следующей формуле: F0 = 2400 + RF_CH [МГц] Чтобы две микросхемы могли общаться друг с другом по радиоканалу, их передатчик и приемник должны быть настроены на одну и ту же частоту, какая используется на противоположной стороне радиообмена. Измерения RPD. Детектор модности принимаемого сигнала (Received Power Detector, RPD), информация которого находится в бите 0 регистра 09, срабатывает при уровне принимаемого сигнала -64 dBm и выше (бит 0 установится). Если принимаемый сигнал слабее -64 dBm, то RDP = 0. RPD можно прочитать в любое время, когда nRF24L01+ находится в режиме приема. Это дает текущий уровень приема на канале. Состояние RPD захватывается, когда принимается правильный пакет, иначе детектор отображал бы уровень сигнала от собственного передатчика. Если не было принято пакетов, то RPD захватывается по окончании периода приема в результате перевода ножки CE в лог. хостом MCU, или когда истечет таймаут приема, управляемый системой Enhanced ShockBurst™. Состояние RPD корректное, когда разрешен режим RX, и после времени ожидания Tstby2a + Tdelay_AGC = 130 мкс + 40 мкс. Усиление RX меняется в зависимости от температуры, поэтому порог RPD также меняется в зависимости от температуры. Значение порога RPD уменьшается на 5dB при T = -40°C и увеличивается на 5dB при 85°C. Управление PA. Усилитель передатчика (Power Amplifier, PA) nRF24L01+ может менять выходную мощность, доступно 4 уровня регулирования, см. таблицу 17 (). PA управляется битами RF_PWR в регистре RF_SETUP. Таблица 17. Установка выходной мощности RF nRF24L01+ (при условиях VDD = 3.0V, VSS = 0V, TA = 27ºC, сопротивление нагрузки = 15Ω+j88Ω).
Управление RX/TX. Переключение режимов прием/передача (RX/TX) nRF24L01+ выполняется программированием бита PRIM_RX регистра CONFIG. [Enhanced ShockBurst™] Enhanced ShockBurst™ это фирменное название подсистемы обработки радио протокола на нижнем уровне, которая обладает автоматической сборкой пакетов и управлением рабочими интервалами времени, включая автоматическое подтверждение в повторные передачи пакетов. Enhanced ShockBurst™ позволяет реализовать ультранизкое потребление энергии вместе с высокой скоростью обмена с недорогим хостом MCU. Функции Enhanced ShockBurst™ значительно повышают энергоэффективность для двунаправленного и однонаправленного обмена, не добавляя сложностей программирования на стороне MCU хоста. Основные функции Enhanced ShockBurst™: • Длина динамической полезной нагрузки от 1 до 32 байт. При передаче ShockBurst™ собирает пакет и управляет тактированием бит пакета данных для передачи. Во время приема ShockBurst™ постоянно ищет допустимый адрес в демодулированном сигнале. Когда такой адрес найден, ShockBurst™ обрабатывает остальную часть пакета и проверяет его CRC. Если пакет принят нормально, то он помещается в свободный слот стеков RX FIFO. Все процессы обработки бит на высоких скоростях и отслеживание таймингов управляются подсистемой ShockBurst™. Функция автоматической обработки транзакций подсистемы Enhanced ShockBurst™ обеспечивает простую реализацию надежного двустороннего канала связи для данных. Эта обработка транзакций обеспечивает обмен данными между двумя трансиверами, когда один из трансиверов работает как основной приемник (Primary Receiver, PRX), и другой как основной передатчик (Primary Transmitter, PTX). Транзакция пакета Enhanced ShockBurst™ всегда начинается передачей пакета от PTX, и транзакция завершается, когда PTX принял подтверждение пакета (ACK packet) от PRX. PRX может подсоединить данные пользователя к пакету ACK, чем обеспечивается двусторонний линк данных. Автоматическая обработка транзакции работает следующим образом: 1. Транзакция начинается передачей пакета данных от PTX к PRX. Enhanced ShockBurst™ автоматически переведет PTX в режим приема, чтобы ожидать приема пакета подтверждения (ACK packet). Enhanced ShockBurst™ позволяет конфигурировать такие параметры, как максимальное количество повторных передач и задержка от передачи до последующей повторной передачи. Вся автоматическая обработка транзакции происходит без участия MCU. В пакете Enhanced ShockBurst™ содержатся поля преамбулы, адреса, управления пакетом, полезной нагрузки и контрольной суммы CRC. На рис. 5. показан формат пакета со старшим битом (MSB) слева.
Рис. 5. Пакет Enhanced ShockBurst™ с полезной нагрузкой (0 .. 32 байта). Поле преамбулы. Это последовательность бит, используемая для синхронизации демодулятора приемника с приходящим потоком бит. Преамбула имеет длину 1 байт, значение которого 01010101 или 10101010. Если первый бит в адреса 1, то преамбула автоматически установится в 10101010, и если первый бит 0, то преамбула автоматически установится в 01010101. Это делается с целью максимального количества переходов уровня в преамбуле для стабилизации приемника. Поле адреса. Это адрес, на который реагирует приемник. Адрес гарантирует, что пакет будет принят и декодирован только тем приемником, которому предназначен, предотвращая нежелательный перекрестный обмен пакетами между несколькими системами nRF24L01+. Можно сконфигурировать ширину поля адреса в регистре AW в 3, 4 или 5 байт, см. таблицу 28. Примечание: адреса, уровень логики у которых сдвигается только один раз (т. е. 000FFFFFFF), в условиях шума могут часто детектироваться неправильно, в результате чего увеличится частота появления ошибок пакета (Packet Error Rate). Адреса, которые выглядят как продолжение преамбулы (с переключением 1-0) также увеличивают Packet Error Rate. Поле управления пакетом. На рис. 6 показан форма 9-битного поля управления пакетом (Packet Control), MSB слева.
Рис. 6. Поле Packet Control. Поле управления пакетом содержит 6-битное поле для обозначения длины полезной нагрузки, 2-битное поле PID (Packet Identity, идентификатор пакета) и 1-битное поле NO_ACK. 6-битное поле длины полезной нагрузки задает длину полезной нагрузки в байтах, которая может быть в диапазоне от 0 до 32 байт. Кодирование работает следующим образом: 000000 соответствует 0 байтам полезной нагрузки (используется только для пустых пакетов ACK). Значения от 000001 до 100000 соответствуют длине полезной нагрузки от 1 до 32 байт. Другие значения, начиная с 100001, не используются. Поле длины полезной нагрузки используется только тогда, когда разрешена функция динамической длины полезной нагрузки (Dynamic Payload Length). 2-битное поле PID используется для детектирования, новый это пакет или переданный повторно. PID предотвращает для устройства PRX повторное получение для хоста MCU одной и той же полезной нагрузки более одного раза. Поле PID инкрементируется на стороне TX для каждого нового пакета, принятого через SPI. Поля PID и CRC (см. далее описание поля CRC) используются устройством PRX, чтобы определить, был ли пакет новым или же был передан повторно. Когда несколько пакетов данных были потеряны при передаче по радиоканалу, поля PID могут становится равными последнему принятому PID. Если у полученного по радиоканалу PID такой же, как у предыдущего пакета, nRF24L01+ сравнивает контрольные суммы CRC обоих пакетов. Если CRC также одинаковые, то считается, что последний принятый пакет является копией ранее принятого пакета, и последний пакет отбрасывается. Поле флага NO_ACK управляет функцией выбора автоматического подтверждения (Selective Auto Acknowledgement). Этот флаг используется только когда применена функция автоматического подтверждения. Установка флага NO_ACK в лог. 1 говорит приемнику, что на этот пакет отправлять автоматическое подтверждение не нужно. На стороне PTX можно установить бит флага NO_ACK в поле управления пакетом командой W_TX_PAYLOAD_NOACK. Однако эта функция должна быть разрешена в регистре FEATURE установкой бита EN_DYN_ACK. Когда Вы используете эту опцию, PTX напрямую переходит в режим Standby-I после передачи пакета. PRX не передает пакет ACK, когда получит пакет с установленным в лог. 1 флагом NO_ACK. Поле полезной нагрузки. Это данные, которыми пользователь нагрузил пакет. Размер полезной нагрузки может быть от 0 до 32 байт, и она передается по радио, будучи выгружена в nRF24L01+. Enhanced ShockBurst™ предоставляет две альтернативы для обработки длин полезной нагрузки - статически и динамически. По умолчанию длина полезной нагрузки статическая. Со статической полезной нагрузкой длина полезной нагрузки у всех пакетов между передатчиком и приемником одинаковая. Статическая длина полезной нагрузки устанавливается регистрами RX_PW_Px на стороне приемника. Длина полезной нагрузки на стороне передатчика устанавливается количеством байт, вдвинутых в TX_FIFO, и это количество должно соответствовать значением в регистре RX_PW_Px на стороне приемника. Dynamic Payload Length (DPL), динамическая длина полезной нагрузки является альтернативой статической длине полезной нагрузки. DPL разрешает передатчику отправлять приемнику пакеты с переменной длиной полезной нагрузки. Это означает, что для системы с разными длинами полезной нагрузки нет необходимости подгонять длину пакета под самую длинную полезную нагрузку. С функцией DPL микросхема nRF24L01+ может декодировать длину полезной нагрузки принятого пакета автоматически, вместо использования регистров RX_PW_Px. MCU может прочитать длину принятой полезной нагрузки командой R_RX_PL_WID. Примечание: всегда проверяйте, является ли длина пакета 32 байта или меньше, когда используется команда R_RX_PL_WID. Если эта длина больше 32 байт, то пакет содержит ошибки, и должен быть отброшен. Пакет отбрасывается с помощью команды FLUSH_RX. Чтобы разрешить DPL, должен быть установлен в лог. 1 бит EN_DPL регистра FEATURE. В режиме RX должен быть установлен регистр DYNPD. У PTX, который передает в PRX с разрешенной функцией DPL, должен быть установлен бит DPL_P0 в регистре DYNPD. Поле CRC. Контрольная сумма CRC это основной механизм детектирования ошибок в пакете. Размер CRC 1 или 2 байта, и она вычисляется по полям адреса, Packet Control и полезной нагрузке. Полином 1-байтной CRC: X8 + X2 + X + 1, начальное значение 0xFF. Полином 2-байтной CRC: X16+ X12 + X5 + 1, начальное значение 0xFFFF. Количество байт в CRC устанавливается битом CRCO в регистре CONFIG. Если CRC пакета показывает ошибку, Enhanced ShockBurst™ отбросит этот пакет. Автоматическая сборка пакета. Эта процедура перед передачей собирает в полный пакет преамбулу, адрес, поле управления пакетом, полезную нагрузку и CRC. Рис. 7. Автоматическая сборка пакета. Автоматическая разборка пакета. После того, как пакет был проверен, Enhanced ShockBurst™ разбирает пакет и загружает полезную нагрузку в RX FIFO, и выставляет прерывание RX_DR IRQ. Рис. 8. Автоматическая разборка пакета. [Автоматическая обработка транзакции пакета] У Enhanced ShockBurst™ есть 2 функции для поддержки автоматической обработки пакетов: это автоматическое подтверждение (auto acknowledgement) и автоматическая повторная передача (auto re-transmit). Auto acknowledgment. Автоматическое подтверждение это функция, которая автоматически передает пакет ACK к PTX после того, как пакет был принят, проверен и был признан допустимым. Функция автоподтверждения снижает нагрузку на MCU системы. Это также снижает стоимость и среднее потребление тока системы. Функция Auto Acknowledgement разрешаетcя установкой регистра EN_AA. Примечание: если у принятого пакета установлен флаг NO_ACK, то автоподтверждение не выполняется. Пакет ACK может содержать опциональную полезную нагрузку, передаваемую от PRX к PTX. Чтобы использовать эту функцию, должна быть разрешена фича Dynamic Payload Length (DPL). MCU на стороне PRX должно выгрузить полезную нагрузку путем вдвигания её в TX FIFO командой W_ACK_PAYLOAD. Полезная нагрузка в TX FIFO (PRX) ожидает приема нового пакета от PTX. Микросхема nRF24L01+ может иметь 3 полезных нагрузки ACK-пакета в TX FIFO (PRX), одновременно ожидающих приема. Рис. 9. TX FIFO (PRX) с ожидающими полезными нагрузками. Рис. 9 показывает, как стек TX FIFO (PRX) работает при наличии в нем полезных нагрузок ACK-пакетов. От MCU полезная нагрузка вдвигается командой W_ACK_PAYLOAD. Декодер адреса и контроллер буфера гарантирует, что полезная нагрузка сохраняется в свободный слот стека TX FIFO (PRX). Когда принят пакет, декодер адреса и контроллер буфера оповещаются адресом PTX. Это обеспечит для генератора ACK правильную полезную нагрузку. Если TX FIFO (PRX) содержит больше одной полезной нагрузки для PTX, то полезные нагрузки обрабатываются по принципу первый вошел - первый вышел. TX FIFO (PRX) блокируется, если все ожидающие полезные нагрузки адресованы PTX, где канал потерян. В этом случае MCU может сбросить содержимое TX FIFO (PRX) командой FLUSH_TX. Чтобы разрешить Auto Acknowledgement с полезной нагрузкой, должен быть установлен бит EN_ACK_PAY в регистре FEATURE. Auto Retransmission (ART). Функция автоматической повторной передачи передаст пакет заново, если не был получен пакет подтверждения ACK. Это используется в системе автоматического подтверждения на PTX. Когда пакет не был подтвержден, можно установить количество разрешенных повторных передач установкой бит ARC в регистре SETUP_RETR. PTX enters входит в режим RX и короткое время ожидает пакет ACK всякий раз, когда пакет был передан. Период времени, которое PTX находится в режиме RX основывается на следующих условиях: • Истекла задержка Auto Retransmit Delay (ARD). Микросхема nRF24L01+ выставляет прерывание TX_DS IRQ, когда принят пакет ACK. nRF24L01+ входит в режим Standby-I, если больше нет не переданных данных в TX FIFO, и ножка CE находится в лог. 0. Если пакет ACK не принят, nRF24L01+ переходит обратно в режим TX после задержки, определенной путем ARD, и повторно передает данные. Это продолжается до тех пор, пока не будет принято подтверждение, или пока не будет достигнуто максимальное количество повторных передач. Два счетчика потери пакетов инкрементируются каждый раз, когда пакет потерян, это счетчики ARC_CNT и PLOS_CNT в регистре OBSERVE_TX. ARC_CNT считает количество повторных передач для текущей транзакции, при инициации новой транзакции Вы сбрасываете ARC_CNT. PLOS_CNT считает общее количество повторных передач с момента последней смены канала. Вы сбрасываете PLOS_CNT записью в регистр RF_CH. Можно использовать эту информацию в регистре OBSERVE_TX для общей оценки качества канала. ARD определяет время от конца переданного пакета до момента, когда PTX запустит повторную передачу этого пакета в случае не получения подтверждения. ARD устанавливается в регистре SETUP_RETR с шагом 250 мкс. Есть ограничение на длительность ARD, когда используется ACK с полезной нагрузкой. Время ARD никогда не должно быть короче, чем сумма времени запуска и времени передачи пакета ACK по радиоканалу: • Для скорости 2Mbps и адреса из 5 байт адреса, 15 байт максимальной полезной нагрузки пакета ACK длительность ARD=250 мкс (значение после сброса). Длительность ARD=500 мкс достаточно велика для любой длины полезной нагрузки ACK в режимах скоростей 1Mbps или 2Mbps. • Для скорости 250kbps и 5 байт адреса применяются значения из таблицы 18. Таблица 18. Максимальная длина полезной нагрузки ACK для разных значений задержек повторной передачи на скорости 250kbps.
Как альтернативу Auto Retransmit можно вручную настроить nRF24L01+ повторно передавать пакет определенное количество раз командой REUSE_TX_PL. MCU должен инициировать каждую передачу пакета импульсом на ножке CE, когда используется эта команда. [Enhanced ShockBurst™, работа PTX] Алгоритм на рис. 10 показывает, как ведет себя сконфигурированная в качестве PTX (передача) микросхема nRF24L01+ после входа в режим Standby-I. Рис. 10. Работа PTX в Enhanced ShockBurst™. Примечание: функционирование ShockBurst™ обозначено пунктирной серой линией. Активируйте режим PTX установкой в лог. 1 ножки CE. Если в этот момент в стеке TX FIFO находится пакет, то nRF24L01+ войдет в режим TX и передаст пакет. Если разрешен Auto Retransmit, то машина состояний проверит, установлен ли флаг NO_ACK. Если он не установлен, то nRF24L01+ после передачи войдет в режим RX, чтобы принять пакет ACK. Если принятый пакет ACK пустой, то будет только выставлено прерывание TX_DS IRQ. Если в пакете ACK находится полезная нагрузка, то одновременно будут выставлены прерывания TX_DS IRQ и RX_DR IRQ перед возвратом nRF24L01+ в режим Standby-I. Если ACK-пакет не был принят перед истечением таймаута, то микросхема nRF24L01+ возвратится в режим Standby-II. Она остается в режиме Standby-II до истечения времени ARD. Если не было достигнуто количество повторных передач ARC, то nRF24L01+ войдет в режим TX и передаст еще раз последний пакет. При выполнении функции Auto Retransmit количество повторных передач может достигнуть максимума, определенного в ARC. Если это произошло, то nRF24L01+ выставит прерывание MAX_RT IRQ и вернется в режим Standby-I. Если CE находится в лог. 1, и стек TX FIFO пуст, то nRF24L01+ войдет в режим Standby-II. [Enhanced ShockBurst™, работа PRX] Алгоритм на рис. 11 показывает, как ведет себя сконфигурированная в качестве PRX (прием) микросхема nRF24L01+ после входа в режим Standby-I. Рис. 11. Работа PRX в Enhanced ShockBurst™. Примечание: функционирование ShockBurst™ обозначено пунктирной серой линией. Активируйте режим PRX установкой в лог. 1 ножки CE. Микросхема nRF24L01+ войдет в режим RX и начнет поиск пакетов. Если пакет принят и разрешено Auto Acknowledgement, то nRF24L01+ определит, новый это пакет или копия ранее принятого пакета. Если пакет новый, то полезная нагрузка передается в RX FIFO, и выставляется прерывание RX_DR IRQ. Если последний принятый от передатчика пакет подтвержден пакетом ACK с полезной нагрузкой, то прерывание TX_DS IRQ показывает, что PTX принял ACK-пакет с полезной нагрузкой. Если флаг NO_ACK в принятом пакете не установлен, то PRX войдет в режим TX. Если в стеке TX FIFO имеется ожидающая передачи полезная нагрузка, то она присоединяется к пакету ACK. Посте того, как пакет ACK передан, микросхема nRF24L01+ возвратится в режим RX. Может быть принята копия ранее полученного пакета, если пакет ACK был потерян. В этом случае PRX отбросит принятый пакет и передаст пакет ACK перед возвратом в режим RX. [MultiCeiver™] MultiCeiver™ это функция, используемая в режиме RX, которая содержит 6 параллельных каналов (data pipe) данных с уникальными адресами. Канал данных это логический канал поверх физического канала RF. Каждый data pipe имеет свой собственный физический адрес (data pipe address), декодируемый в nRF24L01+. Рис. 12. PRX при использовании MultiCeiver™. Микросхема nRF24L01+, сконфигурированная как PRX (основной приемник), может принять данные, адресованные для 6 различных data pipe на одной радиочастоте, что показано на рис. 12. Каждый data pipe снабжен своим собственным уникальным адресом, и может быть сконфигурирован для индивидуального поведения. До 6 микросхем nRF24L01+, сконфигурированных как PTX, могут коммуницировать с одной микросхемой nRF24L01+, сконфигурированной как PRX. Поиск всех адресов data pipe выполняется одновременно. В любой момент времени может быть принят пакет только одного data pipe. Все data pipes могут работать с функционалом Enhanced ShockBurst™. Следующие настройки общие для всех data pipe: • CRC разрешена/запрещена (CRC всегда разрешена, когда разрешен функционал Enhanced ShockBurst™). Каналы данных data pipe разрешаются битами в регистре EN_RXADDR. По умолчанию разрешены только каналы data pipe 0 и data pipe 1. Каждый data pipe конфигурируется в регистрах RX_ADDR_PX. Примечание: всегда убедитесь, что ни на одном data pipe не настроены одинаковые адреса. У каждого data pipe может быть сконфигурирован адрес размером до 5 байт. Канал pipe 0 имеет уникальный 5 байтный адрес. Каналы 1-5 совместно используют 4 самых старших байта адреса. Младший байт адреса должен быть уникальным для всех 6 каналов. Рис. 13 показывает пример, как адресуются каналы data pipe 0-5. Рис. 13. Адресация каналов data pipe 0-5. PRX, использующий MultiCeiver™ и Enhanced ShockBurst™, принимает пакеты от больше одного PTX. Чтобы гарантировать, что ACK-пакет от PRX передан соответствующему PTX, блок PRX берет адрес data pipe, принятый в пакете, и использует его в качестве адреса TX, когда передает ACK-пакет. На рис. 14 дает пример конфигурации адресов для PRX и PTX. На PRX значения RX_ADDR_Pn, определенные как адрес канала pipe, должны быть уникальными. На PTX значение TX_ADDR должно быть таким же, как RX_ADDR_P0 и как адрес pipe того канала, которому надо передать данные. Рис. 14. Пример адресации data pipe в MultiCeiver™. Только когда data pipe примет полный пакет, другие каналы data pipe могут начать принимать данные. Когда несколько PTX передают в PRX, значение ARD может быть использовано для скоса автоматической повторной передачи, так что они блокируют друг друга только один раз. [Тайминг Enhanced ShockBurst™] В этом разделе описывается последовательность интервалов времени работы Enhanced ShockBurst™, как все режимы инициируются и работают. Тайминг Enhanced ShockBurst™ управляется через интерфейс данных и управления (см. далее раздел "Интерфейс данных и управления"). Микросхема nRF24L01+ может быть установлена в статические режимы или в автономные режимы, где событиями управляет внутренняя машина состояний. Каждый автономный режим / последовательность заканчивается сигналом прерывания на ножке IRQ. Все прерывания на диаграммах времени индицированы как события IRQ. Рис. 15. Передача одного пакета с установленным NO_ACK. Примечание (1): прерывание выставляется, если установлен NO_ACK. TIRQ = 8.2 мкс при 1Mbps, TIRQ = 6.0 мкс при 2Mbps, Tstdby2a = 130 мкс. В таблице 19 приведены выражения различные выражения измерения интервалов времени. Таблица 19. Формулы интервалов времени.
Рис. 16. Тайминг Enhanced ShockBurst™ для выгрузки одного пакета (2Mbps). На рис. 16 показана передача и подтверждение пакета. Устройство PRX активирует режим RX (CE=1), и устройство PTX активируется в режиме TX (импульс CE=1 в течение минимум 10 мкс). После 130 мкс передача запускается, и завершается после истечения TOA. Когда передача завершилась, устройство PTX автоматически переключается в режим RX, чтобы ждать пакет ACK от устройства PRX. Когда устройство PRX приняло пакет, оно устанавливает прерывание для хоста MCU и переключается в режим TX для отправки ACK. После того, как устройство PTX приняло пакет ACK, оно устанавливает прерывание для MCU и очищает пакет, удаляя его из TX FIFO. На рис. 17 показан тайминг PTX передачи пакета, когда потерян первый пакет ACK. Чтобы увидеть полную передачу, когда пакет ACK не прошел, см. рис. 20. Рис. 17. Тайминг Enhanced ShockBurst™, когда потерян первый пакет ACK (2Mbps). [Диаграмма транзакции Enhanced ShockBurst™] В здесь описываются несколько сценариев для автоматической обработки транзакций Enhanced ShockBurst™. Выноски на рисунках в этом разделе показывают прерывания IRQ и другие события. Для активности MCU событие может быть помещено в другое окно времени. Примечание: рисунки в этом разделе показывают самую раннюю возможную загрузку пакета (download, DL) в MCU и самую последнюю выгрузку (upload, UL) полезной нагрузки в передатчик. На рис. 18 показано базовое автоподтверждение. После того, как пакет передан устройством PTX и принят устройством PRX, от PRX к PTX передается ACK-пакет. Выставляется прерывание RX_DR IRQ после того, как пакет был принят PRX, в то время как прерывание TX_DS IRQ выставляется, когда пакет был подтвержден и ACK-пакет принят устройством PTX. Рис. 18. Циклы TX/RX с ACK и соответствующие прерывания. Примечание (1): время переключения с передачи на прием и с приема на передачу (Radio Turn Around Delay). На рис. 19 показан сценарий, когда нужна повторная передача из-за потери первого переданного пакета. После того, как пакет передан, устройство PTX входит в режим RX для приема ACK-пакета. После первой передачи PTX ждет заданное время поступления пакета ACK, и если за это время пакет ACK не принят, то PTX заново передает пакет, как показано на рис. 19. Рис. 19. Циклы TX/RX с ACK и соответствующими прерываниями, когда не прошла передача первого пакета. Примечание (1): время переключения с передачи на прием и с приема на передачу (Radio Turn Around Delay). Когда детектирован адрес, устройство PTX остается в режиме RX, пока пакет принимается. Когда заново переданный пакет принят устройством PRX (см. рис. 19), выставляется прерывание RX_DR IRQ, и ACK передается обратно к устройству PTX. Когда ACK принят устройством PTX, выставляется прерывание TX_DS IRQ. Рис. 20 показывает сценарий, где нужна повторная передача после потери пакета ACK. Показаны также соответствующие прерывания. Рис. 20. Циклы TX/RX с ACK и соответствующими прерываниями, когда не прошел пакет ACK. Примечание (1): время переключения с передачи на прием и с приема на передачу (Radio Turn Around Delay). На рис. 21 показан сценарий базового автоподтверждения с полезной нагрузкой. После того, как пакет был передан устройством PTX и принят устройством PRX, пакет ACK с полезной нагрузкой передается с полезной нагрузкой от PRX к PTX. Выставляется прерывание RX_DR IRQ после того, как пакет принят устройством PRX, в то время как на стороне PTX устанавливается прерывание TX_DS IRQ, когда ACK-пакет принят устройством PTX. На стороне устройства PRX прерывание TX_DS IRQ для полезной нагрузки пакета ACK выставляется после того, как принят новый пакет от устройства PTX. Положение IRQ на рис. 21 показывает, где MCU может ответить на прерывание. Рис. 21. Циклы TX/RX, где ACK с полезной нагрузкой и соответствующие прерывания. Примечания: (1) Время переключения с передачи на прием и с приема на передачу (Radio Turn Around Delay). Рис. 22 показывает сценарий, где первый пакет потерян, и нужна повторная передача перед установкой прерывания RX_DR IRQ на стороне устройства PRX. Для устройства PTX устанавливаются оба прерывания TX_DS IRQ и RX_DR IRQ после того, как принят пакет ACK. Посте приема второго пакета (PID=2) на стороне PRX устанавливаются оба прерывания RX_DR IRQ (PID=2) и TX_DS IRQ (полезная нагрузка пакета ACK). Рис. 22. Циклы TX/RX и соответствующие прерывания, когда передаваемый пакет не дошел до PRX. Примечания: (1) Время переключения с передачи на прием и с приема на передачу (Radio Turn Around Delay). Рис. 23. Циклы TX/RX с полезной нагрузкой ACK и соответствующими прерываниями, когда не прошел пакет ACK. Примечания: (1) Время переключения с передачи на прием и с приема на передачу (Radio Turn Around Delay). Рис. 24. Циклы TX/RX с ACK-пакетом, несущим полезную нагрузку, и соответствующие прерывания, когда передача неудачная. ARC установлен в 2. Примечания: (1) Время переключения с передачи на прием и с приема на передачу (Radio Turn Around Delay). Установится прерывание MAX_RT IRQ, если счетчик автоповторов (ARC_CNT) превысил максимальный предел (ARC). На рис. 24 передача пакета заканчивается с прерыванием MAX_RT IRQ. Полезная нагрузка в TX FIFO не удаляется, и MCU принимает решение по следующему шагу в протоколе обмена. Переключение уровня ножки CE запустит новую последовательность передачи того же самого пакета. Полезная нагрузка может быть удалена из TX FIFO с помощью команды FLUSH_TX. [Совместимость с ShockBurst™] Для обеспечения обратной совместимости с nRF2401A, nRF2402, nRF24E1 и nRF24E2 необходимо запретить Enhanced ShockBurst™, для этого установите EN_AA = 0x00 и ARC = 0. Дополнительно скорость передачи данных по радио микросхемы nRF24L01+ должна быть установлена на 1Mbps или 250kbps. Формат пакета ShockBurst™ показан на рис. 25 со старшим битом слева.
Рис. 25. Пакет ShockBurst™, совместимый с устройствами nRF2401/nRF2402/nRF24E1/nRF24E2. В пакете ShockBurst™ имеются поля преамбулы, адреса, полезной нагрузки и CRC, которые такие же, как и у формата пакета Enhanced ShockBurst™, описанного выше. Отличия пакетов ShockBurst™ и Enhanced ShockBurst™ следующие: • В пакете ShockBurst™ отсутствует бит 9 поля Packet Control. [Интерфейс данных и управления] Интерфейс данных и управления дает доступ ко всем функциям микросхемы nRF24L01+. Этот интерфейс состоит из следующих шести цифровых сигналов, допускающих входные уровни 5V: IRQ, выход. Этот сигнал имеет активный уровень лог. 0, и он управляет тремя маскируемыми источниками прерывания. С помощью 1-байтных команд SPI можно активировать стеки данных FIFO микросхемы nRF24L01+ или её регистры во всех режимах работы. Основные функции интерфейса: • Специальные команды SPI для быстрого доступа к большинству часто используемых функций. Команды SPI показаны в таблице 20. Каждая новая команда должна начинаться с перевода ножки CSN из лог. 1 в лог. 0. Регистр STATUS последовательно выдвигается через ножку MISO, когда слово команды вдвигается через ножку MOSI. Последовательная передача команд SPI происходит в следующем формате: < Слово команды: от MSB до LSB (1 байт) > Для информации по интервалам времени см. рисунки 26 и 27. Таблица 20. Набор команд SPI микросхемы nRF24L01+.
Примечания: (a) Должны быть установлены биты в регистре FEATURE, показанные в таблице 28. Команды W_REGISTER и R_REGISTER работают с однобайтными или мультибайтными регистрами. Когда происходит доступ на чтение или запись к мультибайтным регистрам, сначала передается старший бит младшего байта. Вы можете прервать запись до того, как все байты были записаны в многобайтный регистр, оставляя не записанными старшие байты. Например, младший байт RX_ADDR_P0 может быть изменен записью только одного байта в регистр RX_ADDR_P0. Содержимое регистра статуса всегда считывается через MISO после изменения уровня от лог. 1 к лог. 0 на ножке CSN. Примечание: 3 бита информации о канале (pipe) в регистре STATUS обновляется при переходе уровня на ножке IRQ от уровня лог. 1 к лог. Эта информация ненадежна, если регистр STATUS считывается во время перехода уровня на IRQ от лог. 1 от лог. 0. Работа SPI и тайминг показаны на рисунках от 26 до 28 и в таблицах от 22 до 27. Микросхема nRF24L01+ должна быть в режиме Standby или Power Down перед записью в регистры конфигурации. Примечание: на рисунках от 26 до 28 используются следующие аббревиатуры: Cn бит команды SPI, Sn бит регистра STATUS, Dn бит данных. В потоке байт данных сначала идет младший байт, при этом в каждом байте старший бит идет первым. Рис. 26. Операция чтения SPI. Рис. 27. Операция записи SPI. Рис. 28. Диаграмма времени SPI NOP. На рис. 29 показывает компоненты Rpull и Cload, которые упоминаются в таблицах от 22 до 27. Рис. 29. Rpull и Cload. Таблица 22. Параметры времени SPI (Cload = 5 пФ).
Таблица 23. Параметры времени SPI (Cload = 10 пФ).
Таблица 24. Параметры времени SPI (Rpull = 10 кОм, Cload = 50 пФ).
Таблица 25. Параметры времени SPI (Rpull = 10 кОм, Cload = 100 пФ).
Таблица 26. Параметры времени SPI (Rpull = 50 кОм, Cload = 50 пФ).
Таблица 27. Параметры времени SPI (Rpull = 50 кОм, Cload = 100 пФ).
Data FIFO. Стеки данных FIFO хранят передаваемые полезные нагрузки (TX FIFO) или принятые полезные нагрузки, которые готовы к чтению (RX FIFO). Стеки FIFO доступны в обоих режимах PTX и PRX. В микросхеме nRF24L01+ присутствуют следующие FIFO: • Трехуровневый TX FIFO размером 32 байта. У обоих FIFO есть контроллер, и они доступны через SPI с помощью выделенных команд SPI commands. Стек TX FIFO в устройстве PRX могут хранить полезные нагрузки пакетов ACK для трех различных устройств PTX. Если TX FIFO содержится больше одной полезной нагрузки для канала, то эти полезные нагрузки обрабатываются по принципу первый вошел - первым вышел. Стек TX FIFO в устройстве PRX блокируется, если все ожидающие полезные нагрузки адресованы каналам, когда линк к устройству PTX потерян. В этом случае MCU может сбросить (очистить) содержимое TX FIFO командой FLUSH_TX. Стек RX FIFO в устройстве PRX может содержать полезные нагрузки до трех различных устройств PTX, и стек TX FIFO в устройстве PTX может сохранять до трух полезных нагрузок. Вы можете записать в данные в TX FIFO с помощью трех команд: W_TX_PAYLOAD и W_TX_PAYLOAD_NO_ACK в режиме PTX и W_ACK_PAYLOAD в режиме PRX. Все эти три команды предоставляют доступ к регистру TX_PLD (см. таблицу 28, где приведена подробная информация по этому регистру). Стек RX FIFO может быть прочитан командой R_RX_PAYLOAD в режиме PTX и PRX. Эта команда предоставляет доступ к регистру RX_PLD. Полезная нагрузка в TX FIFO устройства PTX не удаляется, если было выставлено прерывание MAX_RT IRQ. Рис. 30. Блок-схема стеков FIFO (RX и TX). Вы можете прочитать информацию о заполненности или пустоте стеков TX FIFO и RX FIFO в регистре FIFO_STATUS. Прерывание. У микросхемы nRF24L01+ есть ножка прерывания (IRQ) с активным уровнем лог. 0. Эта ножка активируется, когда машиной состояний в регистре STATUS установлены TX_DS IRQ, RX_DR IRQ или MAX_RT IRQ в лог. 1. Ножка IRQ сбрасывается в неактивное состояние, когда MCU запишет лог. 1 в бит источника IRQ регистра STATUS. Маска IRQ в регистре CONFIG используется для выбора источников IRQ, которым разрешено переводить в лог. 0 уровень на ножке IRQ. Путем установки в лог. 1 битов MASK соответствующий источник IRQ запрещается. По умолчанию все источники IRQ разрешены. Примечание: 3 бита информации о канале (pipe) в регистре STATUS обновляется при переходе уровня на ножке IRQ от уровня лог. 1 к лог. Эта информация ненадежна, если регистр STATUS считывается во время перехода уровня на IRQ от лог. 1 от лог. 0. [Карта регистров nRF24L01+] Все не определенные (зарезервированные) биты в таблице 28 ниже являются избыточными. Они считываются как лог. 0. Таблица 28. Регистры nRF24L01+ и их биты.
Примечания: (a) Будьте внимательны при установке этого параметра. Если полезная нагрузка ACK больше 15 байт в режиме скорости 2Mbps, то параметр ARD должен быть 500 мкс или больше, если полезная нагрузка ACK больше 5 байт а режиме 1Mbps, то ARD должен быть 500 мкс или больше. В режиме скорости 250kbps (даже когда в ACK нет полезной нагрузки) ARD должен быть 500 мкс или больше. Для дополнительной информации см. выше секцию "Auto Retransmission (ART)". [Информация о периферии RF] В этом разделе описывается периферийная схемотехника и требования к разводке печатной платы, что важно для достижения оптимальных параметров по радиочастоте для nRF24L01+. Выход на антенну. Ножки ANT1 и ANT2 предоставляют балансный вывод RF на антенну. Эти ножки должны получать питание по постоянному току от VDD_PA, либо через радиочастотный дроссель, либо через среднюю точку сбалансированной дипольной антенны. Для оптимальной выходной мощности (0dBm) рекомендуется нагрузка 15Ω+j88Ω. Более низкий импеданс (например 50Ω) может быть получен путем простой согласующей цепи между нагрузкой и ANT1 / ANT2. Рекомендуемая согласующая цепочка для нагрузки 50Ω описывается далее в разделе "Пример применения". Кварцевый генератор. Используемый вместе с nRF24L01+ кварц должен удовлетворять параметрам, показанным в таблице 11. Чтобы достичь низкого потребления энергии и быстрого запуска кварцевого генератора, используйте кварцевый резонатор с низким значением емкостной нагрузки. Пониженное значение C0 также дает более низкий потребляемый ток и ускоренный запуск генератора, но при этом может увеличиться стоимость кварцевого резонатора. Типовое значение C0=1.5 пФ на кварце указано для C0max=7.0 пФ. Емкость нагрузки кварца CL, вычисляется по формуле: C1' - C2' Здесь C1’ = C1 + CPCB1 +CI1 и C2’ = C2 + CPCB2 + CI2. C1 и C2 это два конденсатора SMD, см. схему применения на рис. 32. CPCB1 и CPCB2 это паразитные емкости печатной платы. CI1 и CI2 это внутренняя емкость нагрузки выводов XC1 и XC2 соответственно, для них типовое значение для обоих выводов 1 пФ. Есть возможность подачи тактового сигнала на ножку XC1 трансивера nRF24L01+, что позволяет использовать один и тот же кварцевый резонатор вместе с MCU хоста. Параметры кварца. MCU устанавливает требования по емкости нагрузки CL, когда он подает тактовый сигнал на вход nRF24L01+. Точность частоты ±60ppm необходима для функциональности радиоканала связи. Микросхема nRF24L01+ нагружает кварц емкостью 1 пФ в дополнение к емкости дорожек PCB. Амплитуда сигнала на входе и потребление тока. Перепады уровня сигнала на ножке XC1 не должны превышать ни одно из напряжений шин питания. Если не выполнить это требование, то пробиваются цепочки защиты ESD по входу, в результате чего ухудшаются параметры радиообмена. Рис. 31. Принцип работы кварцевого генератора. У кварцевого генератора nRF24L01+ имеется внутренняя регулировка по амплитуде. Рекомендуется использовать входной сигнал с пиковым уровнем больше чем 0.4V, чтобы достичь низкого потребления энергии и хороших параметров соотношения сигнал/шум, когда используется внешний источник тактирования. В этом случае XC2 не используется, и может оставаться не подключенным. Хорошо разработанная PCB нужна для обеспечения хороших параметров RF. Не продуманная разводка может ухудшить производительность или повлиять на функционирование устройства. Вы можете загрузить с сайта www.nordicsemi.no квалифицированную разводку радиотракта для nRF24L01+ и окружающих её компонентов, включая цепи согласования с антенной. Для оптимальной производительности рекомендуется использовать PCB минимум из двух слоев и внутренним слоем заливки земли. Напряжение питания nRF24L01+ должно быть отфильтровано конденсаторами, расположенными как можно ближе к ножкам VDD. Эти конденсаторы должны обладать хорошими параметрами по RF, см. таблицу 29. Рекомендуется шунтировать большие SMD конденсаторы (например керамический 4.7 мкФ) конденсаторами меньшей емкости. Напряжение питания микросхемы nRF24L01+ должно быть отфильтровано и разведено отдельно от напряжений питания любых цифровых схем. Избегайте использования длинных дорожек питания на PCB. Все соединения земли микросхемы, ножки VDD и блокирующие конденсаторы VDD должны соединяться как можно более короткими дорожками, конденсаторы должны находиться как можно ближе к корпусу микросхемы. Ножки VSS должны напрямую соединяться с заливкой медью на верхнем слое PCB. Рекомендуется создать переходные отверстия для соединения земли с обратной стороной платы и/или внутренними слоями как можно ближе к ножкам VSS. Должно быть как минимум одно переходное отверстие для каждой ножки VSS. Сигналы цифровых данных или управления с большим перепадом уровней не должны прокладываться близко к кварцу или шинам питания микросхемы. Открытая площадка на донышке микросхемы соединяется с землей кристалла микросхемы, и в рекомендуемой разводке она намеренно не используется. Рекомендуется оставлять эту площадку не подключенной. [Пример применения] Рис. 32. Пример рабочей схемы nRF24L01+ для рекомендуемых разводок с недифференциальным выходом 50Ω RF. Таблица 29. Список рекомендуемых компонентов (BOM) для nRF24L01+ с цепью согласования антенны.
Примечания: (a) Емкость C1 и C2 должна быть выбрана в соответствии с емкостью нагрузки кварца CL. Примеры разводки. Рисунки 33, 34 и 35 показывают пример разводки PCB для схемы применения на рис. 32. Антенна разведена в виде проводника на верхней стороне платы. Размер печатной платы этого примера 33.1089 x 15.0622 мм. Используется двухсторонний фольгированный текстолит FR-4 толщиной 1.6 мм. На этой PCB реализована заливка медью земли на обратной стороне платы. Дополнительно есть также области заливки медью земли на стороне монтажа, чтобы гарантировать эффективное заземление и экранирование критических компонентов схемы. Большое количество переходных отверстий соединяют заливки земли на верхней стороне платы с заливкой земли на обратной стороне платы. Рис. 33. Размещение компонентов с верхней стороны платы. Здесь реализована разводка радиоцепей nRF24L01+ с недифференциальным подключением антенны, размещенной в виде проводника на плате. Применены пассивные компоненты типоразмера 0402. Рис. 34. Верхний слой разводки (Top). Рис. 35. Нижний слой разводки (Bottom). На следующих рисунках 36, 37 и 38 показана разводка для выхода на коннектор антенны SMA с волновым сопротивлением 50Ω. Размер печатной платы этого примера 22.7965 x 10.6299 мм. Рис. 36. Размещение деталей с кварцем OFM и коннектором SMA. Рис. 37. Верхний слой разводки (Top). Рис. 38. Нижний слой разводки (Bottom). [Приложение A. Пример конфигурации и обмена с применением Enhanced ShockBurst™] 1. Установите в лог. 0 бит конфигурации PRIM_RX. 2. Когда у MCU есть данные для передачи, через SPI запрограммируйте адрес для принимающего узла радиосети (TX_ADDR) и данные полезной нагрузки (TX_PLD). Ширина полезной нагрузки TX подсчитывается по количеству записанных байт в стек TX FIFO. TX_PLD должен записываться непрерывно, с удержанием сигнала CSN в лог. 0. TX_ADDR не нужно перезаписывать заново, если он не поменялся с момента последней передачи. Если устройство PTX должно принять подтверждение, сконфигурируйте data pipe 0 для приема ACK-пакета. Адрес RX для data pipe 0 (RX_ADDR_P0) должен совпадать с адресом TX (TX_ADDR) устройства PTX. Для примера на рис. 14 выполните следующие настройки адреса для устройства TX5 и устройства RX: Устройство TX5: TX_ADDR = 0xB3B4B5B605 3. Сгенерируйте импульс на выводе CE, чтобы запустить передачу. Длительность этого импульса должна быть как минимум 10 мкс. 4. nRF24L01+ ShockBurst™: - Включается питание радиотракта. 5. Если активировано автоподтверждение (ENAA_P0=1), радиотракт немедленно перейдет в режим RX, если в пакете не был установлен бит NO_ACK. Если был принят правильный ACK-пакет в допустимом окне времени для подтверждения, то передача считается успешной. Установится в лог. 1 бит TX_DS в регистре STATUS, и полезная нагрузка переданного пакета удаляется из TX FIFO. Если не был принят правильный ACK-пакет в указанном окне времени, то полезная нагрузка передается повторно (если разрешена функция auto retransmit). Если счетчик auto retransmit (ARC_CNT) превысил запрограммированный максимум (ARC), то установится в лог. 1 бит MAX_RT регистра STATUS. В этом случае полезная нагрузка TX FIFO не удаляется. Если соответствующее IRQ разрешено маской, то ножка IRQ перейдет в активный уровень лог. 0 при установки любого из бит MAX_RT или TX_DS в регистре STATUS. Для перевода ножки IRQ в неактивное состояние лог. 1 необходимо записать регистр STATUS (см. выше секцию "Прерывание"). Если не был принят пакет ACK для переданного пакета после максимального количества повторных передач, то больше пакеты не передаются до очистки прерывания MAX_RT. Счетчик потерь пакетов (PLOS_CNT) инкрементируется при каждом прерывании MAX_RT. Т. е. ARC_CNT подсчитывает количество повторных передач, которые требовались для передачи одного пакета, а PLOS_CNT подсчитывает количество пакетов, которое не удалось передать после истечения максимального количества повторных передач. 6. Микросхема nRF24L01+ переходит в режим Standby-I, если ножка CE в лог. 0. Иначе будет передана следующая полезная нагрузка в TX FIFO. Если TX FIFO пуст, и CE все еще в лог. 1, то nRF24L01+ войдет в режим Standby-II. 7. Если nRF24L01+ находится в режиме Standby-II, то она немедленно перейдет в режим Standby-I, если ножка CE установлена в лог. 0. 1. Выберите режим RX установкой в лог. 1 бита PRIM_RX в регистре CONFIG. Все каналы данных (data pipe), которые принимают данные, должны быть разрешены (в регистре EN_RXADDR). Разрешите автоподтверждение для всех каналов, работающих как Enhanced ShockBurst™ (регистр EN_AA), и установите корректную ширину полезной нагрузки (регистры RX_PW_Px). Настройте адреса, как описано на шаге 2 в примере выше передачи полезной нагрузки под управлением Enhanced ShockBurst™. 2. Запустите активный режим RX переводом ножки CE в лог. 1. 3. После 130 мкс микросхема nRF24L01+ мониторит радиоканал на наличие входящего обмена данными. 4. Когда принят правильный пакет (у него совпал адрес и сошлась CRC), его полезная нагрузка сохраняется в RX-FIFO, и установится в лог. 1 бит RX_DR в регистре STATUS. Одновременно ножка IRQ перейдет в активный уровень лог. 0. RX_P_NO в регистре STATUS покажет, в каком канале data pipe была принята полезная нагрузка. 5. Если разрешено автоподтверждение, то обратно отправляется пакет ACK, если в принятом пакете не установлен бит NO_ACK. Если установлена полезная нагрузка в TX_PLD FIFO, то она добавляется к паету ACK. 6. MCU установит в лог. 0 ножку CE, чтобы перевести nRF24L01+ в режим Standby-I (режим пониженного потребления тока). 7. MCU может прочитать данные полезной нагрузки через интерфейс SPI. 8. nRF24L01+ теперь готова для входа в режим TX или режим RX, или в режим Power Down. [Приложение B. Конфигурация для совместимости с nRF24XX] 1. Используйте ту же самую конфигурацию CRC, как в nRF2401/nRF2402/nRF24E1/nRF24E2. 2. Установите в лог. 1 бит PWR_UP и PRIM_RX. 3. Запретите функцию автоподтверждения на том data pipe, который адресован. 4. Используйте тот же самый адрес, который настроен на устройстве PTX. 5. Используйте тот же самый частотный канал, как и устройство PTX. 6. Выберите скорость 1Mbps или 250kbps и на nRF24L01+, и на nRF2401/nRF2402/nRF24E1/nRF24E2. 7. Установите корректную ширину полезной нагрузки на адресованном data pipe. 8. Установите в лог. 1 ножку CE. 1. Используйте ту же самую конфигурацию CRC, как у nRF2401/nRF2402/nRF24E1/nRF24E2. 2. Установите в лог. 0 бит PRIM_RX. 3. Установите в 0 счетчик автоповторов (Auto Retransmit Count), чтобы запретить функционал автоповторов. 4. Используйте ту же ширину адреса, как в nRF2401/nRF2402/nRF24E1/nRF24E2. 5. Используйте ту же самую частоту радиоканала, как у nRF2401/nRF2402/nRF24E1/nRF24E2. 6. Выберите скорость передачи данных по радио 1Mbps или 250kbps и для nRF24L01+, и для nRF2401/nRF2402/nRF24E1/nRF24E2. 7. Установите в лог. 1 бит PWR_UP. 8. Запрограммируйте полезную нагрузку той же длины как была сконфигурирована для приема в nRF2401/nRF2402/nRF24E1/nRF24E2. 9. Сгенерируйте импульс CE для передачи пакета. [Приложение C. Вывод сигнала несущей для тестирования] Выходная мощность радиотракта это критический фактор для обеспечения желаемого радиуса действия. Выходная мощность также первый критерий проверки, необходимый для квалификации по всем регуляторным требованиям телекоммуникаций. Конфигурация: 1. Установите PWR_UP = 1 и PRIM_RX = 0 в регистре CONFIG. Примечание: не используйте REUSE_TX_PL вместе с CONT_WAVE = 1. Когда оба эти регистра установлены, микросхема не реагирует при установке лог. 0 на ножке CE. Однако если оба регистра установлены в PWR_UP = 0, режим TX выключен. Теперь nRF24L01+ должна выводить немодулированную несущую на центральной частоте. Для организации узлов сети ISM я спаял два простых макета. Модули nRF24L01+ соединяются с хостом на ATmega32A, установленном на макетной плате AVR-USB-MEGA16 [4]. Можно применить и другие платы, например платы Arduino, как было сделано в обзоре [5]. Модули nRF24L01+ подключаются к микроконтроллеру ATmega32A по простой схеме, тремя аппаратными сигналами SPI (сигналы SCK, MOSI, MISO) и двумя ножками GPIO (сигналы CE и CSN). В качестве программного интерфейса использовалась библиотека от maniacbug [6]. По этой причине сигнал прерывания IRQ от радиомодуля необязателен, потому что в библиотеке он не используется. Назначение сигналов подключения радиомодуля:
Для питания радиомодуля nRF24L01+ установлен стабилизатор на 3.3V. Обратите внимание, что несмотря на то, что радиомодуль питается от 3.3V, питание у ATmega32A 5V, и нет никакого специального согласования уровней логики для цифрового интерфейса. Такое упрощение стало возможным потому, что nRF24L01+ допускает уровни логики +5V на входе, а его выходные сигналы логики с уровнем +3V совместимы с лог. 1 уровней логики ATmega32A. Проект был реализован в среде Microchip Studio 7.0.2542 (это Atmel Studio, переименованная после поглощения Atmel) компанией Microchip. Один узел постоянно передает пакеты, а другой их принимает и передает обратно (использовался пример GettingStarted библиотеки [6]). Если приемник принял пакет, он мигает светодиодом D1 макетной платы AVR-USB-MEGA16. Код передатчика: RF24 radio; // Адреса логических каналов (pipe) адреса для обмена между двумя узлами. const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL }; // Это роль "передатчика", который инициирует обмен, отправляя запрос // и принимая обратно подтверждение: role_e role = role_ping_out; // Настройка и конфигурирование радиотракта nRF24L01+:
radio.begin();
// Опционально, увеличение задержки между повторами, и увеличение // количества повторов: radio.setRetries(15,15); // Этот простой скетч открывает 2 канала (pipe) для двух узлов // радиообмена, чтобы передавать данные туда и обратно. // Открытие канала 'наш' для записи. // Открытие канала 'другой' для чтения, в позиции #1 (всего у нас // есть возможность открыть до 5 каналов для чтения). if ( role == role_ping_out ) { radio.openWritingPipe(pipes[0]); //radio.openReadingPipe(1,pipes[1]); } else { //radio.openWritingPipe(pipes[1]); radio.openReadingPipe(1,pipes[0]); } while (1) { // Сначала делается остановка прослушивания, чтобы // мы могли что-то передат по радиоканалу: radio.stopListening(); // Создание полезной нагрузки и её отправка. Это приведет // к блокировке, пока отправка не завершится. unsigned long payload = 0xDEADBEEF; LED(1); radio.write( &payload, sizeof(unsigned long) ); // Теперь продолжим прослушивание. radio.startListening(); // Подождем здесь до получения ответа или истечения // таймаута (250 мс): t1timeout = 250; t1to_elapsed = false; while ( !radio.available() && !t1to_elapsed ) if ( !t1to_elapsed ) { // Успешный прием: unsigned long got_payload; radio.read( &got_payload, sizeof(unsigned long) ); LED(0); } // Через 0.1 секунды повтор: _delay_ms(100); } Код приемника: RF24 radio; // Адреса логических каналов (pipe) адреса для обмена между двумя узлами. const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL }; // Это роль "приемника", который принимает запрос и отправляет его // обратно: role_e role = role_pong_back; // Настройка и конфигурирование радио:
radio.begin();
// Опционально, увеличение задержки между повторами, и увеличение // количества повторов: radio.setRetries(15,15); // Этот простой скетч открывает 2 канала (pipe) для двух узлов // радиообмена, чтобы передавать данные туда и обратно. // Открытие канала 'наш' для записи. // Открытие канала 'другой' для чтения, в позиции #1 (всего у нас // есть возможность открыть до 5 каналов для чтения). if ( role == role_ping_out ) { radio.openWritingPipe(pipes[0]); //radio.openReadingPipe(1,pipes[1]); } else { //radio.openWritingPipe(pipes[1]); radio.openReadingPipe(1,pipes[0]); } // Запуск прослушивания радиоканала radio.startListening(); while (1) { // Если готовы данные if ( radio.available() ) { LED(1); // Чтение полезных нагрузок, пока не получим все что есть: unsigned long got_payload; bool done = false; while (!done) { // Выборка полезной нагрузки и проверка, была ли // она последней. done = radio.read( &got_payload, sizeof(unsigned long) ); // Небольшая задержка, чтобы другой узел успел переключиться // с передачи на прием: _delay_ms(20); } LED(0); // Сначала остановка прослушивания, чтобы можно было передавать: radio.stopListening(); // Отправка последнего сообщения обратно. radio.write( &got_payload, sizeof(unsigned long) ); // Теперь возобновим прослушивание радиоканала, чтобы можно // получить следующие пакеты: radio.startListening(); } } } Проект полностью можно скачать по ссылке [7]. [Словарик] ACK Acknowledgement, подтверждение. ACS Adjacent Channel Selectivity, селективность по соседнему каналу. AGC Automatic Gain Control, автоматическая регулировка усиления. ART Auto Re-Transmit, автоматическая повторная передача. BER bit error rate, частота возникновения ошибок. BOM Bill Of Materials, список используемых материалов. CD Carrier Detect, детектирование несущей. CE Chip Enable, выборка кристалла. CLK Clock, такты. CRC Cyclic Redundancy Check, контрольная сумма. CSN Chip Select NOT, инверсный сигнал выборки SPI. dB дБ, децибел. Логарифмическая величина, показывающая соотношение двух значений. См. [2]. dBc логарифмическая величина уровня сигнала по отношению к сигналу несущей (carrier). dBm дБм, логарифмическая величина мощности по отношению к одному милливатту. За 0 dBm принимается 1 миливатт. DPL Dynamic Payload Length. ESB Enhanced ShockBurst™. ESD ElectroStatic Discharge, разряд статического электричества. ESR Equivalent Series Resistance, эквивалентное последовательное сопротивление. FIFO First In First Out, принцип работы стекового буфера: первым вошел - первым вышел. GFSK Gaussian Frequency Shift Keying, вид модуляции радиосигнала. IM Intermodulation, интермодуляция. IRQ Interrupt Request, запрос прерывания. ISM Industrial-Scientific-Medical, диапазон радиообмена для промышленных, научных и медицинских целей. kbps kilobit per second, килобит в секунду. LNA Low Noise Amplifier, малошумящий усилитель радиосигнала приемника. LSB Least Significant Bit, младший значащий бит. LSByte Least Significant Byte, младший байт. Mbps Megabit per second, мегабит в секунду. MCU Microcontroller Unit, микроконтроллер. MISO Master In Slave Out. MOSI Master Out Slave In. MSB Most Significant Bit, старший значащий бит. MSByte Most Significant Byte, старший байт. N/A Not Available, недоступно. NP0 конденсатор с нулевым температурным коэффициентом [3]. PA Power Amplifier, усилитель мощности передатчика. PC Personal Computer. PCB Printed Circuit Board, печатная плата. PID Packet Identity Bits, биты идентификации пакета. PLD Payload, полезная нагрузка. PLL Phase Locked Loop, фазовая автоподстройка частоты, ФАПЧ. POR Power On Reset, сброс по питанию. ppm part per million, сколько единиц на миллион. PRX Primary Receiver, основной приемник. PTX Primary Transmitter, основной передатчик. PWR_DWN Power Down, выключение питания. PWR_UP Power Up, включение питания. RF Radio Frequency, радиочастота. RFID радиочастотная метка. RoHS Restriction of use of Certain Hazardous Substances, стандарт по ограничению вредных воздействий. RPD Received Power Detector, детектор принимаемой мощности. RX Receive, прием. RX_DR Receive Data Ready, готовность принятых данных. SMD surface mounted device, радиокомпонент для поверхностного монтажа. SPI Serial Peripheral Interface. TX Transmit, передача. TX_DS Transmit Data Sent, отправлены передаваемые данные. VoIP Voice Over IP, передача голосового трафика через IP-сети. X7R температурный класс конденсатора: в диапазоне от -55°C до +125°C, ΔC/C0 изменяется в диапазоне ±15% [3]. [Ссылки] 1. nRF24L01+ Single Chip 2.4GHz Transceiver site:nordicsemi.com. |