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