<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ESB_PTX loses 1 packet of every two packets when I enable 4 channels of SAADC</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/72290/esb_ptx-loses-1-packet-of-every-two-packets-when-i-enable-4-channels-of-saadc</link><description>Hi, 
 I am using multiple channels of SAADC for monitoring some data and then I send every 20 samples of adc in a 32 packet through Radio/BLE using the esb_ptx example and saadc example in sdk17. When I configure just 2 channels everything work fine and</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 09 Mar 2021 12:10:14 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/72290/esb_ptx-loses-1-packet-of-every-two-packets-when-i-enable-4-channels-of-saadc" /><item><title>RE: ESB_PTX loses 1 packet of every two packets when I enable 4 channels of SAADC</title><link>https://devzone.nordicsemi.com/thread/298687?ContentTypeID=1</link><pubDate>Tue, 09 Mar 2021 12:10:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1ae9f151-be8b-4c25-beeb-b394d891771e</guid><dc:creator>Karl Ylvisaker</dc:creator><description>&lt;p&gt;Hello again,&lt;/p&gt;
[quote user="Masoumeh"]I mean I have 20 samples of adc in 16 bits which every one has 4 bits of zero because that the resolution is 4 bit. to send data in a optimized way I put this 20 samples in a 32 bytes packet which the first and last byte are not filled with data. so I have 20 sample in 12 bits resolution which means 240 bits in 30 bytes.&amp;nbsp;[/quote]
&lt;p&gt;I could not understand what you mean here until I saw you code, but I see now that you are truncating the samples so you may fit more samples into the buffer, as long as the receiver is aware of this, this should be just fine - it is a good optimization to avoid sending redundant empty bytes.&lt;/p&gt;
[quote user="Masoumeh"]here is my code:&amp;nbsp;[/quote]
&lt;p&gt;This makes things clearer, thank you for sharing.&lt;br /&gt;I notice that you are not actually checking the error code of the call to &lt;a href="https://infocenter.nordicsemi.com/index.jsp?topic=%2Fsdk_nrf5_v17.0.2%2Fgroup__nrf__esb.html&amp;amp;anchor=gaf3ce65553e67d5f8b16da1683e60686a"&gt;&lt;em&gt;nrf_esb_write_payload&lt;/em&gt;&lt;/a&gt; - you only check whether it was a success or not. This is likely where you are &amp;#39;loosing&amp;#39; you data. For example, if it returns with the error code NRF_ERROR_NO_MEM the tx fifo queue is full. This means that you data is discarded, since you move on with only incrementing the fail counter.&lt;/p&gt;
[quote user="Masoumeh"]if the packet is lost, I increase a buffer. so yes the data is not transferred successfully and never acknowledged by the receiver.&amp;nbsp;[/quote]
&lt;p&gt;If it is important that data is not discarded / lost, you will need to implement a proper error handling here, instead of just moving on if it fails. It is not the esb protocol that is loosing the data, it is the application that is discarding it, currently.&lt;/p&gt;
[quote user="Masoumeh"]this problem happlens when I increase the channels of the adc from 2 to 4.&amp;nbsp;[/quote]
&lt;p&gt;This could be due to the fact that enabling the double amount of channels will double the data to be transmitted. If the transmitting is supposed to happen at the same pace, this likely causes your buffer to fill, and thus the application starts discarding data more regularly.&lt;/p&gt;
[quote user="Masoumeh"]I am using keil for my work, can you say me how to check there?&amp;nbsp;[/quote]
&lt;p&gt;In keil, you can change this in the C/C++ tab of the &amp;#39;options&amp;#39; when right clicking the project in the file explorer. Please see attached image. You will have to pass the returned error code to an APP_ERROR_CHECK() in order for the returned error code to be checked. The default error handling is to reset the device.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img alt=" " src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/enabling_5F00_debug_5F00_KEIL.PNG" /&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;br /&gt;Karl&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: ESB_PTX loses 1 packet of every two packets when I enable 4 channels of SAADC</title><link>https://devzone.nordicsemi.com/thread/298208?ContentTypeID=1</link><pubDate>Sat, 06 Mar 2021 11:41:03 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:3a3a261f-8f3d-46d5-8ac8-136f71e74839</guid><dc:creator>Masoumeh</dc:creator><description>[quote userid="87869" url="~/f/nordic-q-a/72290/esb_ptx-loses-1-packet-of-every-two-packets-when-i-enable-4-channels-of-saadc/297602#297602"]&lt;p&gt;Could you clarify what you mean when you say that you send 20 samples in a 32 packet?&amp;nbsp;&lt;/p&gt;
&lt;div class="quote-header"&gt;&lt;/div&gt;&lt;blockquote class="quote"&gt;&lt;div class="quote-content"&gt;&lt;/div&gt;&lt;/blockquote&gt;[/quote]
&lt;p&gt;I mean I have 20 samples of adc in 16 bits which every one has 4 bits of zero because that the resolution is 4 bit. to send data in a optimized way I put this 20 samples in a 32 bytes packet which the first and last byte are not filled with data. so I have 20 sample in 12 bits resolution which means 240 bits in 30 bytes.&amp;nbsp;&lt;/p&gt;
[quote userid="87869" url="~/f/nordic-q-a/72290/esb_ptx-loses-1-packet-of-every-two-packets-when-i-enable-4-channels-of-saadc/297602#297602"]Could you detail how you are initiating your sampling (are you using a timer to trigger SAMPLE_START through PPI, like in the SAADC example?)?[/quote]
&lt;p&gt;yes I am using the approach in the SAADC and use&amp;nbsp;&amp;nbsp;nrf_drv_timer_us_to_ticks(&amp;amp;m_timer, 50) which gives me 20ksps.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;here is my code:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/**
 * Copyright (c) 2014 - 2020, Nordic Semiconductor ASA
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, this
 *    list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form, except as embedded into a Nordic
 *    Semiconductor ASA integrated circuit in a product or a software update for
 *    such product, must reproduce the above copyright notice, this list of
 *    conditions and the following disclaimer in the documentation and/or other
 *    materials provided with the distribution.
 *
 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
 *    contributors may be used to endorse or promote products derived from this
 *    software without specific prior written permission.
 *
 * 4. This software, with or without modification, must only be used with a
 *    Nordic Semiconductor ASA integrated circuit.
 *
 * 5. Any software provided in binary form under this license must not be reverse
 *    engineered, decompiled, modified and/or disassembled.
 *
 * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA &amp;quot;AS IS&amp;quot; AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */
#include &amp;lt;stdbool.h&amp;gt;
#include &amp;lt;stdint.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;quot;sdk_common.h&amp;quot;
#include &amp;quot;nrf.h&amp;quot;
#include &amp;quot;nrf_esb.h&amp;quot;
#include &amp;quot;nrf_error.h&amp;quot;
#include &amp;quot;nrf_esb_error_codes.h&amp;quot;
#include &amp;quot;nrf_delay.h&amp;quot;
#include &amp;quot;nrf_gpio.h&amp;quot;
#include &amp;quot;nrf_clock.h&amp;quot;
#include &amp;quot;boards.h&amp;quot;
#include &amp;quot;nrf_delay.h&amp;quot;
#include &amp;quot;app_util.h&amp;quot;

/** user&amp;#39;s code begins 1. 
*/
#include &amp;lt;stdio.h&amp;gt;
#include &amp;quot;nrf_drv_saadc.h&amp;quot;
#include &amp;quot;nrf_drv_ppi.h&amp;quot;
#include &amp;quot;nrf_drv_timer.h&amp;quot;
#include &amp;quot;app_error.h&amp;quot;
#include &amp;quot;app_util_platform.h&amp;quot;
#include &amp;quot;nrf_pwr_mgmt.h&amp;quot;
/** user&amp;#39;s code ends 1. 
*/

#include &amp;quot;nrf_log.h&amp;quot;
#include &amp;quot;nrf_log_ctrl.h&amp;quot;
#include &amp;quot;nrf_log_default_backends.h&amp;quot;

/** user&amp;#39;s code begins 2. 
*/

#define SAMPLES_IN_BUFFER 20
volatile uint8_t state = 1;

static const nrf_drv_timer_t m_timer = NRF_DRV_TIMER_INSTANCE(0);
static nrf_saadc_value_t     m_buffer_pool[2][SAMPLES_IN_BUFFER];
static nrf_ppi_channel_t     m_ppi_channel;
static uint32_t              m_adc_evt_counter;
static nrf_esb_payload_t     tx_payload = NRF_ESB_CREATE_PAYLOAD(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);


static nrf_esb_payload_t     rx_payload;
uint8_t flag=0;

static uint32_t              Sending_packet_passed;
static uint32_t              Sending_packet_failed;

bool buf_flag=false;

void timer_handler(nrf_timer_event_t event_type, void * p_context)
{

}

void saadc_sampling_event_init(void)
{
    ret_code_t err_code;

    err_code = nrf_drv_ppi_init();
    APP_ERROR_CHECK(err_code);

    nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG;
    timer_cfg.bit_width = NRF_TIMER_BIT_WIDTH_32;
    err_code = nrf_drv_timer_init(&amp;amp;m_timer, &amp;amp;timer_cfg, timer_handler);
    APP_ERROR_CHECK(err_code);

    /* setup m_timer for compare event every 50us */
    uint32_t ticks = nrf_drv_timer_us_to_ticks(&amp;amp;m_timer, 50);
    nrf_drv_timer_extended_compare(&amp;amp;m_timer,
                                   NRF_TIMER_CC_CHANNEL0,
                                   ticks,
                                   NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK,
                                   false);
    nrf_drv_timer_enable(&amp;amp;m_timer);

    uint32_t timer_compare_event_addr = nrf_drv_timer_compare_event_address_get(&amp;amp;m_timer,
                                                                                NRF_TIMER_CC_CHANNEL0);
    uint32_t saadc_sample_task_addr   = nrf_drv_saadc_sample_task_get();

    /* setup ppi channel so that timer compare event is triggering sample task in SAADC */
    err_code = nrf_drv_ppi_channel_alloc(&amp;amp;m_ppi_channel);
    APP_ERROR_CHECK(err_code);

    err_code = nrf_drv_ppi_channel_assign(m_ppi_channel,
                                          timer_compare_event_addr,
                                          saadc_sample_task_addr);
    APP_ERROR_CHECK(err_code);
}


void saadc_sampling_event_enable(void)
{
    ret_code_t err_code = nrf_drv_ppi_channel_enable(m_ppi_channel);

    APP_ERROR_CHECK(err_code);
}


void saadc_callback(nrf_drv_saadc_evt_t const * p_event) //ok
{
    if (p_event-&amp;gt;type == NRF_DRV_SAADC_EVT_DONE)
    {
        ret_code_t err_code;
				err_code = nrf_drv_saadc_buffer_convert(p_event-&amp;gt;data.done.p_buffer, SAMPLES_IN_BUFFER);
			  APP_ERROR_CHECK(err_code);
				
        int i;
				int k=1;
				for (i = 0; i &amp;lt; SAMPLES_IN_BUFFER; i+=2)
			  {
					tx_payload.data[k] =   (uint8_t)(p_event-&amp;gt;data.done.p_buffer[i]);
					tx_payload.data[k+1] = (uint8_t)(p_event-&amp;gt;data.done.p_buffer[i] &amp;gt;&amp;gt; 8) | (uint8_t)(p_event-&amp;gt;data.done.p_buffer[i+1] &amp;lt;&amp;lt; 4);
					tx_payload.data[k+2] = (uint8_t)(p_event-&amp;gt;data.done.p_buffer[i+1] &amp;gt;&amp;gt; 4);
					k+=3;
			  }
				tx_payload.data[0]=m_adc_evt_counter++;
				if (nrf_esb_write_payload(&amp;amp;tx_payload) == NRF_SUCCESS)
				{
					Sending_packet_passed++;
				}
				else
				{
					tx_payload.data[31]=Sending_packet_failed++;
				}
//				nrf_delay_us(50);
    }
}


void saadc_init(void) //ok
{
  ret_code_t err_code;

	nrf_saadc_channel_config_t channel_config0 =
        NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_DIFFERENTIAL(NRF_SAADC_INPUT_AIN4,NRF_SAADC_INPUT_AIN6);
	nrf_saadc_channel_config_t channel_config1 =
        NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_DIFFERENTIAL(NRF_SAADC_INPUT_AIN5,NRF_SAADC_INPUT_AIN6);
	
	nrf_saadc_channel_config_t channel_config2 =
        NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN6);
	nrf_saadc_channel_config_t channel_config3 =
        NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN7);

    err_code = nrf_drv_saadc_init(NULL, saadc_callback);
    APP_ERROR_CHECK(err_code);

    err_code = nrf_drv_saadc_channel_init(0, &amp;amp;channel_config0);
    APP_ERROR_CHECK(err_code);
		err_code = nrf_drv_saadc_channel_init(1, &amp;amp;channel_config1);
    APP_ERROR_CHECK(err_code);
		err_code = nrf_drv_saadc_channel_init(2, &amp;amp;channel_config2);
    APP_ERROR_CHECK(err_code);
		err_code = nrf_drv_saadc_channel_init(3, &amp;amp;channel_config3);
    APP_ERROR_CHECK(err_code);

    err_code = nrf_drv_saadc_buffer_convert(m_buffer_pool[0], SAMPLES_IN_BUFFER);
    APP_ERROR_CHECK(err_code);

    err_code = nrf_drv_saadc_buffer_convert(m_buffer_pool[1], SAMPLES_IN_BUFFER);
    APP_ERROR_CHECK(err_code);
		
//		nrf_saadc_continuous_mode_enable(800);

}

/** user&amp;#39;s code ends 2. 
*/


void nrf_esb_event_handler(nrf_esb_evt_t const * p_event)
{
    switch (p_event-&amp;gt;evt_id)
    {
        case NRF_ESB_EVENT_TX_SUCCESS:
            NRF_LOG_DEBUG(&amp;quot;TX SUCCESS EVENT&amp;quot;);
            break;
        case NRF_ESB_EVENT_TX_FAILED:
            NRF_LOG_DEBUG(&amp;quot;TX FAILED EVENT&amp;quot;);
            (void) nrf_esb_flush_tx();
            (void) nrf_esb_start_tx();
            break;
        case NRF_ESB_EVENT_RX_RECEIVED:
            NRF_LOG_DEBUG(&amp;quot;RX RECEIVED EVENT&amp;quot;);
            while (nrf_esb_read_rx_payload(&amp;amp;rx_payload) == NRF_SUCCESS)
            {
                if (rx_payload.length &amp;gt; 0)
                {
                    NRF_LOG_DEBUG(&amp;quot;RX RECEIVED PAYLOAD&amp;quot;);
                }
            }
            break;
    }
}


void clocks_start( void )
{
    NRF_CLOCK-&amp;gt;EVENTS_HFCLKSTARTED = 0;
    NRF_CLOCK-&amp;gt;TASKS_HFCLKSTART = 1;

    while (NRF_CLOCK-&amp;gt;EVENTS_HFCLKSTARTED == 0);
}


void gpio_init( void )
{
    nrf_gpio_range_cfg_output(8, 15);
    bsp_board_init(BSP_INIT_LEDS);
}


uint32_t esb_init( void )
{
    uint32_t err_code;
    uint8_t base_addr_0[4] = {0xE7, 0xE7, 0xE7, 0xE7};
    uint8_t base_addr_1[4] = {0xC2, 0xC2, 0xC2, 0xC2};
    uint8_t addr_prefix[8] = {0xE7, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8 };

    nrf_esb_config_t nrf_esb_config         = NRF_ESB_DEFAULT_CONFIG;
    nrf_esb_config.protocol                 = NRF_ESB_PROTOCOL_ESB_DPL;
    nrf_esb_config.retransmit_delay         = 600;
    nrf_esb_config.bitrate                  = NRF_ESB_BITRATE_2MBPS_BLE;
    nrf_esb_config.event_handler            = nrf_esb_event_handler;
    nrf_esb_config.mode                     = NRF_ESB_MODE_PTX;
    nrf_esb_config.selective_auto_ack       = false;

    err_code = nrf_esb_init(&amp;amp;nrf_esb_config);

    VERIFY_SUCCESS(err_code);

    err_code = nrf_esb_set_base_address_0(base_addr_0);
    VERIFY_SUCCESS(err_code);

    err_code = nrf_esb_set_base_address_1(base_addr_1);
    VERIFY_SUCCESS(err_code);

    err_code = nrf_esb_set_prefixes(addr_prefix, NRF_ESB_PIPE_COUNT);
    VERIFY_SUCCESS(err_code);

    return err_code;
}


int main(void)
{
	
    ret_code_t err_code;
    gpio_init();
  	nrf_gpio_pin_clear(10);

    err_code = NRF_LOG_INIT(NULL);
    APP_ERROR_CHECK(err_code);

    NRF_LOG_DEFAULT_BACKENDS_INIT();
	
  	nrf_gpio_cfg_output(27);
		nrf_gpio_pin_clear(27);
	
	
		clocks_start();
	
    err_code = esb_init();
    APP_ERROR_CHECK(err_code);
		
		/** user&amp;#39;s code begins 3. 
		*/
		NRF_POWER-&amp;gt;DCDCEN=1;
		
		ret_code_t ret_code = nrf_pwr_mgmt_init();
    APP_ERROR_CHECK(ret_code);
		
    saadc_init();
    saadc_sampling_event_init();
    saadc_sampling_event_enable();
		
		/** usr&amp;#39;s code ends 3. 
		*/ 
    while (true)
    { 
				nrf_pwr_mgmt_run();
    }
		
}
&lt;/pre&gt;&lt;/p&gt;
[quote userid="87869" url="~/f/nordic-q-a/72290/esb_ptx-loses-1-packet-of-every-two-packets-when-i-enable-4-channels-of-saadc/297602#297602"]Could you clarify what you mean when you say that packets are lost - do you mean that they are never acknowledged by the receiver?&lt;br /&gt;[/quote]
&lt;p&gt;as you can see in saadc_callback() I send packets through&amp;nbsp;nrf_esb_write_payload and if the packet is lost, I increase a buffer. so yes the data is not transferred successfully and never acknowledged by the receiver.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://devzone.nordicsemi.com/resized-image/__size/320x240/__key/communityserver-discussions-components-files/4/pastedimage1615030634384v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;this is somehow the packets I received in matlab, as you can see the first byte of every packet is not the ++ of the last one and it is +2, which means that I did not get 1 packet. this problem happlens when I increase the channels of the adc from 2 to 4.&amp;nbsp;&lt;/p&gt;
[quote userid="87869" url="~/f/nordic-q-a/72290/esb_ptx-loses-1-packet-of-every-two-packets-when-i-enable-4-channels-of-saadc/297602#297602"]Could you also confirm for me that you have DEBUG defined in your transmitter&amp;#39;s preprocessor defines, like shown in the included image? [/quote]
&lt;p&gt;I am using keil for my work, can you say me how to check there?&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: ESB_PTX loses 1 packet of every two packets when I enable 4 channels of SAADC</title><link>https://devzone.nordicsemi.com/thread/297602?ContentTypeID=1</link><pubDate>Wed, 03 Mar 2021 16:41:06 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5dbbad5c-5473-4fcf-94e7-c48bfcc70649</guid><dc:creator>Karl Ylvisaker</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
[quote user=""]I send every 20 samples of adc in a 32 packet [/quote]
&lt;p&gt;Could you clarify what you mean when you say that you send 20 samples in a 32 packet?&amp;nbsp;&lt;/p&gt;
[quote user=""]When I configure just 2 channels everything work fine and the packets transmit without any loss. but when I configure 3 channels, 1 of every 3 packets of the esb is lost, and when I configure 4 channels, I lost 1 out of 2. I think the problem is somehow related to the priorities.[/quote]
&lt;p&gt;Could you detail how you are initiating your sampling (are you using a timer to trigger SAMPLE_START through PPI, like in the SAADC example?)?&lt;br /&gt;It would be great if you could show the code where you are configuring and enabling the channels.&lt;/p&gt;
[quote user=""]when I configure 3 channels, 1 of every 3 packets of the esb is lost, and when I configure 4 channels[/quote]
&lt;p&gt;Could you clarify what you mean when you say that packets are lost - do you mean that they are never acknowledged by the receiver?&lt;br /&gt;&lt;br /&gt;Could you also confirm for me that you have DEBUG defined in your transmitter&amp;#39;s preprocessor defines, like shown in the included image? This will make a detailed error message print out if a non-NRF_SUCCESS error code is passed to an APP_ERROR_CHECK.&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/1667.enabling_5F00_debug_5F00_SES.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;Looking forward to resolving this issue together!&lt;br /&gt;&lt;br /&gt;Best regards,&lt;br /&gt;Karl&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>