NRF24L01+ARV

Hi brennen

I transplanted some code from MIRF V2 according to what you have told me .

Now the transmitter can give the TX_DS interrupt but the reciever still can’t gets the RX_DR interrupt and can’t get any data in the RX FIFO.

I am able to communicate through SPI to the nrf24L01.I read Internal regs that i used and they are set right but the reciever wont recieve any bytes.

Please respond if you have any clue. I’m really stuck at the moment!

These are part of code.

tx mode:

void config_ptx(void) 
{  
      
    //config PTX 
        CE_0; 
        CSN_0; 
        SPI_MasterTransmit(0x20); 
        SPI_MasterTransmit(0x38); 
        CSN_1; 
        
        CSN_0; 
        SPI_MasterTransmit(0x24); 
        SPI_MasterTransmit(0x00); 
        CSN_1; 
        
        CSN_0; 
        SPI_MasterTransmit(0x23); 
        SPI_MasterTransmit(0x03); 
        CSN_1; 

        CSN_0; 
        SPI_MasterTransmit(0x26); 
        SPI_MasterTransmit(0x07); 
        CSN_1; 
        
        CSN_0; 
        SPI_MasterTransmit(0x25); 
        SPI_MasterTransmit(0x02); 
        CSN_1; 

        CSN_0; 
        SPI_MasterTransmit(0x30); 
        SPI_MasterTransmit(0xE7); 
        SPI_MasterTransmit(0xE7); 
        SPI_MasterTransmit(0xE7); 
        SPI_MasterTransmit(0xE7); 
        SPI_MasterTransmit(0xE7); 
        CSN_1; 

        CSN_0; 
        SPI_MasterTransmit(0x21); 
        SPI_MasterTransmit(0x00); 
        CSN_1; 
        
        CSN_0; 
        SPI_MasterTransmit(0x27); 
        SPI_MasterTransmit(0x7E); 
        CSN_1; 
        
        CSN_0; 
        SPI_MasterTransmit(0x20); 
        SPI_MasterTransmit(0x5A); 
        CSN_1;  
                
} 
void main(void) 
{ 
    unsigned char i; 
    SPI_MasterInit(); 
    config_ptx(); 
    while(1) 
    {        
        while (1)  
        { 
            transmit_data(); 
            LED = 1; 
            delay_ms(10); 
            LED = 0;            
            delay_ms(500);            
        }  
    } 
} 
void transmit_data(void) 
{ 
    unsigned char i, data, cmd;    
    
    CSN_0; 
   //clear previous ints 
     SPI_MasterTransmit(0x27); 
    SPI_MasterTransmit(0x7E); 
    CSN_1; 
    CSN_0; 
    
   //PWR_UP = 1 
      SPI_MasterTransmit(0x20); 
    SPI_MasterTransmit(0x3A); 
    CSN_1; 
    CSN_0; 
    
    //clear TX fifo 
    //the data sheet says that this is supposed to come up 0 after POR, but that doesn't seem to be the case 
      SPI_MasterTransmit(0xE1); 
    CSN_1; 
    CSN_0; 
    
   //4 byte payload 
      SPI_MasterTransmit(0xA0); 
      SPI_MasterTransmit(0x34); 
     SPI_MasterTransmit(0x33); 
      SPI_MasterTransmit(0x32); 
     SPI_MasterTransmit(0x31); 
    CSN_1; 
    
    //Pulse CE to start transmission 
    CE_1; 
    delay_ms(1); 
    CE_0; 
}

rx mode :

void config_prx(void) 
{        
        CSN_1; 
        delay_us(10); 
        CSN_0; 

        CE_0; 
        SPI_MasterTransmit(0x20); 
        SPI_MasterTransmit(0x39); 
        CSN_1; 
        
       
        CSN_0; 
        SPI_MasterTransmit(0x21); 
        SPI_MasterTransmit(0x00); 
        CSN_1; 
    
        CSN_0; 
        SPI_MasterTransmit(0x23); 
        SPI_MasterTransmit(0x03); 
        CSN_1; 
       
        CSN_0; 
        SPI_MasterTransmit(0x26); 
        SPI_MasterTransmit(0x07); 
        CSN_1; 
        
        CSN_0; 
        SPI_MasterTransmit(0x31); 
        SPI_MasterTransmit(0x04); //接收4字节有效数据 
     CSN_1; 
        
        CSN_0; 
        SPI_MasterTransmit(0x25); 
        SPI_MasterTransmit(0x02); 
        CSN_1; 
        
        CSN_0; 
        SPI_MasterTransmit(0x30); 
        SPI_MasterTransmit(0xE7);  
        SPI_MasterTransmit(0xE7); 
        SPI_MasterTransmit(0xE7); 
        SPI_MasterTransmit(0xE7); 
        SPI_MasterTransmit(0xE7); 
        CSN_1; 
        
        CSN_0; 
        SPI_MasterTransmit(0x20); 
        SPI_MasterTransmit(0x3B); 
        CSN_1; 

        CE_1; //activate receiver 
} 
void main(void) 
{ 
   unsigned char i; 
   SPI_MasterInit(); 
   config_prx(); 
   while(1) 
   { 
              if (SPI_IRQ == 0)    //wait for anything 
                   { 
                  for (i = 0; i < 5; i++)  //flash LED 5 times if data received 
                  { 
                   LED = 1; 
                   delay_ms(10); 
                   LED = 0; 
                   delay_ms(10); 
                  } 
                        delay_ms(200); 
                        reset_RX();            
                    } 
   } 
} 
void reset_RX(void) 
{ 
    unsigned char i, j; 
    unsigned char buffer[4]; 
    
         //Read RX payload    
    CSN_0;    
    SPI_MasterTransmit(0x61);    
    for (j = 0; j < 4; j++) 
    {        
          buffer[j] = SPI_MasterTransmit(0);        
    }    
    CSN_1; 
    
    
   //Flush RX FIFO    
    CSN_0;    
    SPI_MasterTransmit(0xE2);    
    CSN_1; 
    CSN_0; 
  
   //reset int    
     SPI_MasterTransmit(0x27); 
   SPI_MasterTransmit(0x40);    
    CSN_1; 
} 
//---------------------------外部中断0-----------------------------------//    
#pragma interrupt_handler INT0_ovf_isr:2  
void INT0_ovf_isr(void) 
    {   unsigned int temp_data; 
        
       SPI_IRQ == 0; 
    }

I am haihong.I get register configurations from the devices.

rx: 3B 00 03 03 03 02 07 0E 00 00 E7 E7 E7 E7 E7 C2 C2 C2 C2 C2 C3 C4 C5 C6 E7 E7 E7 E7 E7 04 00 00 00 00 00 11 . 
tx: 5A 00 03 03 00 02 07 2E 00 00 E7 E7 E7 E7 E7 C2 C2 C2 C2 C2 C3 C4 C5 C6 E7 E7 E7 E7 E7 00 00 00 00 00 00 11 . 

Please respond if you have any clue. I’m really stuck at the moment!

At this point, I don’t really have much more insight to offer you. You’re going to have to take it from here and do some digging to figure out what’s really happening unless someone else can help.

I posted details of some very simple code using software SPI that you should be able to get working without any problems.

viewtopic.php?t=8300

Leon

Thank you very much! Let me try,too.