» » » Трансивер 2,4 ГГц Nordic Semiconductor nRF24L01. Перевод таблиц даташита, пояснения и коды для организации сети

 
 
 

Трансивер 2,4 ГГц Nordic Semiconductor nRF24L01. Перевод таблиц даташита, пояснения и коды для организации сети

Разместил erbol 9 июня 2016. Просмотров: 3491

Привет, датагорцы!
Выкладываю перевод таблиц из спецификации nRF24L01+, файл с пояснениями и исходники кодов, необходимые для организации радиосвязи между двумя трансиверами nRF24L01+.
Трансивер 2,4 ГГц Nordic Semiconductor nRF24L01. Перевод таблиц даташита, пояснения и коды для организации сети
Трансивер 2,4 ГГц Nordic Semiconductor nRF24L01. Перевод таблиц даташита, пояснения и коды для организации сети Трансивер 2,4 ГГц Nordic Semiconductor nRF24L01. Перевод таблиц даташита, пояснения и коды для организации сети
Трансивер 2,4 ГГц Nordic Semiconductor nRF24L01. Перевод таблиц даташита, пояснения и коды для организации сети Трансивер 2,4 ГГц Nordic Semiconductor nRF24L01. Перевод таблиц даташита, пояснения и коды для организации сети


Условия организации радиосвязи между двумя трансиверами

Для того, чтобы два трансивера могли «увидеть» друг друга, необходимо обеспечить идентичность следующих их параметров:
1. Несущая частота (регистр RF_CH, адрес – 0x05).
2. Скорость передачи данных (биты RF_DR_LOW, RF_DR_HIGH регистра RF_SETUP, адрес – 0x06)
3. RX-адрес приёмника (регистры RX_ADDR_P0-P5, адресa – 0x0A-0x0F) и TX-адрес передатчика (регистр TX_ADDR, адрес – 0x10). Кроме того, если используется авто-подтверждение, то RX_ADDR_P0 и TX_ADDR передатчика должны быть идентичны RX-адресу приёмника.
4. Ширина адреса (регистр SETUP_AW, адрес – 0x03)
5. Значение регистра RX_PW_Pn (адресa – 0x11-0x16) приёмника и длина отправляемых передатчиком данных. Последняя определяется количеством байт, записываемых после команды W_TX_PAYLOAD внутри одного передёргивания вывода CSN. Т.е., если предполагается обмен, к примеру, двухбайтовыми данными, то в регистр RX_PW_Pn приёмника записывается 2, а загрузка в стек TX_PLD передатчика производится следующим образом:
  cbi(nRF_PORT, CSN_pin);
  SPI_byte(W_TX_PAYLOAD);
  SPI_byte(byte_1);
  SPI_byte(byte_2);
  sbi(nRF_PORT, CSN_pin);     

6. В случае, если по одному и тому же каналу предполагается прём данных разной длины, выхода два:
а) Привести данные к единой, самой большой длине.
б) Разрешить для канала динамическую длину принимаемых данных (ДДПД). Для этого необходимо разрешить ДДПД глобально (бит EN_DPL регистра FEATURE адрес – 0x1D) и локально (регистр DYNPD адрес – 0x1С). Ширина поступивших данных определяется командой R_RX_PL_WID.

Дополнительные условия для работы приёмника

1. По сбросу каналы приёма 5-2 закрыты, поэтому для их активации необходимо записать 1 в биты ERX_P5-2 регистра EN_RXADDR (адрес – 0x02).
2. Запись команды W_REGISTER возможна только в режимах Power down и Standby, поэтому, прежде, чем менять содержимое регистров трансивера, находящегося в режиме приёмника (вывод CE – в 1), нужно, как минимум, сбросить вывод CE в 0.

Описание базовых функций трансивера (файл nRF_base.h)

Большинство регистров nRF24L01+ - восьми-битные, поэтому для работы с ними можно использовать функции nRF_write_byte() и nRF_read_byte().
Запись/чтения регистров большей длины производится с помощью функций nRF_write_array() и nRF_read_ array (). Для этого необходимо создать массив соответствующей длины и передать в функцию имя регистра/команды, имя массива, размер массива. Например, запись в FIFO передатчика трех-байтного слова происходит так:
uint8_t payload[3];
nRF_write_array(W_TX_PAYLOAD, payload, sizeof(payload));

а чтение из FIFO приёмника так:
uint8_t payload[3];
nRF_read_array(R_RX_PAYLOAD, payload, sizeof(payload));

Можно использовать указанные функции и для работы с одним байтом. В этом случае создается массив размером 1
uint8_t config[1] = (1<<EN_CRC) | (1<<PWR_UP) | (1<<PRIM_RX);
nRF_read_array(R_RX_PAYLOAD, config, sizeof(config));

либо просто переменная, но тогда в функции перед именем переменной ставится символ взятия адреса – амперсанд (&):
uint8_t config = (1<<EN_CRC) | (1<<PWR_UP) | (1<<PRIM_RX);
nRF_read_array(R_RX_PAYLOAD, &config, sizeof(config));


Описание функций трансивера (файл nRF24L01.h)

nRF_soft_reset()
В nRF24L01+ не предусмотрен аппаратный сброс, поэтому при сбросе управляющего МК в регистрах трансивера могут оставаться ранее записанные данные, что приведёт к сбоям в работе. Данная функция записывает в регистры nRF24L01+ значения столбца «Reset Value» карты регистров из даташита. Включена в состав функции nRF_init().

nRF_init()
Инициализирует протокол SPI, выдерживает 100 мс, необходимые согласно даташита трансивера и запускает функцию nRF_soft_reset().

Организация и топология сети

Приведённых функций достаточно для организации сети. Количество трансиверов в сети практически не ограничено, поскольку можно варьировать частоту (126 комбинаций), адреса и их размер, длину передаваемых/принимаемых данных.

В качестве одной ячейки сети можно рассматривать цепочку центр управления - посредник – управляемые модули. В этом случае, если не предусматривать обратную связь, трансивер ЦУ настраивается как приёмник, трансиверы модулей как передатчики, а трансивер посредника работает попеременно приёмником (принимая данные от модулей) и передатчиком (передавая данные ЦУ).

Файлы

Все таблицы по nRF24L01+ на русском:
Файловый сервис доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.


Исходники для nRF24L01+
Файловый сервис доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.


Спасибо за внимание!

Об авторе

Ербол (erbol)
Актобе, Казахстан
Мне 50 лет. Родился и вырос в г. Актюбинск (ныне - Актобе), Казахстан. Женат, воспитываю четверых прекрасных детей.

С программированием и электроникой имею может и не отдаленные, но весьма эпизодические отношения: в далекие и бурные 90-е годы аж прошлого века посчастливилось участвовать в автоматизации экспериментальной установки с использованием микропроцессорного комплекта КР580.

А пару лет назад мои сорванцы вдруг заинтересовались микроконтроллерами. Пришлось из дальних уголков памяти вытаскивать свои старые познания и стряхивать с них пыль.
 

Понравилось? Палец вверх!

  • всего лайков: 32

Поделись с друзьями!


Связанные материалы:


Программная реализация протокола I2C на AVR в CodeVisionAVR

Пару лет назад, изучая Atmega8, я захотел программно реализовать работу с устройствами...

Визуализация для микроконтроллера. Часть 1. OLED дисплей 0.96" (128х64) на SSD1306

Добрый день, друзья! Эта статья открывает цикл, посвящённый средствам визуального отображения...

Беспроводной канал связи 2,4 ГГц на базе трансивера nRF24L01+ от Nordic

Приветствую всех настоящих и будущих поклонников отладочной платы Arduino! Сегодня,...

Беспроводной канал связи 2,4 ГГц на базе трансивера nRF24L01+ от Nordic

Продолжаем разговор. Как-то раз мы с пацанами решили соединить радио-модуль «nRF24L01+»...

Беспроводной канал связи 2,4 ГГц на базе трансивера nRF24L01+ от Nordic

Доброго вам дня, уважаемые граждане и гости Датагор.ру - этого замечательного сообщества...

Несколько функций для програмной реализации протокола I2C на AVR

Добрый день, дорогие друзья! Решил поделиться с вами несколькими функция для работы...

Програмирование в AVR Studio 5 с самого начала. Часть 8

Перейдем к изучению встроенных таймеров. Изучение прерываний и особенно таймеров в...

Сделай сам универсальный контроллер управления 7-сегментными LED индикаторами по

Занялся я конструированием нового устройства и встал вопрос — на чем отображать данные....

Програмирование в AVR Studio 5 с самого начала. Часть 6

Продолжим разбор теоретических основ, без которых невозможно полноценное создание программ....

Програмирование в AVR Studio 5 с самого начала. Часть 4

Сегодня рассмотрим программу “бегущих огней” и “бегущих теней”. Примеры “бегущих огней” можно найти...

Микроконтроллерный регулятор мощности - 2

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

Микроконтроллер управляет дисплеем от телефона Siemens!

Многие радиолюбители собирают для себя какие-то конструкции. Иногда простейшие, иногда очень...
Информация
Вы не можете участвовать в комментировании. Вероятные причины:
— Администратор остановил комментирование этой статьи.
— Вы не авторизовались на сайте. Войдите с паролем.
— Вы не зарегистрированы у нас. Зарегистрируйтесь.
— Вы зарегистрированы, но имеете низкий уровень доступа. Получите полный доступ.