Hello,
I'm using the nrf52840 to try and receive a byte from the nRF24l01+.
After configuring, I trigger TASKS_RXEN, but never receive EVENTS_RXREADY.
Here is the code:
void radio_config(void) { *((uint32_t *)(RADIO_BASE + RADIO_POWER)) = 0; *((uint32_t *)(RADIO_BASE + RADIO_POWER)) = 1; *((uint32_t *)(RADIO_BASE + RADIO_FREQUENCY)) = 2; *((uint32_t *)(RADIO_BASE + RADIO_SHORTS)) = 0; *((uint32_t *)(RADIO_BASE + RADIO_TXPOWER)) = 0x8; // 8 dBm *((uint32_t *)(RADIO_BASE + RADIO_MODE)) = 0; *((uint32_t *)(RADIO_BASE + RADIO_PREFIX0)) = 0xE7; *((uint32_t *)(RADIO_BASE + RADIO_BASE0)) = 0xE7E7E7E7; *((uint32_t *)(RADIO_BASE + RADIO_RXADDRESSES)) = 1; // LFLEN=6, S0LEN=0, S1LEN=3, S1INCL=1, CILEN=0, PLEN=0, CRCINC=0, TERMLEN=0 *((uint32_t *)(RADIO_BASE + RADIO_PCNF0)) = (6 << RADIO_PCNF0_LFLEN) | (0 << RADIO_PCNF0_S0LEN) | (3 << RADIO_PCNF0_S1LEN) | (1 << RADIO_PCNF0_S1INCL) | (0 << RADIO_PCNF0_CILEN) | (0 << RADIO_PCNF0_PLEN) | (0 << RADIO_PCNF0_CRCINC) | (0 << RADIO_TERMLEN); // MAXLEN=32, STALEN=0, BALEN=4, ENDIAN=(0?), WHITEEN=(0?) // *((uint32_t *)(RADIO_BASE + RADIO_PCNF1)) = 0x00040040; *((uint32_t *)(RADIO_BASE + RADIO_PCNF1)) = (32 << RADIO_PCNF1_MAXLEN) | (0 << RADIO_PCNF1_STATLEN) | (4 << RADIO_PCNF1_BALEN) | (0 << RADIO_PCNF1_ENDIAN) | (0 << RADIO_PCNF1_WHITEEN); *((uint32_t *)(RADIO_BASE + RADIO_TIFS)) = 150; *((uint32_t *)(RADIO_BASE + RADIO_CRCPOLY)) = (1 << 8) | (1 << 2) | (1 << 1) | (1 << 0); *((uint32_t *)(RADIO_BASE + RADIO_CRCCNF)) = 1; *((uint32_t *)(RADIO_BASE + RADIO_CRCINIT)) = 0xFF; *((uint32_t *)(RADIO_BASE + RADIO_PACKETPTR)) = (uint32_t)RADIO_DMA_BASE; } void radio_start(void) { *((uint32_t *)(RADIO_BASE + RADIO_EVENTS_READY)) = 0; // start the rx ramp up *((uint32_t *)(RADIO_BASE + RADIO_TASKS_RXEN)) = 1; // receiver mode, begin rx ramp up gpio_write_n(LED1, 1); while (*((uint32_t *)RADIO_BASE + RADIO_EVENTS_RXREADY) == 0); gpio_write_n(LED2, 1); }
radio_start() is called immediately after radio_config().
I prefer not to use the SDK... Sorry... I've verified all the register addresses and bit definitions with the manual, so I don't think that's the problem.
One strange thing is that if I trigger TASKS_TXEN, I do receive EVENTS_TXREADY. I've also verified by reading the STATE register that after triggering RXEN, the state remains in RXRU, whereas if I trigger TXEN, the state moves to TXIDLE.
EDIT: Need to make a correction. The value in the state register is 2, as expected for RXIDLE, but the event still isn't received.