This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

What's the maximum speed to send a packet?

Dear all

I'm using NRF51822 & 24LU1, I've tested to set timeslot to 500us.

For packet diagram, it should be reach to 2k packets per sec. but it only be the 200 packets per sec.

Q1 If i put full payload(32 bytes),how quickly can i send a packet? Q2 Is there any wrong with spec? It shows nrf_gzll_set_timelost_period(uint32_t period_us) Is the variable period_us really mean micro sec?

  • Hi Chester,

    200 packets per second is quite low. By theory with 500us timeslot you should have around 1000 packet per sec. The reason is that if there is 2 timeslot per channel, the second timeslot is used for re-transmission. So you will not have more than 1 packet on every channel (RX_PERIOD on the host).

    Usually, we measured around 800 packets per sec.

    In addition, 500us is not optimized, since the LFCLK on the LU1 is 32000kHz, there would me some small drift in communication with nRF51 (run on 32768kHz). Our suggestion is to set the RX_PERIOD on LU1 to 1008us and set the timeslot on nRF51 to 504 us.

    Secondly, your data rate should be 2Mbps to use the 504us timeslot and the packet size should be around 20 bytes maximum.

  • I used 51822 SDK gzp_device_dynamic_pairing with 24lu1 SDK gzll_host_w_dynamic_pairing. Should I do anything modified to reach 800 packets/sec? If you can upload sample code, I'll appreciate for your kindness.

  • Hi Chester,

    Attached you can find an example of Gazel communication between nRF24LU1 and nRF51822 (SDK v5.1.0).

    I followed the suggested parameters for legacy nRF24 devices as in file nrf_gzll_constants.h in the nRF51 gzll_ack_payload project.

    The number of retransmit set to 0 mean it will re-transmit until it gets ack.

    There is one more modification on GZLL_DEFAULT_PARAM_RX_CHANNEL_HOLD_PERIODS in gzll_param.h [i][/i] set to zero to improve the speed (no channel hold means we use new channel every 2 timeslots)

    The example will toggle a LED when it send 1000 packet and gets acked successfully.

    My test here showing the number of packets per second was about 990 pkt/s

    gzll_ack_payload - TestWithLU1.zip

    gzll_host - with51.zip

  • Hi

    i stuck on the same problem but with two nRF51822 as host and device. I try to transmit bytes on every gazell timeslot adding new bytes to the tx_fifo in nrf_gzll_device_tx_success callback. But my device only transmits on every 2nd timeslot.

    My setup does not use frequency hopping or re-transmission.

    uint16_t max_tx_attempts = 1;
    uint32_t timeslot_period_us = 600;
    uint8_t  channel_table[1] = { 27 };
    

    Is it possible to transmit on every timeslot?

Related