Почему канал NRF24L01+ имеет 5-байтовый адрес
Я изучаю модуль NRF24L01+. Я вижу, что только 6 приемников могут быть связаны с передатчиком через их уникальные трубы. Чего я не могу понять, так это почему идентификатор канала (адрес) имеет 5 длинных байтов.
Как по мне, 1 байта было бы более чем достаточно. Какова цель 5-байтового адреса в 5 двунаправленных коммуникациях?
@zhekaus, 👍0
Обсуждение2 ответа
5 байтов = более 1 миллиона миллионов уникальных адресов, хотя не все адреса (как указано в техническом описании nRF24L01) рекомендуются, например, потому что они имитируют преамбулу пакета nRF.
Так для чего нужны адреса?
Цель состоит в том, чтобы обеспечить прием радиопередач на предполагаемом радиомодуле. Рассмотрим радиосеть, в которой у вас есть 1 передатчик (TX) и 3 приемника (RX) в пределах досягаемости друг друга, и все они используют одну и ту же радиочастоту (канал). Теперь все приемники обнаружат сообщение, отправленное передатчиком, но будут действовать только в соответствии с ним, например, поднять флаг прерывания, если адреса TX и RX совпадают. Чтобы избежать хаотичной связи, ошибочных пакетов или конфликтов в эфире, вам необходимо, чтобы каждый получатель имел уникальный адрес. Рассматривайте их как почтовый адрес. У вас должно быть интуитивное представление о том, что произойдет с вашей почтой, если и у вас, и у вашего соседа будет один и тот же адрес. Поскольку полоса 2,4 ГГц может быть чрезвычайно загружена в общественных местах трафиком WiFi и Bluetooth (кстати, Bluetooth основан на протоколе nRF), наличие 40 бит адреса кажется вполне разумным, так как вероятность случайного совпадения адресов почти равна нулю. нуль.
Так что же такое каналы?
Если вы прочтете таблицу данных nRF, вы увидите, что в режиме TX радио может отправлять только один адрес. В режиме RX радио будет прослушивать сообщения по 6 различным адресам. Почему 6? Это, вероятно, произвольно - баланс между распределением регистровой памяти, наиболее вероятным количеством модулей nRF, используемых одновременно, и вероятностью более эффективных сетевых топологий (таких как сети звезда/дерево), которые не требуют огромного количества каналов. Канал представляет один из этих 6 адресов, по которым радиостанция может получать и отправлять сообщения, а также пакет ACK, если он запрошен. Вот и все.
Я надеюсь, что этот ответ устранит любую путаницу между адресами nRF и каналами.
Я вижу, что к передатчику можно подключить только 6 приемников,
Это зависит от того, как вы определяете термин "подключен". Только один передатчик может одновременно отправлять данные на 6 других устройств (по одному на каждую трубу). Однако это делается очень редко.
На практике для связи с тысячами устройств требуется не более двух каналов.
В целом:
- Канал 0 – это канал, по которому вы отправляете данные.
- Канал 1 – это канал, по которому вы прослушиваете входящие данные.
Вы всегда должны отправлять по каналу 0, потому что это канал, по которому будут получены любые сообщения ACK (установите адрес канала 0 на адрес, на который вы отправляете).
Если канал 1 настроен на адрес получения, вы всегда готовы получать данные откуда угодно.
Передатчику не нужно знать о каждом другом устройстве — только об одном устройстве, на которое он отправляет данные в любой момент времени.
Вы можете настроить несколько адресов в других каналах, если хотите получать данные, которые отправляются на разные адреса, хотя существует не так много случаев, когда вы хотели бы это сделать (например, если вы хотите обмениваться данными с разной шириной канала с разными группами узлов, эффективно соединяя две отдельные сети).
Подводя итог:
- Адрес канала 0 постоянно меняется в зависимости от того, кому вы отправляете сообщения (при условии, что вы используете автоматическое подтверждение)
- Адрес канала 1 является статическим и является вашим адресом, на который вы будете получать сообщения.
Чтобы проиллюстрировать это больше:
- Узел A имеет адрес "NODEA".
- Узел B имеет адрес "NODEB".
- Узел C имеет адрес "NODEC".
- Узел A имеет адрес канала 1, установленный как "NODEA".
- Узел B имеет адрес канала 1, установленный как "NODEB".
- Узел C имеет адрес канала 1, установленный как "NODEC".
- Узел A устанавливает для канала 0 адрес "NODEC"
- Узел A отправляет пакет по каналу 0
- Узел C получает пакет по каналу 1, так как он адресован "NODEC"
- Узел C отвечает ACK на свой собственный адрес ("NODEC").
- Узел A получает ACK по каналу 0, так как его адрес "NODEC".
- Узел A устанавливает адрес канала 0 в "NODEB"
- Узел A отправляет пакет по каналу 0
- Узел B получает пакет по каналу 1, так как он адресован "NODEB"
- Узел B отвечает подтверждением на свой адрес ("NODEB").
- Узел A получает ACK по каналу 0, так как его адрес "NODEB".
в чем тогда разница между каналами и адресами?, @zhekaus
Труба — это то, через что вы общаетесь. Адрес — это место, откуда вы общаетесь или куда., @Majenko
- вопрос по трубке nRF24L01
- Как подключить NodeMCU к NRF24L01
- Переключение каналов NRF24l01
- Использование функции уровня сигнала модуля nRF24L01
- Как автоматически сбросить nrf24l01+ с кодом?
- NRF24L01+ PA не работает с Arduino Mega (работает с Nano)
- Пустое значение не игнорируется, как должно быть.
- Не получаем данные от NRF24L01
Я вижу, что к передатчику можно подключить только 6 приемников
?, @Maximilian Gerhardt@MaximilianGerhardt, в каждом достойном учебнике, который я нашел. В документах также: http://tmrh20.github.io/RF24/classRF24.html#a9edc910ccc1ffcff56814b08faca5535, @zhekaus
что бы вы сделали, если бы у вас было 100 кластеров по 6 приемников каждый рядом друг с другом?, @jsotola
В таблице данных (https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf) на стр. 54 показано 6 каналов, и каждый канал содержит 5-байтовый (макс.) адрес; (фактически адреса RX 2-6 изменяют только последние 8 бит канала1)). Таким образом, у вас может быть 6 партнеров по связи, и каждый из них идентифицируется 40-битным адресом, то есть 2^40 возможностей. Это сводится к адресному пространству (для адресов) и аппаратным ограничениям (количество каналов). Если бы адресное пространство было слишком маленьким, у вас были бы конфликты адресов (два или более модулей имеют одинаковый адрес), что плохо., @Maximilian Gerhardt
@jsotola, этот вопрос меня тоже беспокоит. как мне сгенерировать эти идентификаторы каналов., @zhekaus
использовать свой день рождения, @jsotola