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