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

Possible error in nRF5 SDK for ESB DPL transmissions with "selective auto ack" (

Hi folks,

I've found no beeter way of reporting this (no public SDK repo which allows issues with code reference).

I tried to TX ESB DPL frames from an nRF52840 to different versions of nRF24. The frames made it on air, but didn't get acknowledged.

To make a long story short, I assume the following code in  `nrf_esb.c` is wrong:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static void start_tx_transaction()
{
...snip...
switch (m_config_local.protocol)
{
case NRF_ESB_PROTOCOL_ESB:
...snip...
break;
case NRF_ESB_PROTOCOL_ESB_DPL:
... snip ...
// note: noack shouldn't be negated befor OR'ing onto S1 field
//m_tx_payload_buffer[1] |= mp_current_payload->noack ? 0x00 : 0x01;
m_tx_payload_buffer[1] |= mp_current_payload->noack ? 0x01 : 0x00;
memcpy(&m_tx_payload_buffer[2], mp_current_payload->data, mp_current_payload->length);
... snip ...
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

The unmodified code leads to RF frames with "no ack" bit in PCF set if the "noack" bool in the `nrf_esb_payload_t` struct is false.

So the flag is effectivly negated, leading to unintended behavior in PTX mode with selective acknowledgement.

Regards,

Marcus