ESB Max payload length in packet_config

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?

Parents Reply Children
Related