I want to send a one byte payload from the nrf24l01+ (Sparkfun dev board), to nrf52840 DK using the example esb_prx. How should I configure the nrf24 registers to make this happen? Also, what changes do I have to make in the esb_prx example? I've been trying for quite a long time now. I use GCC to compile and program using nrfconnect.
EDIT: Really my preference would be to do this without the SDK, using only the RADIO peripheral. Here is my configuration of the radio:
// TODO incorrect logic for clearing bits void radio_config(void) { // power on the radio peripheral *((uint32_t *)(RADIO_BASE + RADIO_POWER)) = 0; *((uint32_t *)(RADIO_BASE + RADIO_POWER)) = 1; *((uint32_t *)(RADIO_BASE + RADIO_FREQUENCY)) = 2; // no shorts *((uint32_t *)(RADIO_BASE + RADIO_SHORTS)) = 0; // tx output power *((uint32_t *)(RADIO_BASE + RADIO_TXPOWER)) = 0x8; // 8 dBm // Nordic 1 Mbit mode *((uint32_t *)(RADIO_BASE + RADIO_MODE)) = 0; // Configure the address *((uint32_t *)(RADIO_BASE + RADIO_PREFIX0)) = 0xE7; *((uint32_t *)(RADIO_BASE + RADIO_BASE0)) = 0xE7E7E7E7; *((uint32_t *)(RADIO_BASE + RADIO_RXADDRESSES)) = 1; // enable reception on addr 0 // 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); // interframe spacing *((uint32_t *)(RADIO_BASE + RADIO_TIFS)) = 150; // y = x8+x2+x+1 *((uint32_t *)(RADIO_BASE + RADIO_CRCPOLY)) = (1 << 8) | (1 << 2) | (1 << 1) | (1 << 0); // LEN=1, SKIPADDR=0 *((uint32_t *)(RADIO_BASE + RADIO_CRCCNF)) = 1; // initial = 0xFF *((uint32_t *)(RADIO_BASE + RADIO_CRCINIT)) = 0xFF; // // store EASYDMA_BASE address in PACKETPTR register *((uint32_t *)(RADIO_BASE + RADIO_PACKETPTR)) = (uint32_t)RADIO_DMA_BASE; }
And here is my configuration on the nRF24L01+:
CONFIG: 0x5a EN_AA: 0x01 EN_RXADDR: 0x01 SETUP_AW: 0x03 SETUP_RETR: 0x01 RF_CH: 0x02 RF_SETUP: 0x06 STATUS: 0x0e OBSERVE_TX: 0x00 RPD: 0x00 RX_ADDR_P0: 0xe7e7e7e7e7 RX_ADDR_P1: 0xc2c2c2c2c2 RX_ADDR_P2: 0xc3 RX_ADDR_3: 0xc4 RX_ADDR_P4: 0xc5 RX_ADDR_P5: 0xc6 TX_ADDR: 0xe7e7e7e7e7 RX_PW_P0: 0x01 RX_PW_P1: 0x00 RX_PW_P2: 0x00 RX_PW_P3: 0x00 RX_PW_P4: 0x00 RX_PW_P5: 0x00 FIFO_STATUS: 0x11 DYNPD: 0x00 FEATURE: 0x01