Enhanced ShockBurst
nRF24L01+ сам собирает пакет, считает CRC, ждёт подтверждения и при потере повторяет передачу — микроконтроллеру остаётся положить данные в FIFO и дождаться прерывания. Этот встроенный канальный уровень Nordic называет Enhanced ShockBurst.
Обновлено Редакция GAW
Enhanced ShockBurst (ESB) — встроенный канальный уровень радиотрансивера Nordic nRF24L01+: микросхема сама собирает и разбирает пакеты, проверяет CRC, отправляет подтверждения и повторяет потерянные пакеты без участия микроконтроллера (Product Specification v1.0, гл. 7).
Формат пакета
| Поле | Размер | Назначение |
|---|---|---|
| Преамбула | 1 байт | 01010101 или 10101010 для синхронизации приёмника |
| Адрес | 3–5 байт | адрес приёмника, ширина задаётся регистром AW |
| Управляющее поле | 9 бит | длина (6 бит), PID (2 бита), NO_ACK (1 бит) |
| Данные | 0–32 байта | статическая или динамическая длина |
| CRC | 1 или 2 байта | пакет с неверной CRC не принимается |
Транзакция
Обмен всегда начинает основной передатчик (PTX), а основной приёмник (PRX) отвечает (разд. 7.2):
- PTX отправляет пакет и сразу переходит на приём, ожидая подтверждения (ACK).
- PRX, приняв пакет с верной CRC, автоматически отправляет ACK и возвращается в приём.
- Если ACK не пришёл — в течение 250 мкс нет совпадения адреса (500 мкс на 250 кбит/с), — PTX повторяет пакет через задержку ARD (разд. 7.4.2).
Число повторов ARC — от 0 до 15 (по умолчанию 3), задержка ARD — от 250 до 4000 мкс шагом 250 мкс (регистр SETUP_RETR). Худший случай для одного пакета при ARD 4 мс и 15 повторах — около 60 мс до признания потери (наш расчёт). Счётчики ARC_CNT и PLOS_CNT в регистре OBSERVE_TX позволяют оценить качество канала.
ACK с данными
Подтверждение может нести до 32 байт ответа от приёмника: так получается двусторонний обмен без переключения ролей (разд. 7.4.1). Ответ кладут в TX FIFO приёмника заранее; при этом ARD должна покрывать время эфира ACK — 250 мкс хватает для ответа до 15 байт на 2 Мбит/с и до 5 байт на 1 Мбит/с, а 500 мкс — для любого ответа на 1–2 Мбит/с (табл. 18). Приёмник может принимать пакеты от шести передатчиков по разным логическим каналам.
Не путать
С простым ShockBurst — режимом совместимости со старыми nRF2401A, nRF2402, nRF24E1 и nRF24E2: в нём нет управляющего поля, автоподтверждения и повторов, CRC необязательна, а скорость — 1 Мбит/с или 250 кбит/с (разд. 7.9). Включают его, выключив ESB: EN_AA = 0x00 и ARC = 0.
Частые вопросы
Сколько раз nRF24L01+ повторяет пакет?
Столько, сколько задано в поле ARC регистра SETUP_RETR: от 0 (повторы выключены) до 15, по умолчанию 3. Задержку между повторами задаёт ARD — от 250 до 4000 мкс шагом 250 мкс (Product Specification v1.0, рег. 04). Если подтверждение так и не пришло, микросхема выставляет прерывание MAX_RT, а пакет остаётся в TX FIFO: его удаляют командой FLUSH_TX или отправляют снова. Сам флаг MAX_RT сбрасывают записью единицы в его бит регистра STATUS (разд. 7.8.7 и 8.5).
Можно ли передать данные обратно вместе с подтверждением?
Да, ACK с полезной нагрузкой: приёмник заранее кладёт ответ командой W_ACK_PAYLOAD, и он уходит с подтверждением следующего пакета от этого передатчика. Нужно включить динамическую длину пакета и бит EN_ACK_PAY; в TX FIFO приёмника может ждать до трёх таких ответов (разд. 7.4.1). При этом ARD должна покрывать время передачи ACK — см. табл. 18.
Почему пакет пришёл дважды?
Если потерялось подтверждение, передатчик повторит пакет, хотя приёмник его уже получил. Чтобы не отдавать его микроконтроллеру второй раз, приёмник сравнивает 2-битный PID и CRC с предыдущим пакетом и отбрасывает копию (разд. 7.3.3.2). Без ESB, с выключенным автоподтверждением, эту защиту делают в прошивке.
Источники
- Nordic Semiconductor. nRF24L01+ Single Chip 2.4GHz Transceiver, Product Specification v1.0 (September 2008) — гл. 7: канальный уровень с автоматической сборкой пакета, подтверждением и повторами; 7.3: преамбула 1 байт, адрес 3–5 байт, управляющее поле 9 бит (длина 6 бит, PID 2 бита, NO_ACK 1 бит), данные 0–32 байта, CRC 1 или 2 байта (x⁸ + x² + x + 1 и x¹⁶ + x¹² + x⁵ + 1); 7.4.1: ACK с данными — до трёх ожидающих в TX FIFO приёмника; 7.4.2: передатчик ждёт ACK 250 мкс (500 мкс на 250 кбит/с), повторяет после ARD; счётчики ARC_CNT и PLOS_CNT; табл. 18 и примеры: ARD 250 мкс достаточно для ACK с данными до 15 байт на 2 Мбит/с и до 5 байт на 1 Мбит/с, 500 мкс — для любых на 1–2 Мбит/с; рег. 04 SETUP_RETR: ARD 250–4000 мкс шагом 250 мкс, ARC 0–15, по умолчанию 3; 6.1.5: с ESB передатчик не бывает в режиме TX дольше 4 мс; 7.9: для совместимости с nRF2401A, nRF2402, nRF24E1, nRF24E2 ESB выключают (EN_AA = 0x00, ARC = 0), скорость 1 Мбит/с или 250 кбит/с, пакет без управляющего поля, CRC по выбору; 7.8.7: при превышении ARC — прерывание MAX_RT, пакет остаётся в TX FIFO, удаляется командой FLUSH_TX; 8.5: флаги TX_DS, RX_DR, MAX_RT в STATUS сбрасываются записью 1
- Nordic Semiconductor. nRF24L01+ Ultra low power 2.4GHz RF Transceiver IC — страница изделия — архивная копия (Wayback, март 2017): аппаратный ускоритель протокола Enhanced ShockBurst снимает с микроконтроллера критичные по времени функции; автоматическая сборка пакета (преамбула, адрес, CRC), динамическая длина 1–32 байта, автоповтор, автоподтверждение с данными, 6 каналов MultiCeiver, три FIFO по 32 байта; эфирная совместимость с сериями nRF24L, nRF24E и nRF240
Нашли ошибку?
Смотрите также
- nRF24L01+Радио 2,4 ГГц по SPI: питание, уровни, токи, каналы, ShockBurst, тайминги
- Data pipe (MultiCeiver)Логический канал приёма nRF24L01+ со своим адресом
- CRCЦиклический избыточный код для обнаружения ошибок
- FIFO (буфер «первым пришёл — первым ушёл»)Аппаратная очередь между периферией и программой
- ACK и NACK в I²CДевятый такт: подтверждение байта и его отсутствие
- FSK и GFSKЧастотная манипуляция: 0 и 1 — сдвиг на минус и плюс девиацию