I'm looking at the example esb_ptx and esb_prx from SDK v3.0.2 running on an NRF5340 and NRF52840 respectively.
This function in esb.c
static void update_rf_payload_format_esb_dpl(uint32_t payload_length)
{
nrf_radio_packet_conf_t packet_config = { 0 };
packet_config.s0len = 0;
packet_config.s1len = 3;
/* Using 6 bits or 8 bits for length */
packet_config.lflen = (CONFIG_ESB_MAX_PAYLOAD_LENGTH <= 32) ? 6 : 8;
packet_config.whiteen = false;
packet_config.big_endian = true;
packet_config.balen = (esb_addr.addr_length - 1);
packet_config.statlen = 0;
packet_config.maxlen = CONFIG_ESB_MAX_PAYLOAD_LENGTH;
#if defined(RADIO_PCNF0_PLEN_Msk)
if (esb_cfg.bitrate == ESB_BITRATE_2MBPS) {
packet_config.plen = NRF_RADIO_PREAMBLE_LENGTH_16BIT;
}
#if defined(RADIO_MODE_MODE_Ble_2Mbit)
if (esb_cfg.bitrate == ESB_BITRATE_2MBPS_BLE) {
packet_config.plen = NRF_RADIO_PREAMBLE_LENGTH_16BIT;
}
#endif /* defined(RADIO_MODE_MODE_Ble_2Mbit) */
#if defined(RADIO_MODE_MODE_Nrf_4Mbit0_5) || defined(RADIO_MODE_MODE_Nrf_4Mbit_0BT6)
if (esb_cfg.bitrate == ESB_BITRATE_4MBPS) {
packet_config.plen = NRF_RADIO_PREAMBLE_LENGTH_16BIT;
}
#endif /* defined(RADIO_MODE_MODE_Nrf_4Mbit0_5) || defined(RADIO_MODE_MODE_Nrf_4Mbit_0BT6) */
#endif /* defined(RADIO_PCNF0_PLEN_Msk) */
nrf_radio_packet_configure(NRF_RADIO, &packet_config);
}
sets packet_config.flen based on CONFIG_ESB_MAX_PAYLOAD_LENGTH. The problem I am seeing is that if either PTX or PRX has a payload of 32 and the other has a payload > 32, the packet is rejected.
Changing to
packet_config.lflen = 8;
seems to fix it in all cases.
My goal is to have a PRX that can communicate with both legacy ESB PTX and new ESB PTX with a larger payload. Will I be able to do that?
