I’m trying to decode NRF24L01+ protocol using LimeSDR and GNU Radio. I’ve wrote a little sketch and uploaded it to Arduino:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9, 10);
const uint64_t addresses[] = { 0xAF1510009001LL, 0xAF1510009002LL };
void setup(void)
{
radio.begin();
radio.setChannel(108);
radio.setPALevel(RF24_PA_LOW);
radio.setDataRate(RF24_250KBPS);
radio.openWritingPipe(addresses[1]);
}
void loop(void)
{
uint8_t state[] = { 0x11, 0x22, 0x33, 0x44 };
delay(100);
radio.write( &state, sizeof(state) );
}
Afterwards I’ve recorded the transmission using LimeSDR and Gqrx. The program uses channel 108 which corresponds to 2508 Mhz. Here is how the signal looks like in Inspectrum:
The datasheet says that NRF24L01+ uses GFSK modulation. I believe what I see here are 16 bytes of the package: sender address, receiver address and the payload, every byte is GFSK-modulated.
Unfortunately I didn’t manage to convert it to ones and zeroes despite of the existence of many corresponding tutorials (e.g. one, two and three, the last one - in Russian). At this point my GNU Radio project looks like this, but I’ve tried many alternative approaches as well:
I believe the problem is that for some reason the signal’s frequency shifts a little bit for every byte so Quadrature Demod can’t slice it properly. However I’m new to SDR and I could be completely wrong.
Could you please give me a little piece of advice on how to proceed further?