<?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>nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/91746/nrf5340-transfer-data-with-uart-and-cdc_acm-know-when-to-add-data-to-uart-buffer</link><description>I want to transfer a bunch of data over the virtual com port to a PC using the USB port on the nrf5340. I&amp;#39;m using the CDC ACM sample: https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/samples/subsys/usb/cdc_acm/README.html 
 That sample</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 16 Sep 2022 11:49:47 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/91746/nrf5340-transfer-data-with-uart-and-cdc_acm-know-when-to-add-data-to-uart-buffer" /><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/386625?ContentTypeID=1</link><pubDate>Fri, 16 Sep 2022 11:49:47 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:eae997fd-4007-4d37-82d3-2dbc5b169210</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;I see, then I don&amp;#39;t know. Are you able to make a minimal example that demonstrate this issue and runs on a DK? If so I can test on my end.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/386440?ContentTypeID=1</link><pubDate>Thu, 15 Sep 2022 14:54:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f58abbe6-c1cc-4e57-9139-c70615813027</guid><dc:creator>stevenminnick</dc:creator><description>&lt;p&gt;I don&amp;#39;t believe the source buffer is modified by anything else.&amp;nbsp; It&amp;#39;s a single threaded application.&amp;nbsp; And it&amp;#39;s created right before sending.&amp;nbsp; Unless I have a crazy weird memory corruption bug somewhere.&amp;nbsp; But the fact that when I send less bytes than the max to the UART with fifo fill, it always works.&amp;nbsp; And when I don&amp;#39;t it always fails.&amp;nbsp; Same code just calling fifo fill with more than it can take and no wait between calls.&amp;nbsp; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/386376?ContentTypeID=1</link><pubDate>Thu, 15 Sep 2022 11:53:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d60129f4-1915-4864-a819-5842fbb20304</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;The code snippets here looks good, so I suspect the corruption is caused by something else. Could it be that the source buffer is modified by another thread while it is being transmitted, for instance because it is re-used too early?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/386226?ContentTypeID=1</link><pubDate>Wed, 14 Sep 2022 14:34:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f6668efe-6798-4353-bfd0-3cfef27d2f50</guid><dc:creator>stevenminnick</dc:creator><description>&lt;p&gt;So I was testing the way Einor was showing me.&amp;nbsp; I believe this is the way they listed it in that logging example.&amp;nbsp;&lt;/p&gt;
&lt;div style="background-color:#1e1e1e;color:#d4d4d4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, monospace;font-size:14px;font-weight:normal;line-height:19px;white-space:pre;"&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; += &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;snprintf&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;+&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1000&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;%d&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;,&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;,(&lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;int16_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;1000&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffPointer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;while&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;uart_fifo_fill&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;dev&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;+&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffPointer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;); &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;printk&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;Tried to print &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;%d&lt;/span&gt;&lt;span style="color:#ce9178;"&gt; bytes only did &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;%d&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; != &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;printk&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;, failed &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;%d&lt;/span&gt;&lt;span style="color:#ce9178;"&gt; bytes&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; - &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; - &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffPointer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffPointer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; + &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;memset&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;sizeof&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffPointer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;k_sleep&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#569cd6;"&gt;K_MSEC&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So I&amp;#39;ve got a bunch of data, I&amp;#39;m taking that and packing my buffer.&amp;nbsp; What you see above is in my loop where I&amp;#39;m going through the data one int at a time.&amp;nbsp; Once my buffer length is &amp;gt; 1000, I try to send it to the fifo.&amp;nbsp; There is logic in here, where not only will it print, but if the fifo fill command returns a value that&amp;#39;s not = to what I tried it will try to send the remainder.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The way this seems to work, if I send &amp;lt; 1024 bytes and the uart is empty, it works great.&amp;nbsp; So I put a sleep for 4ms in that loop.&amp;nbsp; What you see above works.&amp;nbsp; Because every time I come around, I&amp;#39;m sending &amp;lt; 1024 bytes and I wait an appropriate amount of time before sending again.&amp;nbsp; But let&amp;#39;s look at this next item.&lt;/p&gt;
&lt;div style="background-color:#1e1e1e;color:#d4d4d4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, monospace;font-size:14px;font-weight:normal;line-height:19px;white-space:pre;"&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; += &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;snprintf&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;+&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4096&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;-&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;%d&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;,&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;,(&lt;/span&gt;&lt;span style="color:#4ec9b0;"&gt;int16_t&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;data&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;4000&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffPointer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;while&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;uart_fifo_fill&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;dev&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;+&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffPointer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;); &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;printk&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#d7ba7d;"&gt;\n&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;Tried to print &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;%d&lt;/span&gt;&lt;span style="color:#ce9178;"&gt; bytes only did &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;%d&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#c586c0;"&gt;if&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; != &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;printk&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; (&lt;/span&gt;&lt;span style="color:#ce9178;"&gt;&amp;quot;, failed &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;%d&lt;/span&gt;&lt;span style="color:#ce9178;"&gt; bytes&amp;quot;&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; - &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; - &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffPointer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffPointer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; + &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;send_len&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;memset&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#569cd6;"&gt;sizeof&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffLength&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&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; &lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;buffPointer&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt; = &lt;/span&gt;&lt;span style="color:#b5cea8;"&gt;0&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#d4d4d4;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Here, the buffer is 4096, and once I pack 4000 bytes in my buffer, then I&amp;#39;m ready to send, I also don&amp;#39;t &amp;quot;wait&amp;quot; in the loop.&lt;/p&gt;
&lt;p&gt;But the weird part is, my buffer packs numbers that increment.&amp;nbsp; And if I use the first code I posted, all the data comes out perfect.&amp;nbsp; Every time I send fifo fill with less than 1024 bytes, it returns the bytes that it did send which is the amount I tried to send.&amp;nbsp; Then I wait, hoping to wait long enough to not cause an error.&lt;/p&gt;
&lt;p&gt;When I use the second batch of code here, I have packed the same data, and I said ok fifio fill, send 4000 bytes and it returns with 1024, which I take it to mean that it was going to send only 1024, and to send the rest I&amp;#39;m going to have to try later.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;BUT here&amp;#39;s the weird part, since I tried to send more bytes than the fifo would take, this is in the MIDDLE of the first 1024 bytes that it sends.&lt;/p&gt;
&lt;p&gt;130,131,132,133,134,135,136,137,138,13994,395,396,3,143,144,145,146,&lt;/p&gt;
&lt;p&gt;If I try to send &amp;lt; 1024 bytes (cause that&amp;#39;s all that will fit) this data comes out perfect, incrementing numbers.&amp;nbsp; When I try to send more than it can take, in the middle of what it DID take I get data corruption.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/385630?ContentTypeID=1</link><pubDate>Mon, 12 Sep 2022 06:45:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:897798c2-517e-464d-8f2e-f067b7eb6180</guid><dc:creator>Einar Thorsrud</dc:creator><description>[quote user="stevenminnick"]Ok, but what if I want to send 1024 bytes?&amp;nbsp; Or more than 1, it doesn&amp;#39;t tell me how many bytes I can send just that 1 is ok, any more????&amp;nbsp; Guess?&amp;nbsp; Does that mean I have to send 1 byte at a time?&amp;nbsp;[/quote]
&lt;p&gt;Try to send as much as you want, and check the return value of&amp;nbsp;&lt;code&gt;uart_fifo_fill()&lt;/code&gt;. This is the number of bytes that was sent.&lt;/p&gt;
[quote user="stevenminnick"]I quickly checked out the logger example you have, and I&amp;#39;m not sure I understand it, or if it looks like it&amp;#39;s any better.&amp;nbsp; It does look like they keep track of things a bit, but maybe I&amp;#39;m missing something.&amp;nbsp;[/quote]
&lt;p&gt;This point with linking to this is that it does try to send as much data as it has, and check how much was sent. And attempts to send the rest later. And so on. (See how the variable called&amp;nbsp;&lt;code&gt;curr_offset&lt;/code&gt; is increased by the return value of&amp;nbsp;&lt;code&gt;uart_fifo_fill()&lt;/code&gt; and this is done repeatedly until all data has been sent.&lt;/p&gt;
[quote user="stevenminnick"]Maybe I have to try this again since, I can&amp;#39;t imagine this is a good way to function. It&amp;#39;s totally possible I screwed something up when I tested this before.[/quote]
&lt;p&gt;I don&amp;#39;t see the code you used, but so I cannot say what could have been wrong. But I really suggest you just do exactly as the function from the logging subsystem that we have already mentioned. This is facing the exact same problem as you (potentially need to transfer more data than what you can do in a single call to &lt;code&gt;uart_fifo_fill()&lt;/code&gt;, and you can do the exact same thing.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/385538?ContentTypeID=1</link><pubDate>Fri, 09 Sep 2022 13:40:17 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f4119b64-bfbf-410f-b89d-45b6eb38da10</guid><dc:creator>stevenminnick</dc:creator><description>&lt;p&gt;And I&amp;#39;m trying to send a bunch of data, in order.&amp;nbsp; I believe I tested this already but it seems like such the wrong way to do things that I must have screwed it up.&amp;nbsp; But when you say, fill fifo with X bytes it returns the number of bytes that it DID send.&amp;nbsp; But when I tested this keeping track of the values in and out, it looked like it took the LAST bytes.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For instance if I said uart_fifo_fill with 10 bytes and I did it 3 times (really quickly and these numbers are small so it&amp;#39;s easy to type and think about).&amp;nbsp; And I&amp;#39;m trying to send the values 1, 2, 3, ... up to 30.&amp;nbsp; And the first time uart_fifo_fill returned 10, second time uart_fifo_fill returned 5, the 3rd time it returned 10.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;On the other end of the uart I got:&lt;/p&gt;
&lt;p&gt;1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30.&lt;/p&gt;
&lt;p&gt;If it would have sent:&lt;/p&gt;
&lt;p&gt;1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30.&lt;/p&gt;
&lt;p&gt;I could see that it took 5 bytes, and then be smart about it and try to send the last 5, but instead it took the last 5 and threw away the first 5.&amp;nbsp; That means the first time I send X bytes and it actually sent less my whole transmission is bad and I have to start over.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Maybe I have to try this again since, I can&amp;#39;t imagine this is a good way to function. It&amp;#39;s totally possible I screwed something up when I tested this before.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/385535?ContentTypeID=1</link><pubDate>Fri, 09 Sep 2022 13:29:42 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:42af2168-80fe-4694-a68b-dc6787bcc602</guid><dc:creator>stevenminnick</dc:creator><description>&lt;p&gt;It&amp;#39;s not a problem, I have 8 gigabits that I want to transmit (at most, it&amp;#39;s a flash chip and I want to dump the memory, yes I know it&amp;#39;s gonna take a while).&amp;nbsp; &lt;span class="emoticon" data-url="https://devzone.nordicsemi.com/cfs-file/__key/system/emoji/1f642.svg" title="Slight smile"&gt;&amp;#x1f642;&lt;/span&gt;&amp;nbsp; So I know I have to split it up, and it&amp;#39;s gonna be the only job for the micro when this happens so I don&amp;#39;t care if it takes 100% of CPU cycles, I just want to minimize the time spent uart-ing.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The problem I saw with the uart_irq_tx_ready() is that it says that it returns true if it can take at least 1 byte.&amp;nbsp; Ok, but what if I want to send 1024 bytes?&amp;nbsp; Or more than 1, it doesn&amp;#39;t tell me how many bytes I can send just that 1 is ok, any more????&amp;nbsp; Guess?&amp;nbsp; Does that mean I have to send 1 byte at a time?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I quickly checked out the logger example you have, and I&amp;#39;m not sure I understand it, or if it looks like it&amp;#39;s any better.&amp;nbsp; It does look like they keep track of things a bit, but maybe I&amp;#39;m missing something.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks again for taking the time to post stuff for me here.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/385529?ContentTypeID=1</link><pubDate>Fri, 09 Sep 2022 13:20:29 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b2f12966-8832-41bf-b5fe-8ab7e2c5338a</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;You are right,&amp;nbsp;uart_irq_tx_ready() was what I should have referred to before and not&amp;nbsp;ring_buf_size_get() (will update the post in case other read it in the future). I do not see any other obvious way than what I described before (but with&amp;nbsp;uart_irq_tx_ready()). With that approach, you will not spend too much time polling.&lt;/p&gt;
&lt;p&gt;Is it a problem that you may not be able to write all data at once? I understand it is a bit annoying as the application code must keep track of what is buffered, but that is how this is done by other &amp;quot;users&amp;quot; in the SDK. See for instance the implementation of &lt;a href="https://github.com/nrfconnect/sdk-zephyr/blob/3afbbacd2ea218f0f203a1c45cb55d5f0eba2820/subsys/logging/log_frontend_dict_uart.c#L184"&gt;uart_isr_callback() in the logger&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/385525?ContentTypeID=1</link><pubDate>Fri, 09 Sep 2022 12:59:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a3822632-fa98-445e-9a21-df7ceb4fb275</guid><dc:creator>stevenminnick</dc:creator><description>&lt;p&gt;Again, I really do appreciate the help and you taking the time to get back to me.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Isn&amp;#39;t the ring buffer in this example just a place to put the data that comes in the RX line?&amp;nbsp; It has nothing to do with the TX at all.&amp;nbsp; Other than in this example we take that and push it into the UART FIFO.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;My &amp;quot;problem&amp;quot; is that I want to push tons of data out the UART and right now, I don&amp;#39;t see a good way to do it.&amp;nbsp; Or a good way know when the last time I put something into the FIFO of the UART that it&amp;#39;s done and can take more.&amp;nbsp; The uart fifo fill function takes what you send it and at most will send 1024 bytes.&amp;nbsp; But if I come back and send another 1024 bytes too quickly it replies with &amp;quot;I sent 635&amp;quot; or something.&amp;nbsp; And when I tested this, it appears that it sends the last 635 of the data that I add to it.&amp;nbsp; So I can&amp;#39;t even try again with the remainder of my buffer.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;irq tx ready gives you &amp;quot;if the tx buffer can accept at least 1 byte&amp;quot;, that doesn&amp;#39;t help unless I&amp;#39;m sending data one byte at a time.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;tx complete says: Note that this function is &lt;em&gt;not&lt;/em&gt; useful to check if UART TX can accept more data, use &lt;a class="reference internal" href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/hardware/peripherals/uart.html#group__uart__interrupt_1ga5e126b5f19549eb7f5b785b98ebe7638"&gt;&lt;span class="std std-ref"&gt;uart_irq_tx_ready()&lt;/span&gt;&lt;/a&gt; for that.&amp;nbsp; And in my example even if I wanted to use it, it&amp;#39;s not implemented.&amp;nbsp; Can I do something to make it so that it IS implemented?&lt;/p&gt;
&lt;p&gt;The only way I got this to work is fifo fill and then wait 10ms.&amp;nbsp; And then do it again monitoring the response from fifo fill so that if it replies with anything less than what I push to it, I know my data transmission failed and I have to wait longer.&amp;nbsp; It kinda gets the job done, sort of but it&amp;#39;s so terrible.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Am I going about this all wrong?&amp;nbsp; Is there a better way to send a ton of data on the UART as fast as possible?&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/385429?ContentTypeID=1</link><pubDate>Fri, 09 Sep 2022 07:17:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a77f285c-8791-44f2-af88-14e82aaac136</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Ah, yes. I did not check the sample. That use the interrupt driven approach, so in that case uart_irq_callback_set() is used (see intro in the &lt;a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/hardware/peripherals/uart.html"&gt;UART API documentation&lt;/a&gt; for a brief overview of the different approaches). With this API you don&amp;#39;t get an event specifically when a Tx operation is completed, but you will get&amp;nbsp;the callback for any UART interrupt. So in this case you could for instance expand the&amp;nbsp;interrupt_handler() in the sample to check the buffer filling&amp;nbsp;using&amp;nbsp;ring_buf_size_get() every time it is called.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/385367?ContentTypeID=1</link><pubDate>Thu, 08 Sep 2022 15:50:05 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0d3d8695-7954-4cd9-9813-71e7bb6e81cb</guid><dc:creator>stevenminnick</dc:creator><description>&lt;p&gt;Thanks for getting back to me.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The example uses:&lt;/p&gt;
&lt;div style="background-color:#1e1e1e;color:#d4d4d4;font-family:Consolas, &amp;#39;Courier New&amp;#39;, monospace;font-size:14px;font-weight:normal;line-height:19px;white-space:pre;"&gt;
&lt;div&gt;&lt;span style="color:#dcdcaa;"&gt;uart_irq_callback_set&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;(&lt;/span&gt;&lt;span style="color:#9cdcfe;"&gt;dev&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;, &lt;/span&gt;&lt;span style="color:#dcdcaa;"&gt;interrupt_handler&lt;/span&gt;&lt;span style="color:#d4d4d4;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Is that different than the uart_callback_set()?&amp;nbsp; And since I already setup the above callback, do I check for a different event in the same interrupt_handler() function?&amp;nbsp; Do I use the one you mentioned?&amp;nbsp; Do I need to setup 2?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: nrf5340 transfer data with UART and CDC_ACM, know when to add data to UART buffer</title><link>https://devzone.nordicsemi.com/thread/385293?ContentTypeID=1</link><pubDate>Thu, 08 Sep 2022 12:55:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5ce663ad-23ce-41b5-822c-6887d8118f4b</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;You can register a callback using&amp;nbsp;uart_callback_set() to register a callback, which will be called when a transfer is finished (an also in some other cases, so you need to check the event type in the callback). This includes the number of bytes that was sent (see &lt;a href="https://github.com/nrfconnect/sdk-zephyr/blob/3afbbacd2ea218f0f203a1c45cb55d5f0eba2820/include/zephyr/drivers/uart.h#L267"&gt;uart_event_tx&lt;/a&gt;).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>