Hi. I just recently started using nRF24L01+. I am trying to simulate MultiCeiver using 2 mcus and 2 nrfs. PTX sends a message on all 6 pipes of the PRX. The problems start once more than 3 pipes are used on the RX side. I have found an identical post but it is very old and has no replies. I hope somebody can help. Here is the setup and some term definitions I will use to describe the problem:
- both nRFs configured for enhanced shockburst (auto ack, dynamic payload length)
- NACK(x) = transmit on pipe x using W_TX_PAYLOAD_NOACK
- ACK(x) = transmit on pipe x using W_TX_PAYLOAD
- TX always sends a different hardcoded payload to each pipe (no 2 RX pipes receive the same message from TX)
- TX always waits 5 seconds before a transmit
- RX pipe 2 always replies with an incremented value, setup using W_ACK_PAYLOAD when pipe 1 is addressed
- RX pipe 3 always replies with "test", setup using W_ACK_PAYLOAD when pipe 2 is addressed
- payloads are less than 32 bytes
- RX pipe 0 address: "12345"
- RX pipe 1 address: "abcd0"
- RX pipe 2 address: "?"
- RX pipe 3 address: "Z"
what works (3 pipes):
- TX -> NACK(0) -> RX ok
- TX -> ACK(1) -> RX ok, set pipe 2 reply to n++ -> TX ack
- TX -> ACK(2) -> RX ok -> TX ack + reply (incremented value) start all over again
- using pipe 3 instead of pipe 2 also works
what doesn't work (4 pipes):
- iteration 1
- TX -> NACK(0) -> RX ok
- TX -> ACK(1) -> RX ok, set pipe 2 reply to n++ -> TX ack
- TX -> ACK(2) -> RX ok, set pipe 3 reply to "test" -> TX ack + reply (incremented value)
- TX -> ACK(3) -> RX ok -> TX ack + reply ("test")
- iteration 2
- TX -> NACK(0) -> RX no event
- TX -> ACK(1) -> RX no event (thus no reply setup for pipe 2) -> TX ack
- TX -> ACK(2) -> RX no event (thus no reply setup for pipe 3) -> TX ack NO reply (NO incremented value)
- TX -> ACK(3) -> RX no event -> TX ack + reply ("test")
- after the 1st iteration RX no longer displays incoming messages (IRQ is not detected) and TX always gets ACK
- TX no longer gets an incremented value for pipe 2. This is expected
- TX keeps receiving "test" on pipe 3? This is a BIG problem since PTX thinks everything is fine but PRX mcu is not actually in the loop
what I tried:
- pull RX mcu interrupt pin low after freeze. mcu prints: no events in STATUS reg and FIFO_STATUS shows all empty
- when RX receives on pipe 3, power down, power up and enable RX using registers. No luck. It requires a cold start for nRF to recover
- tried using RX pipe 5 instead of 3. Same problem
- switched roles of mcu + module from TX to RX and the other way around. Same problem