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

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 байтастатическая или динамическая длина
CRC1 или 2 байтапакет с неверной CRC не принимается

Транзакция

Обмен всегда начинает основной передатчик (PTX), а основной приёмник (PRX) отвечает (разд. 7.2):

  1. PTX отправляет пакет и сразу переходит на приём, ожидая подтверждения (ACK).
  2. PRX, приняв пакет с верной CRC, автоматически отправляет ACK и возвращается в приём.
  3. Если 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, с выключенным автоподтверждением, эту защиту делают в прошивке.

Источники

  1. 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
  2. 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

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