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