This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nrf24l01 playload datarate

When I have a test using nRF24l01+ with STM32, I can only get a playload datarate no more than 450kbps using nRF24l01+ 2M mode. How can increase the playload data rate and what is the maximum for the playload data rate? Thanks.

  • Hi Torbjørn, I agree with u. Another question, what is the max through put for the NACK Mode, can it reach 1.5mbps? Thanks. Yong

  • Hi Yong

    If you take advantage of the possibility to keep CE enabled over multiple packets (up to a maximum time of 4ms) you can reach 1.5Mbps or more in legacy Shockburst mode, yes.

    For this to work you have to upload the next packet to the FIFO while the current packet is being transmitted.

    Still, it is important to disable the TX temporarily after 4ms, otherwise the carrier frequency might drift out of spec and the packets will be lost.

    Best regards

  • Hi Torbjørn,

    It is great. I will try the though put 1.5Mbps.It is very important for my application. Could u give me some advice for the configuration to enabled over multiple packets and to to upload the next packet to the FIFO? Looks there is no more detail specification on datasheet document.It will be very helpful to me if there is a demo for the configuration. Thanks.

    Yong

  • I have a testing as below:

    define MAX_TX 0x10 define TX_OK 0x20 define RX_OK 0x40

    u8 NRF24L01_TxPacketContinous(u8 txbuf[8][32],u8 packetNum) { u8 sta,i; u8 outPut[20];

    //NRF24L01_CE=0;
    //NRF24L01_CE=1; //always in 1
    for(i = 0 ; i < packetNum; i ++){
    	while(1){
            sta=NRF24L01_Read_Reg(STATUS);  //get status	
            if(!(sta&0x1)) //TX FIFO not full
            {
    		    NRF24L01_Write_Buf(WR_TX_PLOAD,&txbuf[i][0],TX_PLOAD_WIDTH);//write data to FIFO
    		    break;
            }
    	}
    while(NRF24L01_IRQ!=0);
    }
    while(1){
      sta=NRF24L01_Read_Reg(STATUS);  //get status	 
      if(sta&0x20) //send comlete
      {
        break;
      }
    }
    NRF24L01_Write_Reg(WRITE_REG+STATUS,sta);
    if(sta&MAX_TX)
    {
    	NRF24L01_Write_Reg(FLUSH_TX,0xff);
    	llprintf("tran failed\n");
    	return MAX_TX; 
    }
    if(sta&TX_OK)//SEND COMPLETED
    {
    	return TX_OK;
    }
    
    return 0xff;//OTHER ERROR
    

    } But it not well.Looks some packet lost or can not be received correctly. Thanks. Yong

  • Hi

    The procedure is quite straight forward:

    1. Set CE high
    2. Upload a packet to the TX FIFO as quickly as possible
    3. If time passed is less than 4ms, repeat from 2)
    4. Set CE low
    5. Wait for the next TX interrupt to occur
    6. Repeat from 1)

    Best regards

Related