I'm trying to send simple packets using the radio peripheral.
In my test scenario I have the following conditions:
- The HFXO is started and is running the whole time. The PLL is also running all the time due to errata https://docs.nordicsemi.com/bundle/errata_nRF54L15_EngB/page/ERR/nRF54L15/EngineeringB/latest/anomaly_L15_20.html#anomaly_L15_20.
- Using TIMER10 and DPPI, I transmit a radio packet every 100 ms.
- CPU is otherwise sleeping using WFI.
- Using a custom board having nRF54L15 chip with code N54L15 QFAABB 2435AB.
- Internal capacitance of HFXO is configured correctly.
- I use a nRF52833 devkit to receive packets and print every occurrence to the console.
Problem:
Depending on nRF54L15 board sample, the packet loss rate is ca 38%-80%. It's not that the CRC is wrong or packet is corrupted; it is simply not received at all in those cases. When testing multiple times on the same board, the packet loss ratio is pretty much constant over a few seconds.
However, if I replace the WFI by a busy-loop, keeping the CPU on, there is no packet loss anymore. Also if the debugger is connected, the issue does not occur. Alternatively, TIMER00 can be kept on instead.
I cannot reproduce the issue on the official devkit 0.8.1 having chip revision QFAABB 2433AA.
Current workaround:
Wake up the CPU and keep it active (in a busy-loop) while the radio is ramping up, or use DPPI to keep the TIMER00 on during the same time frame. Depending on board, I must in some cases extend the time the CPU or TIMER00 stays awake by some tens of microseconds.
Edit: for longer packets, the MCU domain needs to stay on for a longer time, otherwise I get CRC errors on the receiver side.
Question:
Is this a hardware bug missing an Errata or is it something wrong with the custom board?
Note that the SoftDevice Controller for BLE seems to work fine though on the same boards, is it already applying some workaround for this issue?
Note: This issue seems related to Errata 20 but with the difference that the packet cannot be received at all, as well as the workaround to keep PLL on is not sufficient.