I am coming across a strange issue with a nRF24L01P running enhanced shockburst. I have 1 PRX and a few PTXs communicating in a star network. The type of PTX determines which datapipe is used on the PRX. All PTXs use their datapipe 0 for the auto ACK function. The PRX assigns a datapipe address and channel to a PTX during the pairing process. The PRX either assigns datapipe 1 to a certain type of PTX or it assigns datapipe 2 to all other PTX types. The PRX doesn't use datapipe 0 because he can actually switch to a PTX and transmit data if needed so datapipe 0 is used to support the auto ACK function in this case too. Everything has been working great for over a year with several hundred systems deployed in the field.
Now we are looking to do some new things. I would like to have the PRX attach a payload to the ACK packet that is sent back to the PTX that exclusively uses datapipe 1. This payload would tell the PTX to transmit his payload again. Thus forming a feedback loop of sorts. The PRX is expecting a transmission from the PTX so he preloads the dynamic payload into the TX FIFO for datapipe 1. When the PTX transmits his payload he checks to see if there is an attached payload to the ACK. If there is a payload and it is the correct flag, then the PTX will transmit again the next 100ms cycle. This continues until the PRX stops attaching a payload to the ACK based on an external input to the PRX.
Everything works fine on the bench but when applied to an actual test case the PRX seems to lock up at random times. In this lock up case the PRX doesn't receive packets on any datapipe from any PTX. The only way to fix it seems to be a power cycle. In the datasheet it explains that if the MAX_RT flag is high then this could block transmission but how could this flag be thrown on a PRX? I have a "cleanup" routine that runs every 100ms on the PRX which checks the status register on the nRF to see if any of the interrupt flags are high with the IRQ pin high (interrupt was missed). If this is true, then the flags are cleared and both the TX and RX FIFO are flushed. Also in this "cleanup" routine I check the FIFO status register and if either FIFO is full then I flush them both. Even with this "cleanup" routine the PRX will still randomly lock up.
I am a bit stumped on this one. Any help would be greatly appreciated.