Реализация функции CSMA на беспроводных трансиверах Spirit1 и S2-LP

14 февраля

автомобильная электроникаучёт ресурсовсветотехникапотребительская электроникаинтернет вещейST Microelectronicsстатьяинтегральные микросхемыбеспроводные технологии

Разработчикам приложений, использующих беспроводные приемопередатчики Spirit1 и S2-LP производства STMicroelectronics, необходимо повышать вероятность доставки пакетов данных, уменьшая количество наложений посылок в эфире при случайном доступе к среде передачи. О том, как работает применяемая для этого функция CSMA и как ее реализовать, рассказывает предлагаемое практическое руководство.

Описание функции проверки занятости канала перед передачей CSMA

Принцип

CSMA/CA – это механизм доступа к каналу, основанный на правиле проверки его занятости перед передачей («послушай, прежде чем начать передачу»). Это позволяет избежать одновременного использования канала разными передатчиками и увеличивает вероятность правильного приема передаваемых данных.

CSMA – это необязательная функция, которую можно включать при выполнении передачи. Обратите внимание, что она не должна быть включена, когда трансивер находится в режиме приема. CSMA нельзя использовать вместе с такими функциями протокола канального уровня как автоматическое подтверждение и автоматическая повторная передача.

Когда CSMA включена, устройство выполняет оценку состояния канала (CCA) перед передачей каких-либо данных. В трансивере SPIRIT1 CCA основана на сравнении RSSI в канале с заранее заданным порогом. 

Циклы выдержки (Back Off)

Если CCA обнаруживает, что канал занят, активируется процедура выдержки (паузы) для повторения процесса CCA определенное количество раз, пока не будет обнаружено, что канал свободен. Каждый раз, когда CCA повторяется, счетчик (NB) увеличивается на единицу, вплоть до верхнего предела (Max NB). Когда предел достигнут, прерывание уведомляет о том, что канал неоднократно был обнаружен в занятом состоянии, и по этой причине передача не была выполнена. 

Постоянный режим

В процессе выдержки устройство остается в состоянии SLEEP/READY с целью снижения энергопотребления. При желании CCA может быть постоянным, то есть вместо запуска процесса выдержки, представляющего собой временной отрезок с малым энергопотреблением, при обнаружении канала занятым алгоритм CCA активен до тех пор, пока канал не станет свободным или пока МК не остановит его.

Идея использования этой опции заключается в том, чтобы дать МК возможность самостоятельно управлять оценкой занятости канала CCA. При постоянном мониторинге без пауз информация об освобождении канала поступит максимально быстро.

Выбор режима «постоянного CCA» (CCA Persistent) должен исходить из компромисса между уменьшением времени задержки до начала передачи и повышенным потреблением энергии при активном ожидании в режиме приема.

.

Блок-схема

Общая блок-схема CSMA/CA показана на рисунке 1. TCCA и TListen – два параметра, управляющие процедурой оценки состояния канала. Практика разработки рекомендует, чтобы эти параметры усредняли энергию канала в течение определенного периода, выраженного в виде кратного битового периода (TCCA), и повторяли такой замер несколько раз, охватывая более длительные периоды (TListen). Замер выполняется непосредственно путем опроса бита наличия несущей (CS), сгенерированного модулем приемника.

Рис. 1. Упрощенная блок-схема CSMA

Рис. 1. Упрощенная блок-схема CSMA

Расчет периодичности CSMA

TCCA: определение времени замера RSSI

Tcca определяет длительность операции по обнаружению несущей. Обнаружение несущей заключается в следующем: в течение некоторого времени измеряется энергия в канале (в виде RSSI) и полученное значение сравнивается с заданным пользователем уровнем (Threshold). Таким образом оценивается, превышает ли энергия сигнала определенный порог. Время замера RSSI входящего сигнала будет варьироваться в зависимости от полосы пропускания RX-фильтра, как показано в таблицах 1 и 2. В таблице 1 измерения выполнены для частоты 25 МГц цифровой части (частота кварца 50 МГц). Все замеры выполняются при точной настройке рабочей частоты (выполнена калибровка начального отклонения частоты кварцевого резонатора) для случая Spirit1.

Таблица 1. Время обнаружения RSSI в соответствии с шириной полосы RX (определяется степенью полосового фильтра) для случая Spirit1

Полосовой фильтр, степень Фильтр Rx мин., кГц Фильтр Rx макс., кГц Время обнаружения RSSI, @ 3 дБ ниже порога чувствительности, мкс Время обнаружения RSSI, @ 6 дБ ниже порога чувствительности, мкс Время обнаружения RSSI, @ -60 дБм, мкс,
7 4,0 6,7 5200 4660 1700
6 6,7 13,5 3500 2360 850
5 13,5 26,9 1515 1212 477
4 26,9 53,9 745 662 238
3 53,9 108,0 395 330 165
2 108,0 216,1 206 163 98
1 216,1 433,6 105 88 64
0 433,6 769,3 61 46 36

Поскольку в этом режиме временной отрезок активного приема может быть очень коротким, будет целесообразно принять во внимание время перехода из состояния SLEEP в состояние приема (Rx), которое составляет порядка 120 мкс.

S2-LP – время обнаружения RSSI

В таблице 2 указаны измерения, которые выполнены для частоты 25 МГц цифровой части (частота кварца 50 МГц). Все замеры для случая S2-LP производились при точной подстройке частоты (калибровке смещения кварца).

Таблица 2. Время обнаружения RSSI в соответствии с шириной полосы RX (степенью полосового фильтра) для случая S2-LP

Полосовой фильтр, степень Фильтр Rx мин., кГц Фильтр Rx макс., кГц Время обнаружения RSSI, @3 дБ ниже порога чувствительности, мкс Время обнаружения RSSI, @6 дБ ниже порога чувствительности, мкс Время обнаружения RSSI, @ -60 дБм, мкс
7 4,0 6,7 4500 3250 1400
6 6,7 13,5 2370 1780 760
5 13,5 26,9 1100 880 415
4 26,9 53,9 530 450 198
3 53,9 108,0 272 230 119
2 108,0 216,1 167 140 60
1 216,1 433,6 90 76 39
0 433,6 769,3 48 41 28

Точная настройка TCCA

Исходя из приведенных выше цифр, настройки TCCA должны быть тщательно выверены. Как целое число, кратное TBit, время TCCA должно быть выше, чем минимальное время обнаружения RSSI, определенное в таблицах.

Полный период прослушивания TListen, кратный TCCA

Определение

Период прослушивания напрямую связан с особенностями работы конечного приложения в случае известного источника помех, например, когда помехами являются соседние узлы и длительность их работы известна. В таком случае TListen может корректироваться в зависимости от времени передачи данных источником помех. Этот параметр является целочисленным кратным TCCA. Он должен быть аккуратно выставлен в случае, если энергопотребление является ключевым параметром системы, так как эта задержка напрямую определяет максимальное время приема перед передачей.

Если канал свободен (постоянный и непостоянный режимы)

Если канал занят и бит persistent_mode («постоянный CCA») равен 1, в периоды T устройство будет проверять канал непрерывно. Когда канал освобождается, устройство должно оставить канал свободным на число периодов NUM._OF_CCA_PERIOD (Tlisten ), и только после этого начинать передачу (рисунок 2).

Рис. 2. CSMA при свободном канале

Рис. 2. CSMA при свободном канале

Если канал занят (постоянный режим)

В постоянном режиме TListen – максимальный отрезок времени приема RX перед передачей, в течение которого канал становится свободным. Если канал занят и бит persistent_mode равен 1, устройство будет непрерывно проверять канал в периоды Tcca. Свободное состояние канала должно продолжаться в течение числа периодов NUM_OF_CCA_PERIOD (TListen) перед передачей, как показано на рисунке 3.

Рис. 3. CSMA в случае, когда канал занят и освобождается

Рис. 3. CSMA в случае, когда канал занят и освобождается

Продолжительность выдержки и максимальное количество циклов выдержки 

Если канал занят

Если канал занят и бит persistent_mode равен 0, устройство проверит канал в течение периода TCCA. В конце периода, если сигнал CS (чувствительности несущей) высокий, трансивер переключится в режим SLEEP на случайное время, которое может продолжаться BOtime = TRCO×(6 + rand(0: 2(NB + 1))×(BUPRESC + 1)) при NB=0.

В конце этого периода он снова переключится на прием для другого T, затем вновь перейдет в спящий режим и так далее, пока не будет достигнуто заданное число выдержек. В этот момент на МК будет отослано прерывание о событии  MAX_BO_REACHED (рисунок 4).

Рис. 4. CSMA (непостоянный) при занятом канале (в этом случае MAX_NB_Z1 = 3)

Рис. 4. CSMA (непостоянный) при занятом канале (в этом случае MAX_NB_Z1 = 3)

Если канал освобождается

Наконец, если канал освобождается, например, в течение одного из временных промежутков SLEEP, устройство должно обеспечить наличие свободного канала на число периодов NUM._OF_CCA_PERIOD (T ) перед передачей Listen (рисунок 5).

Рис. 5. CSMA (непостоянный), если канал занят и освобождается

Рис. 5. CSMA (непостоянный), если канал занят и освобождается

Настройка CSMA

Описание параметров. Параметры блока CSMA

  • CSMA_ON – включение/отключение процедуры CSMA, этот бит будет проверяться при каждой передаче пакета;
  • CSMA_PERS_ON задает постоянство контроля несущей. Это означает, что канал постоянно мониторится без пауз до тех пор, пока снова не высвободится. МК может остановить процедуру с помощью команды SABORT;
  • CCA_PERIOD – битовое поле, которое определяет время TCCA (выраженное в числе выборок TBit) между двумя последовательными выборками CS, следующим образом:

00b: 64xTbit

01b: 128xTbit

10b: 256xTbit

11b: 512xTbit

  • _OF_CCA_PERIOD – настройка TListen = [1…15]×TCCA;
  • SEED_RELOAD – включение/отключение перезагрузки начального числа, используемого генератором случайной выдержки в начале каждой процедуры CSMA (во время сброса счетчика, например, NB = 0). Если эта функция не включена, начальное число автоматически генерируется и обновляется самой схемой генератора;
  • BU_COUNTER_SEED_MSByte/LSByte – байты, которые используются для установки начального числа генератора псевдослучайных чисел при запуске цикла CSMA, если бит SEED_RELOAD включен. Значение 0 не допускается, поскольку генератор псевдослучайных чисел в этом случае не работает;
  • BU_PRESCALER – предделитель, который используется для настройки единицы времени выдержки;
  • NBACKOFF_MAX – максимальное количество циклов выдержки. 

Параметры RSSI и Carrier Sense

Функциональные возможности опроса несущей могут использоваться для обнаружения факта приема сигнала. Оно основано на измеренном значении RSSI. Существуют два режима работы при опросе несущей: статический и динамический. Когда используется статический опрос несущей (CS_MODE = 0), сигнал опроса несущей принимает значение логической единицы, если измеренный RSSI выше значения, заданного в регистре RSSI_TH, и сбрасывается, если RSSI падает на 3 дБ ниже того же порога.

Когда используется динамический опрос несущей (CS_MODE = 1, 2, 3), сигнал опроса несущей принимает значение уровня логической единицы, если принимаемый сигнал превышает пороговое значение и обнаруживается быстрое увеличение мощности на 6, 12 или 18 дБ; сигнал опроса сбрасывается, если обнаруживается падение мощности той же амплитуды. Сигнал опроса несущей также используется внутри демодулятора при запуске АПЧ (автоподстройки частоты) и алгоритмов восстановления тактовой синхронизации символов, а также для процедуры CSMA (для реализации чего должно быть выставлено CS_MODE = 0).

Функция опроса несущей контролируется следующими параметрами:

  • RSSI threshold, когда порог RSSI превышен, АПЧ и алгоритмы восстановления тактовой синхронизации символов начинают работать с потоком данных. Чтобы максимизировать чувствительность, порог RSSI должен быть установлен примерно на 3 дБ ниже ожидаемого уровня чувствительности. Например, если чувствительность приемника при заданной полосе входного фильтра составляет -106 дБм, то порог RSSI следует установить равным -103 дБм. Регистр RSSI_TH и действующее пороговое значение RSSI связаны формулой 1:

$$Spirit1:\:RSSI\_TH=2\times \left(RSSI\_threshold\_dBm+130 \right);\\S2\!-\!LP:\:RSSI\_TH=RSSI\_threshold\_dBm+146\qquad{\mathrm{(}}{1}{\mathrm{)}}$$

  • CS mode – это параметр, который управляет режимами работы с контролем несущей (регистр RSSI_FLT, допустимые значения 0…3):
  • CS_MODE = 0 – статический контроль несущей;
  • CS_MODE = 1 – динамический контроль несущей с динамическим порогом 6 дБ;
  • CS_MODE = 2 – динамический контроль несущей с динамическим порогом 12 дБ;
  • CS_MODE = 3 – динамический контроль несущей с динамическим порогом 18 дБ.

Настройки связанных регистров

Spirit 1 и S2-LP

Настройки Spirit 1 представлены в таблице 3.

Таблица 3. Настройки Spirit1

Название регистра Адрес Биты Название поля Сброс R/W Описание
RSSI_FLT 0x21 7:04 RSSI_FLT [3:0] 1110 R/W Усиление фильтра RSSI
3:02 CS_MODE 0 Режим контроля несущей
1:00 OOK_PEAK_DECAY 11 Пиковый контроль затухания для ООК: 3 – медленное затухание, 0 – быстрое затухание
RSSI_TH 0x22 7:00 RSSI_THRESHOLD 0x24 R/W Порог обнаружения сигнала с шагом 0,5 дБ. -120 дБм соответствует 0x14
PROTOCOL[1] 0x51 15 LDC_RELOAD_ON_SYNC 0 R/W 1: таймер LDC перезагружается со значением, хранящимся в регистрах LDC_RELOAD
14 PIGGYBACKING 0 1: PIGGYBACKING включен
13:12 Резерв 0
11 SEED_RELOAD 0 1: перезагрузка с начальным числом генератора случайной выдержки при использовании значения, записанного в регистрах BU_COUNTER_SEED_MSBYTE/LSBITE
10 CSMA_ON 0 1: режим доступа к каналу CSMA включен
9 CSMA_PERS_ON 0 1: CSMA постоянный (без выдержки) включен
8 AUTO_PCKT_FLT 0 1: Включен режим автоматической фильтрации пакетов
CSMA_CONFIG[3] 0x64 7:00 BU_COUNTER_SEED_MSBYTE 0xFF R/W MSB-значение счетчика начального числа генератора случайных чисел (ГСЧ), используется для применения алгоритма BBE во время алгоритма CSMA
CSMA_CONFIG[2] 0x65 7:00 BU_COUNTER_SEED_LSBYTE 0 R/W LSB-значение счетчика начального числа ГСЧ, используется для применения алгоритма BBE во время алгоритма CSMA
CSMA_CONFIG[1] 0x66 7:02 BU_PRESCALER[5:0] 1 R/W Значение предделителя, используется для программирования единиц выдержки BU
1:00 CCA_PERIOD 0 Используется для программирования времени TCCA (64/128/256/512×Tbit)
CSMA_CONFIG[0] 0x67 7:04 CCA_LENGTH[3:0] 0 R/W Используется для программирования времени TListen
3 Резерв 0
2:00 NBACKOFF_MAX 0 Максимальное число циклов выдержки

Отличия регистров S2-LP от регистров Spirit1 представлены в таблице 4.

Таблица 4. Отличия регистров S2-LP от регистров Spirit1

Группа Название регистра Адрес для Spirit1 Адрес для S2-LP Бит Название битового поля Описание Значение по умолчанию
Radio Configu-ration (Modem & Packet/Protocol Configuration) RSSI_FLT 0x21 0x17 0x23
RSSI_TH 0x22 0x18 RSSI_THRESHOLD Порог обнаружения сигнала с шагом 0,5 дБ. -120 дБм соответствует 0x28 0x28
PROTOCOL1 0x51 0x3A 7 LDC_MODE 1: режим LDC включен 0x00
6 LDC_RELOAD_ON_SYNC 1: таймер LDC перезагружается со значением, хранящимся в регистрах LDC_RELOAD 0x00
5 PIGGYBACKING 1: PIGGYBACKING включен 0x00
4 FAST_CS_TERM_EN 1: включен таймер прослушивания RX 0x00
3 SEED_RELOAD 1: перезагрузка начального значения генератора случайной выдержки с использованием значения, записанного в регистрах BU_COUNTER_SEED_MSB YTE/LSBYTE 0x00
2 CSMA_ON 1: режим доступа к каналу CSMA включен 0x00
1 CSMA_PERS_ON 1: постоянный CSMA (без выдержки) включен 0x00
0 AUTO_PCKT_FLT 1: включен режим автофильтрации пакетов 0x00
CSMA_CONF3 0x64 0x4C 0x4C
CSMA_CONF2 0x65 0x4D 0x00
CSMA_CONF1 0x66 0x4E 0x04
CSMA_CONF0 0x67 0x4F 0x00

Реализация исходного кода

CSMA очень просто активировать: для АПИ под Spirit1 и S2-LP требуется лишь структура инициализации с параметрами CSMA. Следует настроить также пороговое значение RSSI: его необходимо установить в требуемое значение для контроля несущей.

Быстрая проверка состоит в том, корректно ли происходит задержка передачи (в зависимости от количества циклов выдержки и TListen), если на желаемом канале присутствует помеха.

АПИ для Spirit1 и его настройка


/**

* @сокращенная выдержка из структуры CSMA

*/

CsmaInitxCsmaInit={

PERSISTENT_MODE_EN, /*!< Включить CSMA в постоянном режиме */

CS_PERIOD, /*!< Задание множителя Tbit для получения Tcca. @refCcaPeriod */

CS_TIMEOUT, /*!< Задание множителя Tcca для определения Tlisten. От 0 до 15. */

MAX_NB, /*!< Определяет максимальное число циклов выдержки. От 0 до 7. */

BU_COUNTER_SEED, /*!< Определяет начальное значение счетчика времени выдержки */

CU_PRESCALER/*!< Задает предделитель времени выдержки. От От 0 до 63. */

};

Во-первых, пользователь может использовать код примера из комплекта разработки программного обеспечения STSW-S2LP-DK (сценарий SDK_CSMA_A). Реализация CSMA состоит в настройке и активации CSMA после инициализации радио и установки правильного порога RSSI:

Следует использовать следующую структуру конфигурации:


/* Spirit CSMA config */

SpiritCsmaInit(&xCsmaInit);

SpiritCsma(S_ENABLE);

SpiritQiSetRssiThresholddBm(RSSI_THR);

Примечание. Соответствующие АПИ доступны в исходном файле SPIRIT_Csma.c в библиотеке под Spirit1.


SpiritIrq (MAX_BO_CCA_REACH, S_ENABLE);

Приложению также необходимо установить прерывание MAX_BO_CAA_REACH, если необходимо получать предупреждения в случае, когда передача не смогла быть выполнена (канал постоянно занят).

АПИ для S2-LP и его настройка

Пользователь может задействовать в качестве примера код из комплекта разработки программного обеспечения STSW-S2LP-DK (сценарий SDK_CSMA_A). Реализация CSMA состоит в настройке и активации CSMA после инициализации радио:


/* Spirit CSMA config */

S2LPCsmaInit(&xCsmaInit);

S2LPCsma(S_ENABLE);

Следует использовать следующую структуру конфигурации:


/**

* @brief CSMA structure fitting

*/

SCsmaInit xCsmaInit={

PERSISTENT_MODE_EN, /*!< Enable the CSMA persistent mode */

CS_PERIOD, /*!< Set the Tbit multiplier to obtain the Tcca. @ref CcaPeriod */

CS_TIMEOUT, /*!< Set the Tcca multiplier to determinate the Tlisten. From 0 to 15. */

MAX_NB, /*!< Specifies the max number of backoff cycles. From 0 to 7. */

BU_COUNTER_SEED, /*!< Specifies the BU counter seed. */

CU_PRESCALER /*!< Specifies the BU prescaler. From 0 to 63. */

};

Примечание. Соответствующие АПИ доступны в исходном файле S2LP_Csma.c в составе библиотеки S2-LP.

Приложение также должно установить правильный порог RSSI (значение ниже RSSI_THR) следующим образом:


SRssiInitxSRssiInit= {

.cRssiFlt = 14,

.xRssiMode = RSSI_STATIC_MODE,

.cRssiThreshdBm = RSSI_THR,

};

S2LPRadioRssiInit(&xSRssiInit);

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


S2LPGpioIrqConfig(MAX_BO_CCA_REACH, S_ENABLE); 

Примеры реализации CSMA

Код SDK в качестве описания примера. Доступность кода

Как для Spirit1, так и для S2-LP SDK в качестве примера доступен специальный код с поддержкой CSMA, работающий на обоих трансиверах (рисунок 6).

Рис. 6. Специальный код с поддержкой CSMA: а) для Spirit1 (пакет программного обеспечения X-CUBE-SUBG1); б) для S2-LP (пакет ПО STSW-S2LP-DK)

Рис. 6. Специальный код с поддержкой CSMA: а) для Spirit1 (пакет программного обеспечения X-CUBE-SUBG1); б) для S2-LP (пакет ПО STSW-S2LP-DK)

Пример применения

Давайте рассмотрим пример, который объясняет, как настроить протокол CSMA для обеспечения передачи без конфликтов.

В этом примере имеются три программы:

  • SDK_Csma_A – передатчик базовых пакетов со включенным CSMA;
  • SDK_Csma_B – приемник базовых пакетов;
  • SDK_Csma_TxCW – простой CW-передатчик (с непрерывной несущей) без включенного CSMA, то есть узел, который передает непрерывный сигнал.

Этот узел, радиосигнал которого настроен так же, как и в сценариях A и B, играет роль создателя несущей с целью организовать конфликт с пакетами A или B, если не используются политики множественного доступа.

Если узел SDK_Csma_TxCW отключен, пользователь должен наблюдать такое же поведение примера, как и SDK_BasicGeneric.

Включение узла SDK_Csma_TxCW во время передачи A приведет к остановке передачи A.

Поскольку A переключает светодиод LED1 для уведомления о выполненной передаче, пользователь увидит, что этот светодиод выключен все время, пока включен TxCW (и, конечно, B не примет сигнал, мигая своим LED1 из-за простоя приема Rx). Если TxCW выключен, A осуществляет передачу, и его LED1 постоянного меняет состояние (B будет получать пакеты и переключать светодиод LED2).

В программе пороговое значение RSSI настроено таким образом, что канал считается несвободным (флаг CS равен 1), если узел SDK_Csma_TxCW осуществляет передачу.

В программе CSMA настроен на постоянный режим, но пользователь может легко поменять это, отредактировав параметры настройки CSMA, заданные в начале Си-файлов.

Если пользователь настраивает CSMA для работы в непостоянном режиме, по достижении максимального числа циклов выдержки устройство будет вынуждено повторить передачу Tx.

Кроме того, можно открыть поток данных VirtualCom, определив в среде переменную предварительной обработки USE_VCOM. В этом случае и передатчик, и приемник будут выводить свой собственный буфер в терминал каждый раз, когда выполняется передача Tx или прием Rx.

Если передача Tx заблокирована механизмом CSMA, будет создано соответствующее сообщение и высветится обнаруженный уровень RSSI.

Настройка CSMA на примере (SDK_Csma_A)


/* Параметры настройки радио */

#define BASE_FREQUENCY 868.0e6

#define CHANNEL_SPACE 20e3

#define CHANNEL_NUMBER 0

#define MODULATION_SELECT FSK

#define DATARATE 38400

#define FREQ_DEVIATION 20e3

#define BANDWIDTH 100E3

/* Параметры настройки пакета */

#define PREAMBLE_LENGTH PKT_PREAMBLE_LENGTH_04BYTES

#define SYNC_LENGTH PKT_SYNC_LENGTH_4BYTES

#define SYNC_WORD 0x88888888

#define LENGTH_TPE PKT_LENGTH_VAR

#define LENGTH_WIDTH 8

#define CRC_MODE PKT_CRC_MODE_8BITS

#define CONTROL_LENGTH PKT_CONTROL_LENGTH_0BYTES

#define EN_ADDRESS S_DISABLE

#define EN_FEC S_DISABLE

#define EN_WHITENING S_ENABLE

/* Параметры настройки CSMA */

#define PERSISTENT_MODE_EN S_DISABLE

#define CS_PERIOD CSMA_PERIOD_64TBIT

#define CS_TIMEOUT 3

#define MAX_NB 5

#define BU_COUNTER_SEED 0xFA21

#define CU_PRESCALER 32

#define RSSI_THR -60

Измерения и осциллограммы

Все приведенные ниже графики взяты из тестов, выполненных на Spirit1 с использованием настроек по умолчанию из программного пакета XCUBE-SUBG1. Ниже приведены физические величины, которые мы будем измерять на основе этой конфигурации: 

– TCCA = 64 × TBit = 64/DATARATE = 64/38400 = 1,7 мс

– TListen= (CS_TIMEOUT + 1) × TCCA = 4 × TCCA = 6,7 мс

– RSSI_TH = -60 дБм

Тестовая установка изображена на рисунке 7.

Рис. 7. Настройка теста CSMA

Рис. 7. Настройка теста CSMA

Выходная мощность генератора сигналов устанавливается для обеспечения определенного уровня RSSI на стороне приемника. Генератор действует как источник помех с регулируемым усилением для проверки поведения CSMA. 

Если канал занят (источник помех)

Рис. 8. Осциллограмма для занятого канала

Рис. 8. Осциллограмма для занятого канала

Мы проверяем, что каждое состояние приема RX длится ровно TCCA, здесь этой продолжительности достаточно для измерения уровня RSSI (рисунок 8). Поскольку существует источник помех с более высокой мощностью, чем порог RSSI, мы можем видеть, что RSSI превышает пороговый сигнал в течение каждого временного окна приема RX. До подтверждения прерывания MAX_CAA_REACH наблюдается шесть окон приема RX, поскольку максимальное количество попыток установлено равным 5. Иными словами, мы можем проверить правильность длительности TCCA (1,7 мс).

Если канал свободен в непостоянном режиме

Рис. 9. Осциллограмма для постоянно свободного канала

Рис. 9. Осциллограмма для постоянно свободного канала

В случае, изображенном на рисунке 9, нет источника помех, поэтому передача может происходить после периода RX TListen, который в данном случае равен 4 TCCA (6,7 мс). Мы можем наблюдать прерывание TX_DATA_SENT, подтвержденное после того, как передача была выполнена правильно.

Канал занят в постоянном режиме

Рис. 10. Осциллограмма для постоянно занятого канала

Рис. 10. Осциллограмма для постоянно занятого канала

В постоянном режиме приемопередатчик будет оставаться в состоянии приема, пока уровень источника помех превышает пороговое значение (рисунок 10).

Вычисление максимальной длительности до срабатывания прерывания MAX_BO_CAA_REACH, пример для S2-LP

Данное вычисление производится на основе формулы расчета длительности выдержки (формула 2):

$$BO_{time}=T_{RCO}\times \left(6+rand\left(0:2^{(NB+1)} \right)\times \left(BU_{PRESC}+1 \right) \right)\qquad{\mathrm{(}}{2}{\mathrm{)}}$$

С учетом RCO 34,7 кГц: TRCO = 1/34,7e3 = 28,8 мкс.

Вот максимальные длительности для пяти последовательных циклов выдержки (MAX_NB_Z1 = 5):

BOtimeMAX (NB=0) = 28,8e-6 × (6+2×33) = 2,1 мс

BOtimeMAX (NB=1) = 28,8e-6 × (6+4×33) = 4,0 мс

BOtimeMAX (NB=2) = 28,8e-6 × (6+8×33) = 7,8 мс

BOtimeMAX (NB=3) = 28,8e-6 × (6+16×33) = 15,4 мс

BOtimeMAX (NB=4) = 28,8e-6 × (6+32×33) = 30,6 мс

Итак, максимальное время:

6×Tcca+ BOtimeMAX (NB=0) + BOtimeMAX (NB=1) + BOtimeMAX (NB=2) + BOtimeMAX (NB=3) +

+ BOtimeMAX (NB=4) + BOtimeMAX (NB=5) = 6×3,2 + 2,1 + 4,0 + 7,8 + 15,4 + 30,6 = 79,1 мс

Наши измерения (рисунок 11) показывают, что время выдержки BOtime MIN составляет около 2 мс.  Тогда минимальное время будет:

6×T + 5×BO MIN = 6×3,2 + 5×2 = 19,2 + 10 = 29,2 мс

Рис. 11. К вычислению максимальной длительности до прерывания

Рис. 11. К вычислению максимальной длительности до прерывания

Когда канал свободен, S2-LP находится в состоянии приема RX на протяжении 2 TCCA, то есть 6,4 мс. Обратите внимание, что диапазон может изменяться в зависимости от точной величины частоты RCO.

Расчетная максимальная длительность для частоты RCO 33,3 кГц равна 81,6 мс (6×3,2 + 62,4 ). Для частоты RCO 32 кГц аналогично – 84,1 мс (6×3,2 + 64,9).

Важные ограничения и оговорки для CSMA 

Ограничения, когда бит CSMA_ON установлен

  • Не запускайте режим приема RX. Избегайте стробирования командой приема RX, когда бит CSMA_ON равен 1. Этот бит должен быть установлен в 1 непосредственно перед стробированием командой на передачу TX, и должен быть установлен в 0, когда передача TX завершена.
  • Не включайте функцию CS Blanking. Избегайте установки бита CS BLANKING, когда CSMA включен. В этом случае две функции могут вызвать конфликт в цифровом автомате устройства. Всегда сохраняйте эти две функции взаимоисключающими.
  • CSMA и формат пакета стека. Функция CSMA может использоваться с пакетами STack, но без какой-либо функции LLP (автоматического подтверждения ACK, автоматической повторной передачи retx и так далее).
  • Время первой выдержки не случайно. Приемопередатчик не делает случайной выдержки при первой передаче. Но она может быть реализована программно: микроконтроллер может подождать случайный промежуток времени непосредственно перед тем как отправлять команду-строб на включение передачи Tx. При этом вероятность конфликта должна быть ниже.

При этом вероятность конфликта должна быть ниже.

Заключение

Использование режима CSMA позволяет обеспечить бесконфликтную работу множества источников (передатчиков), расположенных в одном и том же месте. Если передатчики расположены на большом удалении, а приемник находится в центре и принимает относительно слабый сигнал, алгоритм CSMA будет эффективно работать лишь для рядом расположенных передатчиков, чьи создающие помеху сигналы будут превосходить заданный порог RSSI. В любом случае использование CSMA повышает вероятность доставки пакетов путем уменьшения числа наложений посылок в эфире при случайном доступе к среде передачи.

Оригинал статьи

Перевод Ивана Филяева (STMicroelectronics) по заказу Компэл

•••

Наши информационные каналы

О компании ST Microelectronics

Компания STMicroelectronics является №1 производителем электроники в Европе. Компоненты ST широко представлены в окружающих нас потребительских товарах – от iPhone до автомобилей разных марок. Лидеры индустриального рынка выбирают компоненты ST за их надежность и выдающиеся технические параметры. В компании ST работает 48 000 сотрудников в 35 странах. Производственные мощности расположены в 12 странах мира. Более 11 тысяч сотрудников заняты исследованиями и разработками – инновационное лидерство ...читать далее

Товары
Наименование
S2-LPQTR (ST)
S2-LPCBQTR (ST)
S2-LPTXQTR (ST)
S2-LP (ST)
SPIRIT1QTR (ST)
SPIRIT1 (ST)
SPIRIT1QTR_0 (ST)