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

nRF51822 / nRF24L01 compatibility with auto retransmission ?

Hi,

We are upgrading our main product which was until now based on nRF24L01 to nRF51822, with software library. But as the firmware implementation is mostly completed, I've discovered 2 unexpected behaviors I would be glad you explain.

An array of 6 sensors with nrf24L01 (in emission) is recorded on a device composed of a nrf51822. But it seems that the nRF51822 is sending back some of the data received to the sensor, and the nrf24 occasionaly get it's payload back. It's not a behaviour implemented on my mcu (at least I didn't intend to), and it didn't occured when I had the nrf24L01 on the recorder.

It seems to happen only when there are retransmission to be done, and the sensor is on the verge of loosing the connection with the recorder. I use the internal auto ART (4max) / ARD (750µs) management system, payload size being 32.

Is it something known, and if so is there a workaround ?

Due to some memory issues, I'm not using the last release of nrf51822 sofware library, and I kept the SDK in version 5.2.0.39364, with esb_sd_resources_arm lib

A second problem I've noticed is that when in rx mode, writing a payload (to be send as ack_payload) while specifying NRF_PACKET_NO_ACK, I still execute the nrf_esb_tx_success handler in the nrf51822 when the nrf24 in TX mode receives the ackpayload. Is that something expected ?

edit of december the 16th:

I've made a bunch of other tests today that have confirmed several points I suspected :

  • There is no order from my main mcu to send back the received packet to the nrf.
  • The nrf24L01 transmitter seems not to be blamed, because it doesn't receive its own packet when the nrf51822 is shut off.
  • However, it sporadically receive its last packet when running and being slightly out of range.
  • Auto Retransmissions mechanism seems concerned since it's mandatory to have some kind of packet loss, and when transmitter ART/ARD register set to 0 on nRF24L01 side, no problem appears.
  • Each and every of my packets are forwarded back to the nRF24L01 when the NRF51822 is paused (debug mode in my Keil µVison IDE)

I should be able to handle this by upgrading the firmware of every sensors so that it became compliant with the new receiver, but it's really frustrating to have every customers of ours going through such a procedure, for such minor a thing...

I hope you could brighten this up and guide me through a way to avoid this behaviour.

Thank you for your help and concern,

Regards,

Parents
  • I'm having a really hard time understanding your problem as the description of the issue is not something that I've encountered before. If I understand you correctly you are receiving your own payload back on the nRF24L01 sometime when you are close to being out of range and the you have enable re-transmits? How do you detect the reception of the sent payload? Do you get a RX_DR indicating you got a new payload?

    There's no reason for why the nRF51 should send the payload back to the nRF24L01 unless the received payload on the nRF51 is written to the TX FIFO and then re-sent with re-transmission ACK, but the ESB library won't do that unless you do that on your own.

    What addresses are you using in your setup? Could it be that one of the other sensors are sending at the same time a different one is in RX to receive the ACK and hence it's receiving the other sensors data? If the nRF51822 is paused/halted in debug mode, it shouldn't be able to do anything, so I find it really strange that it's sending the receive payload back to the sensor in this mode.

    It's a bit more complicated, but perhaps it would be beneficial to check who's actually sending. You can scope on the VDD_PA pin on the various sensors and the nRF51822. This pin will go up to 1.8 only when the chip is in radio TX mode. For the rest of the time, including radio RX, the VDD_PA pin will be 0 V. If you receive something and the VDD_PA pin on the nRF51822 is still 0 V, the payload/package wasn't sent from the nRF51822.

Reply
  • I'm having a really hard time understanding your problem as the description of the issue is not something that I've encountered before. If I understand you correctly you are receiving your own payload back on the nRF24L01 sometime when you are close to being out of range and the you have enable re-transmits? How do you detect the reception of the sent payload? Do you get a RX_DR indicating you got a new payload?

    There's no reason for why the nRF51 should send the payload back to the nRF24L01 unless the received payload on the nRF51 is written to the TX FIFO and then re-sent with re-transmission ACK, but the ESB library won't do that unless you do that on your own.

    What addresses are you using in your setup? Could it be that one of the other sensors are sending at the same time a different one is in RX to receive the ACK and hence it's receiving the other sensors data? If the nRF51822 is paused/halted in debug mode, it shouldn't be able to do anything, so I find it really strange that it's sending the receive payload back to the sensor in this mode.

    It's a bit more complicated, but perhaps it would be beneficial to check who's actually sending. You can scope on the VDD_PA pin on the various sensors and the nRF51822. This pin will go up to 1.8 only when the chip is in radio TX mode. For the rest of the time, including radio RX, the VDD_PA pin will be 0 V. If you receive something and the VDD_PA pin on the nRF51822 is still 0 V, the payload/package wasn't sent from the nRF51822.

Children
No Data
Related