<?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>UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/71680/uart-max-80-bytes-on-receive-is-possible</link><description>Hi, 
 got a question about UART and maximum bytes it can receive in one burst or &amp;quot;packet&amp;quot;. 
 Using nRF52382 and SDK16. 
 Recently I&amp;#39;ve been developing a new app in which UART baudrate needs to be 576000. Everything is set and Rx/Tx works. Legacy mode</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 19 Feb 2021 12:21:09 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/71680/uart-max-80-bytes-on-receive-is-possible" /><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295327?ContentTypeID=1</link><pubDate>Fri, 19 Feb 2021 12:21:09 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4dec56fa-ea7c-40eb-a5ef-c183b4b88060</guid><dc:creator>mbozic</dc:creator><description>&lt;p&gt;Hi Edvin, Henry,&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve managed to completely resolve the issue.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve confirmed that I can receive 255 bytes in one burst on 1Mega baud with flow control. Without flow control around 250000 is pretty much stable so our only option would be to lower the baud rate for regular UART.&lt;/p&gt;
&lt;p&gt;Libuarte has no problems with 255 bytes at 576000, so I&amp;#39;m sticking with it! Many thanks to one of your engineers who provided the implementation on some other thread.&lt;/p&gt;
&lt;p&gt;Biggest issue I had was RTT not printing all bytes it received with NRF_LOG_HEXDUMP due small NRF_LOG_MSGPOOL_ELEMENT_COUNT, and that took me to wrong direction. Lesson learned! :)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;No overrun errors with libuarte! No overrun errors with flow control up to 1Mega baud. Using my own reading from uart, implemented years ago.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks for support guys!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295312?ContentTypeID=1</link><pubDate>Fri, 19 Feb 2021 11:48:32 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4637a047-6654-456e-96de-f518bb2bdcbb</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;So how is it going? Do you still get the overrun error? If so, I believe you are not handling the data fast enough in your event handler. Is it still the default uart event handler from the ble_app_uart? Or did you change it?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295274?ContentTypeID=1</link><pubDate>Fri, 19 Feb 2021 08:41:45 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4f85b293-1c5d-47b9-a811-63ff32047aa3</guid><dc:creator>mbozic</dc:creator><description>&lt;p&gt;Hi Henry,&lt;/p&gt;
&lt;p&gt;don&amp;#39;t worry, I am forcing the 0xFF in the packet so I can easily find the end of the packet to validate it. :) It&amp;#39;s easier to spot 0xFF and then 0x00 while sending a lot of bytes like 250+.&lt;/p&gt;
&lt;p&gt;Edit:&lt;/p&gt;
&lt;p&gt;Don&amp;#39;t worry about COBS, it&amp;#39;s the code we had for years, its tested and verified. Mine is N+3 currently because I add additional zero at the beginning of packet too for testing. You can modify COBS to your needs as long as encode follows decode and I&amp;#39;m not even doing a decode here, I&amp;#39;m just sending plain data. I could test Rx with any data since my nRF receiver does not do decoding it is only receiving data. So my problem lies in receiving not decoding.&lt;/p&gt;
&lt;p&gt;Thanks for caring! :)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295273?ContentTypeID=1</link><pubDate>Fri, 19 Feb 2021 08:35:45 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:885664fe-7a1b-4936-b4ed-40c290d7b40e</guid><dc:creator>Henry_Chou</dc:creator><description>&lt;p&gt;Hey! It&amp;#39;s me. mbozic:&lt;/p&gt;
&lt;p&gt;I have a question. It&amp;#39;s no matter about the UART RX issue.&lt;/p&gt;
&lt;p&gt;I think that you have better to check your cobs encode. Because your encode data the last two bytes are always&amp;nbsp; ff 00.&lt;/p&gt;
&lt;p&gt;But if your original data contents are not zeo the COBS encode the last second byte will not be ff. Because ff means after 255 bytes is zero. But the later byte is zero. It&amp;#39;s quite strange. Isn&amp;#39;t it?&lt;/p&gt;
&lt;p&gt;COBS encode algorithm is n to n+2. But yours is n to n+3.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295267?ContentTypeID=1</link><pubDate>Fri, 19 Feb 2021 08:01:54 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:da2675b6-4cac-4fb3-ab12-f29baf65cb45</guid><dc:creator>mbozic</dc:creator><description>&lt;p&gt;Okay, first I&amp;#39;ve checked the hardware, for the 10th time, could not found errors.&lt;br /&gt;Then I compiled and run ble_app_uart, getting the same results!&lt;br /&gt;Then I went ballistic...Placed logging all over the place and eventually I figured all data are received, only NRF_LOG_HEXDUMP was printing first 80 bytes!&lt;br /&gt;Changed NRF_LOG_MSGPOOL_ELEMENT_COUNT from 8 to 64 and everything prints! I can receive up to 256 bytes with no problems at baudrates of 115200 and 250000. Bloody hell...&lt;br /&gt;&lt;br /&gt;After that it was time to see why UART gave comm errors (overrun) at 576k baudrate, so I connected oscilloscope and another FTDI to se what I am transmitting and receiving. Transmitted data is valid, so is the received data. But, nRF does not receive more than 33 bytes at 576k.&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="https://devzone.nordicsemi.com/resized-image/__size/1040x240/__key/communityserver-discussions-components-files/4/uart576k.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Not sure if image will be visible correctly but I always get overrun error on UART if I send more than 33 bytes.&lt;/p&gt;
&lt;p&gt;I would assume this is because I don&amp;#39;t use flow control?&lt;/p&gt;
&lt;p&gt;I will try with flow control just to verify the issue and I will try libuarte again to se if that library helps. Main problem is we can&amp;#39;t have flow control. So I would guess our only option would be to lower the baudrate.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295053?ContentTypeID=1</link><pubDate>Thu, 18 Feb 2021 10:45:50 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8ee8d4fd-a9e1-4783-b65b-584f20e23d6f</guid><dc:creator>mbozic</dc:creator><description>&lt;p&gt;Hi Edvin,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;process_uart() &lt;/span&gt;function is called in main while loop.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;// Enter main loop.
while (1)
{
    NRF_LOG_PROCESS();
    process_uart();
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ll test with &lt;span&gt;ble_app_uart&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m also evaluating our custom hardware where this is being run. I also doubt as Henry it&amp;#39;s something in nRF SW or HW, it&amp;#39;s probably something with our side of HW. I&amp;#39;ll know more in few days.&lt;/p&gt;
&lt;p&gt;Thanks for info!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295049?ContentTypeID=1</link><pubDate>Thu, 18 Feb 2021 10:31:10 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ad5296be-cb91-4fdb-a1be-7b589581a077</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;Please note that we have an &amp;quot;insert&amp;quot; -&amp;gt; &amp;quot;code&amp;quot; for inserting code snippets. It is easier to read if the code snippets are long, because it maintains the formatting.&lt;/p&gt;
&lt;p&gt;My concern is:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;        case APP_UART_DATA_READY:
        {

        } break;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;which does nothing.In itself, this should be fine as long as your fifo buffer is large enough (larger than 80 bytes), but I don&amp;#39;t know how you set up your project.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;What I believe is confusing you is the app_uart_fifo and the uart peripheral driver. These are not the same thing. The app_uart_fifo is the library that pulls data from the uart peripheral. Do you use app_uart_fifo.c in your project? If so, look at what is generating the APP_UART_DATA_READY event inside app_uart_fifo.c:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static void uart_event_handler(nrf_drv_uart_event_t * p_event, void* p_context)
{
    app_uart_evt_t app_uart_event;
    uint32_t err_code;

    switch (p_event-&amp;gt;type)
    {
        case NRF_DRV_UART_EVT_RX_DONE:
            // If 0, then this is a RXTO event with no new bytes.
            if(p_event-&amp;gt;data.rxtx.bytes == 0)
            {
               // A new start RX is needed to continue to receive data
               (void)nrf_drv_uart_rx(&amp;amp;app_uart_inst, rx_buffer, 1);
               break;
            }

            // Write received byte to FIFO.
            err_code = app_fifo_put(&amp;amp;m_rx_fifo, p_event-&amp;gt;data.rxtx.p_data[0]);
            if (err_code != NRF_SUCCESS)
            {
                app_uart_event.evt_type          = APP_UART_FIFO_ERROR;
                app_uart_event.data.error_code   = err_code;
                m_event_handler(&amp;amp;app_uart_event);
            }
            // Notify that there are data available.
            else if (FIFO_LENGTH(m_rx_fifo) != 0)
            {
                app_uart_event.evt_type = APP_UART_DATA_READY;
                m_event_handler(&amp;amp;app_uart_event);
            }

            // Start new RX if size in buffer.
            if (FIFO_LENGTH(m_rx_fifo) &amp;lt;= m_rx_fifo.buf_size_mask)
            {
                (void)nrf_drv_uart_rx(&amp;amp;app_uart_inst, rx_buffer, 1);
            }
            else
            {
                // Overflow in RX FIFO.
                m_rx_ovf = true;
            }

            break;

        case NRF_DRV_UART_EVT_ERROR:
            app_uart_event.evt_type                 = APP_UART_COMMUNICATION_ERROR;
            app_uart_event.data.error_communication = p_event-&amp;gt;data.error.error_mask;
            (void)nrf_drv_uart_rx(&amp;amp;app_uart_inst, rx_buffer, 1);
            m_event_handler(&amp;amp;app_uart_event);
            break;

        case NRF_DRV_UART_EVT_TX_DONE:
            // Get next byte from FIFO.
            if (app_fifo_get(&amp;amp;m_tx_fifo, tx_buffer) == NRF_SUCCESS)
            {
                (void)nrf_drv_uart_tx(&amp;amp;app_uart_inst, tx_buffer, 1);
            }
            else
            {
                // Last byte from FIFO transmitted, notify the application.
                app_uart_event.evt_type = APP_UART_TX_EMPTY;
                m_event_handler(&amp;amp;app_uart_event);
            }
            break;

        default:
            break;
    }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Does that function look exactly like this in your case? And is it being used?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;And for context, you say that the 81st byte is missing. Where do you read your bytes?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The function&amp;nbsp;&lt;span&gt;process_uart() with the empty APP_UART_DATA_READY: event handler. Where is it called from?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Just a shot in the dark: Have you tried the ble_app_uart example from the SDK? Do you see the same behavior there if you don&amp;#39;t modify anything?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;BR,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Edvin&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295027?ContentTypeID=1</link><pubDate>Thu, 18 Feb 2021 09:35:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a6b84a6e-4472-4d5e-a2ae-d574defd2281</guid><dc:creator>mbozic</dc:creator><description>&lt;p&gt;&amp;quot;If it&amp;#39;s the COBS encode, I think it will never be zero until end of fifo.&amp;quot;&lt;/p&gt;
&lt;p&gt;Yes, it will never be zero until end of packet(not fifo!), but packet can be 40 bytes and everything works, go to 60 bytes, everything works, give it 80 bytes, works. Now give it 81 bytes, and 81st is lost!&lt;/p&gt;
&lt;p&gt;Yes, it&amp;#39;s a overrun issue but why? I can see all the data in oscilloscope, I&amp;#39;m using FTDI cable to send data, everything is there, valid. FIFO size is 256 bytes for both Rx and Tx.&lt;/p&gt;
&lt;p&gt;Still looking...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295017?ContentTypeID=1</link><pubDate>Thu, 18 Feb 2021 09:10:24 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:36d9fe2c-d10f-4c3a-bff9-14039a22f1d7</guid><dc:creator>Henry_Chou</dc:creator><description>&lt;p&gt;If it&amp;#39;s the COBS encode, I think it will never be zero until end of fifo. I agree the suggestion of Edvin.&lt;/p&gt;
&lt;p&gt;You may check the 0x480 (ERRORSRC) in your handle function. Maybe it&amp;#39;s the overrun issue (TX signal issue) in this case.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295011?ContentTypeID=1</link><pubDate>Thu, 18 Feb 2021 08:55:34 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d2463190-64c7-4d4a-97e9-dc9d9a311f68</guid><dc:creator>mbozic</dc:creator><description>&lt;p&gt;This is COBS, you put N bytes in Encode and get out N+3 bytes, last byte being 0 which marks the end of the packet. You can adapt COBS to your needs but 0 always marks start and/or end of the packet, in my case it marks the end.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve checked encoding function, I&amp;#39;ve checked the data in debug and with the oscilloscope and it&amp;#39;s valid. Wasted few days on this actually.&lt;/p&gt;
&lt;p&gt;I will also check apply_old_config, maybe I&amp;#39;ve missed something!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295005?ContentTypeID=1</link><pubDate>Thu, 18 Feb 2021 08:39:43 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:fd9dbdff-b043-4470-ae71-d2c77144eefe</guid><dc:creator>Henry_Chou</dc:creator><description>&lt;p&gt;Okay~&lt;a class="internal-link view-user-profile" href="https://devzone.nordicsemi.com/members/mbozic"&gt;mbozic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t think that the bug is the HW/FW bug of SDK16 or SOC. Because I had done UART RX more than 128 bytes before(115200bps). I wonder that the possible case is the RX data format from your side. From your&amp;nbsp;&amp;nbsp;&lt;span&gt;uart_process()&amp;nbsp; function in while loop, it get the uart rx data fifo untile the data is zero.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uartWorker.byteIndex &amp;lt; UART_BUFFER_SIZE)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.buffer[uartWorker.byteIndex] = uartWorker.byte;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.byteIndex++;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uartWorker.byte == 0)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;code&gt;Here. But if the 81th byte is zero and over 82 bytes are valid. Your data fifo will be 80 bytes only. So another way, you may check the TX data from your test pattern.&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/295001?ContentTypeID=1</link><pubDate>Thu, 18 Feb 2021 08:28:43 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:41e43dbd-6364-4fbb-a76b-542b2943dd8c</guid><dc:creator>mbozic</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;uart_process() function only transfers receiving the data into while loop. According to my testing handling it in while loop makes the receiving data more stable, basically without errors in receiving. At least till now...&lt;/p&gt;
&lt;p&gt;I already tried handling it similar like you mentioned, behaves the same. I will try again, perhaps I missed something the first time I tried.&lt;/p&gt;
&lt;p&gt;I believe there is an error on my side, obviously, but what confuses me that I also get the same behavior using libuarte and with libuarte I&amp;#39;m handling the data in libuarte event handler (uart_event_handler(void * context, nrf_libuarte_async_evt_t * p_evt)) with same results.&lt;/p&gt;
&lt;p&gt;So any way I go I get to this 80 bytes max in a single burst which makes this UART unusable for our use case. I wish I defined 80 somewhere but I didn&amp;#39;t. Very weird behavior.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/294989?ContentTypeID=1</link><pubDate>Thu, 18 Feb 2021 08:02:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c3fcbeda-33f1-4916-bd05-b72b99e0a3b9</guid><dc:creator>Henry_Chou</dc:creator><description>&lt;p&gt;What&amp;#39;s your&amp;nbsp;process_uart() purpose?&lt;/p&gt;
&lt;p&gt;Why don&amp;#39;t you receive the data fifo from uart_event_handle()?&lt;/p&gt;
&lt;p&gt;It&amp;#39;s must be something wrong, when you get uart data in&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;process_uart()&amp;nbsp;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Normally it&amp;#39;s handle in event (interrupt).&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You may try the following example.&lt;/p&gt;
&lt;p&gt;void uart_event_handle(app_uart_evt_t * p_event)&lt;br /&gt;{&lt;br /&gt; static uint8_t data_array[256];&lt;br /&gt; static uint8_t&amp;nbsp;&lt;span&gt;uartWorker.byteIndex&lt;/span&gt; = 0;&lt;/p&gt;
&lt;p&gt;switch (p_event-&amp;gt;evt_type)&lt;br /&gt; {&lt;br /&gt; /**@snippet [Handling data from UART] */&lt;br /&gt; case APP_UART_DATA_READY:&lt;br /&gt; //UNUSED_VARIABLE(app_uart_get(&amp;amp;data_array[&lt;span&gt;uartWorker.byteIndex&lt;/span&gt;]));&lt;br /&gt; app_uart_get(&amp;amp;data_array[&lt;span&gt;uartWorker.byteIndex&lt;/span&gt;]);&lt;br /&gt;&lt;span&gt;&amp;nbsp;uartWorker.byteIndex&lt;/span&gt;++;&lt;/p&gt;
&lt;p&gt;if ((data_array[&lt;span&gt;uartWorker.byteIndex&lt;/span&gt; - 1] == &amp;#39;\n&amp;#39;) || (&lt;span&gt;uartWorker.byteIndex&lt;/span&gt; &amp;gt;=&lt;code&gt;UART_BUFFER_SIZE&lt;/code&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;))&lt;br /&gt; {&lt;br /&gt; data_array[&lt;span&gt;uartWorker.byteIndex&lt;/span&gt;]=0;&lt;br /&gt;&lt;span&gt;&amp;nbsp;uartWorker.byteIndex&lt;/span&gt;&amp;nbsp;= 0;&lt;br /&gt; memcpy(&lt;span&gt;uartWorker.buffer&lt;/span&gt;,data_array,sizeof(data_array));&lt;br /&gt; }&lt;br /&gt; break;&lt;br /&gt; /**@snippet [Handling data from UART] */&lt;br /&gt; case APP_UART_COMMUNICATION_ERROR:&lt;br /&gt; APP_ERROR_HANDLER(p_event-&amp;gt;data.error_communication);&lt;br /&gt; break;&lt;/p&gt;
&lt;p&gt;case APP_UART_FIFO_ERROR:&lt;br /&gt; APP_ERROR_HANDLER(p_event-&amp;gt;data.error_code);&lt;br /&gt; break;&lt;/p&gt;
&lt;p&gt;default:&lt;br /&gt; break;&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;Good luck!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/294980?ContentTypeID=1</link><pubDate>Thu, 18 Feb 2021 06:39:40 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9c1a60b2-5340-41b5-9255-64a94ebdf1f9</guid><dc:creator>mbozic</dc:creator><description>&lt;p&gt;Hi Edvin,&lt;/p&gt;
&lt;p&gt;thanks for replaying.&lt;/p&gt;
&lt;p&gt;This is the uart init function:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;void UART_Initialize(void)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t err_code;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; app_uart_comm_params_t const comm_params =&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .rx_pin_no&amp;nbsp;&amp;nbsp;&amp;nbsp; = UART_RX_PIN,&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .tx_pin_no&amp;nbsp;&amp;nbsp;&amp;nbsp; = UART_TX_PIN,&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .flow_control = APP_UART_FLOW_CONTROL_DISABLED,&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .use_parity&amp;nbsp;&amp;nbsp; = false,&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .baud_rate&amp;nbsp;&amp;nbsp;&amp;nbsp; = UART_BAUDRATE_BAUDRATE_Baud250000&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; APP_UART_FIFO_INIT(&amp;amp;comm_params, UART_BUFFER_SIZE, UART_BUFFER_SIZE, uart_event_handle, UART_PRIORITY, err_code);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; APP_ERROR_CHECK(err_code);&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;UART_BUFFER_SIZE&lt;/code&gt; = 256&lt;/p&gt;
&lt;p&gt;&lt;code&gt;UART_PRIORITY&lt;/code&gt; = APP_IRQ_PRIORITY_HIGHEST // Tried every possible option&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;#define UART_EASY_DMA_SUPPORT 1&lt;/p&gt;
&lt;p&gt;#define UART_LEGACY_SUPPORT 0&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This is how I process Rx data, this function is called in main.c, in the main while(1) loop(UART_BUFFER_SIZE = 512):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;static void process_uart(void)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!uartWorker.enabled)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uartWorker.bleBufferAvailable)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (app_uart_get(&amp;amp;uartWorker.byte) == NRF_SUCCESS)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOARD_LedRxOn();&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //NRF_LOG_INFO(&amp;quot;Rx: %d&amp;quot;, uartWorker.byte);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uartWorker.byteIndex &amp;lt; UART_BUFFER_SIZE)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.buffer[uartWorker.byteIndex] = uartWorker.byte;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.byteIndex++;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uartWorker.byte == 0)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#ifdef PRINT_UART_COMM&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NRF_LOG_INFO(&amp;quot;-&amp;gt; BLE(1): %d&amp;quot;, uartWorker.byteIndex);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NRF_LOG_HEXDUMP_INFO(uartWorker.buffer, uartWorker.byteIndex);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#endif&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (dongleInfo.verified)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.bleBufferAvailable = ble_rws_try_to_send(&amp;amp;m_rws, uartWorker.buffer, &amp;amp;uartWorker.byteIndex);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uartWorker.bleBufferAvailable)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NRF_LOG_INFO(&amp;quot;-&amp;gt; BLE(1) SENT&amp;quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.byteIndex = 0;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.byteIndex = 0;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uartWorker.txComplete)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#ifdef PRINT_UART_COMM&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NRF_LOG_INFO(&amp;quot;-&amp;gt; BLE(2)&amp;quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NRF_LOG_HEXDUMP_INFO(uartWorker.buffer, uartWorker.byteIndex);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#endif&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (dongleInfo.verified)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.txComplete = 0;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.bleBufferAvailable = ble_rws_try_to_send(&amp;amp;m_rws, uartWorker.buffer, &amp;amp;uartWorker.byteIndex);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (uartWorker.bleBufferAvailable)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NRF_LOG_INFO(&amp;quot;-&amp;gt; BLE(2) SENT&amp;quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.byteIndex = 0;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t use NRF_DRV_UART_ET_RX_DONE. My uart event handling function does not do much:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;void uart_event_handle(app_uart_evt_t * p_event)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (p_event-&amp;gt;evt_type)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case APP_UART_DATA_READY:&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } break;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case APP_UART_COMMUNICATION_ERROR: &lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NRF_LOG_ERROR(&amp;quot;APP_UART_COMMUNICATION_ERROR&amp;quot;);// | Code: 0x%x&amp;quot;, p_event-&amp;gt;data.error_code);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.byteIndex = 0;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } break;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case APP_UART_FIFO_ERROR:&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NRF_LOG_ERROR(&amp;quot;APP_UART_FIFO_ERROR&amp;quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uartWorker.byteIndex = 0;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } break;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } break;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Pretty much no matter how I configure the UART it&amp;#39;s the same behaviour.&lt;/p&gt;
&lt;p&gt;BAUDRATE: 115200 &amp;amp; 250000 -&amp;gt; Maximum 80 bytes is received correctly and printed in:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NRF_LOG_INFO(&amp;quot;-&amp;gt; BLE(1): %d&amp;quot;, uartWorker.byteIndex);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NRF_LOG_HEXDUMP_INFO(uartWorker.buffer, uartWorker.byteIndex);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If I send 81 bytes, 81st is lost, send 82, last 2 are lost.&lt;/p&gt;
&lt;p&gt;For baudrate 576000 this is 34. So if I send 36 bytes, I loose last 2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Please do take in account I&amp;#39;ve also implemented libuarte, the only difference is that now I can receive 80 bytes on baudrate of 576000.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You should be able to get this behavior from default ble_app_uart example since my UART implementation is the same as it is there. I can always send you my entire project.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This is the code we&amp;#39;re using for a looong time, problem occurred when our custom device sent more than 34 bytes on UART and nRF didn&amp;#39;t get it. I&amp;#39;ve developed a small UART app for windows so now we&amp;#39;re testing with that.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Please try with ble_app_uart, if there are no problems I will send you my entire project. I&amp;#39;m still looking for an error in my project and debugging, but I can&amp;#39;t find nothing obvious especially since libuarte is also behaving the same.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/294902?ContentTypeID=1</link><pubDate>Wed, 17 Feb 2021 14:46:24 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:68cdabeb-7605-41b8-a8c2-ac168d23bf1d</guid><dc:creator>Edvin</dc:creator><description>[quote user=""]Is 80 bytes some theoretical limit or is it defined somewhere in the sdk?[/quote]
&lt;p&gt;&amp;nbsp;No. It shouldn&amp;#39;t be. As you may already have checked, the APP_UART_COMMUNICATION_ERROR with code 1 means OVERRUN:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://devzone.nordicsemi.com/resized-image/__size/320x240/__key/communityserver-discussions-components-files/4/pastedimage1613571568511v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;(screenshot from &lt;a href="https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.nrf52832.ps.v1.1/uart.html?cp=4_2_0_49_9_3#register.ERRORSRC"&gt;infocenter&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;How have you set up your UART? Do you have an event handler that handles the incoming bytes? Do you use the app_uart_fifo.c? If so, do you call&amp;nbsp;nrf_drv_uart_rx() in the NRF_DRV_UART_ET_RX_DONE event?&lt;/p&gt;
&lt;p&gt;Remember that the UART FIFO is a separate buffer, reading from the UART peripheral.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Is there some way for me to reproduce this on an nRF52DK? How do you send your data?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;BR,&lt;br /&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: UART max 80 bytes on receive is possible</title><link>https://devzone.nordicsemi.com/thread/294649?ContentTypeID=1</link><pubDate>Tue, 16 Feb 2021 14:07:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8c94546e-2aa2-45b4-95c8-f6f78a7897f4</guid><dc:creator>mbozic</dc:creator><description>&lt;p&gt;Using nRF52832 and SDK16. Edited!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>