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:

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 ...

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

Parents Reply Children
No Data
Related