nrf24 scan

This commit is contained in:
RogueMaster
2022-12-14 21:27:18 -05:00
parent b8c067ddd6
commit d6c66c42dd
8 changed files with 1122 additions and 1041 deletions
+49 -15
View File
@@ -3,8 +3,55 @@
An [NRF24](https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf) driver for the [Flipper Zero](https://flipperzero.one/) device. The NRF24 is a popular line of 2.4GHz radio transceivers from Nordic Semiconductors.<br>
NRF24L01+ Enhanced ShockBurst packet decoder example using Python: [nrf24_packet_decoder.py](https://raw.githubusercontent.com/vad7/nrf24scan/master/nrf24_packet_decoder.py)<br>
<br>
Flipper Zero FAP file: [Nrf24_Scanner.fap](https://raw.githubusercontent.com/vad7/nrf24scan/master/Nrf24_Scanner.fap)<br>
Flipper Zero FAP file: [Nrf24_Scanner.fap](https://raw.githubusercontent.com/vad7/nrf24scan/master/Nrf24_Scanner.fap)
<br><br>
___________________________________________________________________________
<br>
<b>Приложение для Flipper Zero, читающее эфир на радиомодулях nRF24L01.</b><br>
Выбор пукта меню - стрелки вверх/вниз, стрелки влево/вправо либо изменют настройки либо управляют видом списка, кнопка ОК либо выбирает режим (короткое нажатие), либо выполняет дополнительное действие (длительное нажатие).<br><br>
<img src="https://raw.githubusercontent.com/vad7/nrf24scan/master/Screenshot-1.png"><br>
По умолчанию при запуске включается режим поиска (sniff) - ищутся все валидные пакеты с корректным CRC.<br>
Размер CRC и тип пакета (Enhanced ShockBurst или нет) задается. CRC может быть или 1 или 2 байта.<br>
Так как пакеты читаются в RAW формате, то длина полезной нагрузки не может быть больше 23 байт, пакеты с большей длинной не будут пойманы.<br>
Изменение режима sniff/scan - стрелками на пункте Scan.<br><br>
Режим сканирования (scan) - чтение пакетов по заданным в настройках мак адресам и настройкам.<br>
На начальном экране в режиме чтения можно загрузить файл настроек (по умолчанию загружается settings.txt из папки nrf24_scanner на SD карте).<br>
В файле настройке задаются адреса (максимум 6) в шестнадцатеричном виде (старший байт - первый), длина адреса вычисляется по P0.<br>
Остальные настройки можно поменять интерактивно<br>
Настройки сохраняются длительным нажатием на ОК.<br><br>
<b>Описание настроек:</b><br>
Ch - номер канала.<br>
Rate - скорость передачи данных<br>
Next Ch time - через сколько секунд будет увеличен номер канала<br>
Log - выбор режима авто сохраннения в файлы log-xx.txt. Yes - сохранять в новый файл при заполнении буфера в 99 записей, Append - добавлять в последний файл, Clear - только очистка буфера<br><br>
В пунктах Ch, Rate, Next при нажатии OK меняются параметры связи:<br>
ESB - Enhanced ShockBurst (включена автоотправка подтверждения получения пакета, работающий приемник тоже попытается это сделать, возможны коллизии)<br>
DPL - Динамический пакет<br>
CRC1/2 - Размер CRC в байтах<br>
Payload - размер пакета в байтах<br>
<br>
<b>Просмотр принятых пакетов</b><br><br>
<img src="https://raw.githubusercontent.com/vad7/nrf24scan/master/Screenshot-2.png">
<br>
В пункте "Start scan/sniff" можно выбрать стрелками сканировать и смотреть или просто смотреть (view).<br>
Если в файле настройки было несколько адресов, то первая цифра - номер канала (pipe) от 0 до 5.<br>
Стрелки - перемещение по списку и горизонтальное скролирование<br>
OK - отправка пакета<br>
Длительное нажатие OK - вход в режим просмотра адресов и включения декодирования заголовка ESB пакета и CRC.<br>
При декодировании заголовка (PCF) - первые 2 цифры - длина пакета в hex или 33, если длина пакета фиксирована<br>
3-я цифра - PID (2bit) << 1 + флаг NO_ACK<br>
Если включен режим декодирования CRC, то по всему пакету ищется подходящая CRC и подчеркивается в списке, а так же вместо ":" выводится "=" после номера записи в буфере<br>
<br>
<img src="https://raw.githubusercontent.com/vad7/nrf24scan/master/Screenshot-3.png">
<br>
<img src="https://raw.githubusercontent.com/vad7/nrf24scan/master/Screenshot-4.png">
<br>
<img src="https://raw.githubusercontent.com/vad7/nrf24scan/master/Screenshot-5.png">
<br>
<br>
_________________________________________________________________________________
<br>
<br>
Settings file (default addr.txt) format:<br>
Rate: 0/1/2 - rate in Mbps (=0.25/1/2)<br>
@@ -26,22 +73,9 @@ In the list of the received:<br>
Press OK - send the packet,<br>
Long press OK - view addresses.<br>
<br>
<br>
<br>
<img src="https://raw.githubusercontent.com/vad7/nrf24scan/master/Screenshot-1.png">
<br>
<img src="https://raw.githubusercontent.com/vad7/nrf24scan/master/Screenshot-2.png">
<br>
<img src="https://raw.githubusercontent.com/vad7/nrf24scan/master/Screenshot-3.png">
<br><br>
Decode the Packet Control Field and check CRC (long press OK in the list and then press '<' / '>').<br>
ESB (Enhanced Shockburst) option must be turned off.
Press '>' to decode CRC.<br>
<br>
<img src="https://raw.githubusercontent.com/vad7/nrf24scan/master/Screenshot-4.png">
<br>
<img src="https://raw.githubusercontent.com/vad7/nrf24scan/master/Screenshot-5.png">
<br>
1 - pipe #<br>
2 - Payload length (for valide packet must be 1..20 or 33 hex)<br>
3 - PID (2 bit) + NO_ACK (1 bit)<br>
@@ -1,4 +0,0 @@
Rate: 1
Ch: 0
P0: 0055
P1: 00AA
@@ -6,4 +6,5 @@ CRC: 2
P0: C8C8C0
P1: C8C8C1
P2: C2
P2: C3
P3: C3
P4: E5
@@ -525,4 +525,11 @@ uint8_t nrf24_find_channel(
}
return ch;
}
uint8_t nrf24_set_mac(uint8_t mac_addr, uint8_t *mac, uint8_t mlen)
{
uint8_t addr[5];
for(int i = 0; i < mlen; i++) addr[i] = mac[mlen - i - 1];
return nrf24_write_buf_reg(nrf24_HANDLE, mac_addr, addr, mlen);
}
@@ -309,6 +309,9 @@ void nrf24_configure(
bool noack,
bool disable_aa);
// Set mac address (MSB first), Return: Status
uint8_t nrf24_set_mac(uint8_t mac_addr, uint8_t *mac, uint8_t mlen);
/** Configures the radio for "promiscuous mode" and primes it for rx
* This is not an actual mode of the nrf24, but this function exploits a few bugs in the chip that allows it to act as if it were.
* See http://travisgoodspeed.blogspot.com/2011/02/promiscuity-is-nrf24l01s-duty.html for details.
File diff suppressed because it is too large Load Diff
+9 -8
View File
@@ -9,18 +9,18 @@
#include <notification/notification_messages.h>
typedef enum {
EventTypeTick,
EventTypeKey,
EventTypeTick,
EventTypeKey,
} EventType;
typedef struct {
EventType type;
InputEvent input;
EventType type;
InputEvent input;
} PluginEvent;
typedef struct {
int x;
int y;
int x;
int y;
} PluginState;
typedef struct {
@@ -28,7 +28,8 @@ typedef struct {
FuriMessageQueue* event_queue;
PluginState* plugin_state;
ViewPort* view_port;
Storage* storage;
NotificationApp* notification;
Storage* storage;
NotificationApp* notification;
uint8_t* log_arr;
} Nrf24Scan;
+6
View File
@@ -0,0 +1,6 @@
SNIFF
Rate: 1
Ch: 2
ESB: 1
CRC: 2
P0: 00AA