nRF24L0+ default values in the register map

Good day,

I am unable to read  the default values in the register map. The values I get are not similar to the ones in the datasheet.

I am assuming the SPI between the PIC18F4550 and the nRF24L0+ is working fine, as the Status register and the Config register default values (0x0E and 0x08) are correct.

Below is the C code used to read the nRF24L0+

PORTDbits.RD0 = 0;// LED OFF

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_CONFIG);	//Read config

	 while(SSPSTATbits.BF == 0){};

	 NRFData[0] = 0xF0 ;
	 NRFData[1] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from Config

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[2] = SSPBUF;	//value in Config reg

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 1;	//LED ON

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_EN_AA);	//Read EN_AA

	 while(SSPSTATbits.BF == 0){};

	 NRFData[3] = 0xF1 ;
	 NRFData[4] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from EN_AA

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[5] = SSPBUF;	//value in EN_AA

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 0;

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_Rx_ADDR );	//Read REG_Rx_ADDR

	 while(SSPSTATbits.BF == 0){};

	 NRFData[6] = 0xF2 ;
	 NRFData[7] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from REG_Rx_ADDR

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[8] = SSPBUF;	//value in REG_Rx_ADDR

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 1;

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_SETUP_AW);	//Read REG_SETUP_AW

	 while(SSPSTATbits.BF == 0){};

	 NRFData[9] = 0xF3 ;
	 NRFData[10] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from REG_SETUP_AW

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[11] = SSPBUF;	//value in REG_SETUP_AW

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 0;

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_SETUP_RETR);	//Read REG_SETUP_RETR

	 while(SSPSTATbits.BF == 0){};

	 NRFData[12] = 0xF4 ;
	 NRFData[13] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from REG_SETUP_RETR

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[14] = SSPBUF;	//value in REG_SETUP_RETR

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 1;

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_RF_CH);	//Read REG_RF_CH

	 while(SSPSTATbits.BF == 0){};

	 NRFData[15] = 0xF5 ;
	 NRFData[16] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from REG_RF_CH

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[17] = SSPBUF;	//value in REG_RF_CH

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 0;

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_RF_SETUP);	//Read REG_RF_SETUP

	 while(SSPSTATbits.BF == 0){};

	 NRFData[18] = 0xF6 ;
	 NRFData[19] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from REG_RF_SETUP

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[20] = SSPBUF;	//value in REG_RF_SETUP

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 0;

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_OBSERVE_Tx);	//Read REG_OBSERVE_Tx

	 while(SSPSTATbits.BF == 0){};

	 NRFData[21] = 0xF7 ;
	 NRFData[22] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from REG_OBSERVE_Tx

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[23] = SSPBUF;	//value in REG_OBSERVE_Tx

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 1;

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_CD);	//Read REG_CD

	 while(SSPSTATbits.BF == 0){};

	 NRFData[24] = 0xF8 ;
	 NRFData[25] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from REG_CD

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[26] = SSPBUF;	//value in REG_CD

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 0;

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_Rx_PW_P0);	//Read REG_Rx_PW_P0

	 while(SSPSTATbits.BF == 0){};

	 NRFData[27] = 0xF9 ;
	 NRFData[28] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from REG_Rx_PW_P0

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[29] = SSPBUF;	//value in REG_Rx_PW_P0

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 1;

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_FIFO_STATUS);	//Read REG_FIFO_STATUS

	 while(SSPSTATbits.BF == 0){};

	 NRFData[30] = 0xFA ;
	 NRFData[31] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from REGFIFO_STATUS

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[32] = SSPBUF;	//value in REG_FIFO_STATUS

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 0;

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG |REG_DYNPD);	//Read REG_DYNPD

	 while(SSPSTATbits.BF == 0){};

	 NRFData[33] = 0xFB ;
	 NRFData[34] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from REG_DYNPD

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[35] = SSPBUF;	//value in REG_DYNPD

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 1;

	 SPI_CSN = LOW;	
	 Twenty5Micro_Sec_Delay();

	 SSPSTATbits.BF = 0;
     SSPBUF = (CMD_READ_REG | REG_FEATURE);	//Read REG_FEATURE

	 while(SSPSTATbits.BF == 0){};

	 NRFData[36] = 0xFC ;
	 NRFData[37] = SSPBUF; //Read status

	 SSPSTATbits.BF = 0;
 	 SSPBUF = 0x00;		//Provide clock to get the data from REG_FEATURE

	 while(SSPSTATbits.BF == 0){};	
	 NRFData[38] = SSPBUF;	//value in REG_FEATURE

     SPI_CSN = HIGH;
 	 Twenty5Micro_Sec_Delay();

	 PORTDbits.RD0 = 0;

	 user();

This is the data received via the USB port

Register              Actual      Expected   Address
CONFIG              0x08        0x08           0x00    F0
EN_AA                 0x08       0x3F           0x01    F1
EN_RXADDR     0x3F       0x03           0x02    F2
SETUP_AW        0x3F       0x03           0x03    F3
SETUP_RETR   0x03       0x03           0x04    F4
RF_CH                0x03       0x02            0x05    F5
RF_SETUP         0x03      0x0F           0x06    F6
OBSERVE_TX    0x03      0x00           0x08    F7
CD                        0x03      0x00           0x09    F8
Rx_PW_P0         0x00       0x00            0x11    F9
FIFO_STATUS    0xC2       0x11            0x17    FA
DYNDP                0xC5      0x00           0x1C    FB
FEATURE            0xC5      0x00           0x1D    FC

below are the break out boards I am using, I tried both the nRF24L0 and nRF24L0+. I get the same results

Related