<?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>How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/121320/how-to-verify-the-4mbps-transmission-mode-of-the-nrf54l15-series</link><description>I noticed that the product information of the nRF54L15 series kit supports 4Mbps, but I&amp;#39;m unsure how to verify it. Are there any relevant examples available? I have currently tried the radio_test example, but this example doesn&amp;#39;t show the actual data</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 01 Apr 2026 15:45:57 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/121320/how-to-verify-the-4mbps-transmission-mode-of-the-nrf54l15-series" /><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/564391?ContentTypeID=1</link><pubDate>Wed, 01 Apr 2026 15:45:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7de754a5-3b8c-47f7-b587-1a591f02491d</guid><dc:creator>ER!K</dc:creator><description>&lt;p&gt;I found that the macro&amp;nbsp;&lt;span&gt;ESB_CREATE_PAYLOAD(...) used by the ESB samples only support up to 63 bytes data length, hence not suitable for leveraging the full 252 bytes possible. I composed the ESB payload manually and now get decent 3.3Mbps of throughput (without acknowledge).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;esb_payload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tx_payload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; .&lt;/span&gt;&lt;span&gt;pipe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; .&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;252&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; .&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/564384?ContentTypeID=1</link><pubDate>Wed, 01 Apr 2026 14:13:54 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f9479742-82b2-4f37-947f-1fed39f91545</guid><dc:creator>ER!K</dc:creator><description>&lt;p&gt;Okay, I&amp;#39;m at 2.35Mbps with basically the below settings and a payload of 252. I tried adding&amp;nbsp;CONFIG_ESB_NEVER_DISABLE_TX=y in the prf.conf and then reduce the retransmit_delay but this is throwing an error when going below 435 since there is a minimum fix-coded into esb.c (#define RETRANSMIT_DELAY_MIN 435). I reduced this in esb.c to just 1 and can then reduce the retransmit_delay in my code and this improves to around 2.8Mbps. However, I don&amp;#39;t really like changing code in the SDK. Anyone having further clues and suggestions for improving throughput?&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;code&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;esb_config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ESB_LEGACY_CONFIG&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;protocol&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ESB_PROTOCOL_ESB_DPL&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;retransmit_delay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;435&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;retransmit_count&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;bitrate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ESB_BITRATE_4MBPS&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;event_handler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;event_handler&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ESB_MODE_PTX&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;selective_auto_ack&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;use_fast_ramp_up&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;code&gt;&lt;strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/code&gt;
&lt;div&gt;
&lt;div&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tx_payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;noack&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;code&gt;&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/564169?ContentTypeID=1</link><pubDate>Fri, 27 Mar 2026 09:53:20 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:70840ee2-d350-4f97-a681-6eb2c87558a8</guid><dc:creator>ER!K</dc:creator><description>&lt;p&gt;Thanks. I was more referring to the used settings when initializing/running ESD other than using&amp;nbsp;&lt;span&gt;ESB_BITRATE_4MBPS and setting the payload to its maximum. Did you come across some non-obvious settings which had major impact on&amp;nbsp;improving throughput?&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/564166?ContentTypeID=1</link><pubDate>Fri, 27 Mar 2026 09:43:38 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4620c391-f356-4937-87c6-9900df599e98</guid><dc:creator>Cytheria</dc:creator><description>&lt;p&gt;To obtain a timestamp, you can use the &lt;code data-path-to-node="2,0" data-index-in-node="40"&gt;k_uptime_get()&lt;/code&gt; function to calculate the number of bytes received within a specific time interval.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/564164?ContentTypeID=1</link><pubDate>Fri, 27 Mar 2026 09:36:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e4ad3973-7c29-41c1-a0dd-881314b1a1d1</guid><dc:creator>ER!K</dc:creator><description>&lt;p&gt;Nice, that&amp;#39;s a quite decent result! You mind sharing the major tweaks/settings to achieve that?&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/564162?ContentTypeID=1</link><pubDate>Fri, 27 Mar 2026 09:29:41 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:312d12a0-175b-4d7e-9631-5d8340a06472</guid><dc:creator>Cytheria</dc:creator><description>&lt;p&gt;3.21Mbps&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/564161?ContentTypeID=1</link><pubDate>Fri, 27 Mar 2026 09:28:04 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b38b44e0-c921-4114-97e1-c9a941e351a8</guid><dc:creator>ER!K</dc:creator><description>&lt;p&gt;Thanks for following up. What throughput were&amp;nbsp;you able to achieve?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/564152?ContentTypeID=1</link><pubDate>Fri, 27 Mar 2026 08:58:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0a5954fb-2ce1-458d-a073-83296b8e6ecd</guid><dc:creator>Cytheria</dc:creator><description>&lt;p&gt;yes,i used the esb sample.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/564148?ContentTypeID=1</link><pubDate>Fri, 27 Mar 2026 08:40:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8dbc7ebc-b246-4cda-a590-8c8c9d85cd65</guid><dc:creator>ER!K</dc:creator><description>&lt;p&gt;Our of curiosity, did you succeed with higher throughput when using&amp;nbsp;the 4Mbps phy?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/537652?ContentTypeID=1</link><pubDate>Mon, 02 Jun 2025 12:22:50 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:43a4eba4-b8f0-4a78-8aa2-b4e5823e78ef</guid><dc:creator>Kenneth</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;You linking to the documentation that can be helpful in general:&lt;br /&gt;&lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/protocols/esb/index.html"&gt;https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/protocols/esb/index.html&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/samples/esb/esb_ptx/README.html#esb-ptx"&gt;https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/samples/esb/esb_ptx/README.html#esb-ptx&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/samples/esb/esb_prx/README.html#esb-prx"&gt;https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/samples/esb/esb_prx/README.html#esb-prx&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The max payload size is 252bytes, see:&lt;br /&gt;\nrf\subsys\esb\Kconfig&lt;br /&gt;\nrf\include\esb.h&lt;/p&gt;
&lt;p&gt;Kenneth&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/537394?ContentTypeID=1</link><pubDate>Wed, 28 May 2025 14:28:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:bada225b-de79-4525-b69d-93e5df2108d1</guid><dc:creator>Cytheria</dc:creator><description>&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
 */
#include &amp;lt;zephyr/drivers/clock_control.h&amp;gt;
#include &amp;lt;zephyr/drivers/clock_control/nrf_clock_control.h&amp;gt;
#if defined(NRF54L15_XXAA)
#include &amp;lt;hal/nrf_clock.h&amp;gt;
#endif /* defined(NRF54L15_XXAA) */
#include &amp;lt;zephyr/drivers/gpio.h&amp;gt;
#include &amp;lt;zephyr/irq.h&amp;gt;
#include &amp;lt;zephyr/logging/log.h&amp;gt;
#include &amp;lt;nrf.h&amp;gt;
#include &amp;lt;esb.h&amp;gt;
#include &amp;lt;zephyr/device.h&amp;gt;
#include &amp;lt;zephyr/devicetree.h&amp;gt;
#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;zephyr/types.h&amp;gt;
#include &amp;lt;dk_buttons_and_leds.h&amp;gt;
#if defined(CONFIG_CLOCK_CONTROL_NRF2)
#include &amp;lt;hal/nrf_lrcconf.h&amp;gt;
#endif

LOG_MODULE_REGISTER(esb_ptx, CONFIG_ESB_PTX_APP_LOG_LEVEL);
static uint32_t total_bytes_sent = 0;
static uint32_t last_report_time = 0;
static bool ready = true;
static struct esb_payload rx_payload;
//static struct esb_payload tx_payload = ESB_CREATE_PAYLOAD(0,
//	0x01, 0x00, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08);
static struct esb_payload tx_payload = ESB_CREATE_PAYLOAD(0,
    0x01, 0x00, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
    0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
    0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
    0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20); 

#define _RADIO_SHORTS_COMMON                                                   \
	(RADIO_SHORTS_READY_START_Msk | RADIO_SHORTS_END_DISABLE_Msk |         \
	 RADIO_SHORTS_ADDRESS_RSSISTART_Msk |                                  \
	 RADIO_SHORTS_DISABLED_RSSISTOP_Msk)

#define PACKET_SIZE 252  // ESB最大有效载荷
#define NO_ACK_MODE 1    // 禁用ACK提高吞吐量
void event_handler(struct esb_evt const *event)
{
    ready = true;

    static uint32_t last_rx_timestamp = 0;
    static uint32_t total_bytes_received = 0;

    switch (event-&amp;gt;evt_id) {
    case ESB_EVENT_TX_SUCCESS:
        LOG_DBG(&amp;quot;TX SUCCESS EVENT&amp;quot;);
        break;
    case ESB_EVENT_TX_FAILED:
        LOG_DBG(&amp;quot;TX FAILED EVENT&amp;quot;);
        break;
    case ESB_EVENT_RX_RECEIVED:
        while (esb_read_rx_payload(&amp;amp;rx_payload) == 0) {
            uint32_t rx_timestamp = k_uptime_get();  // 当前接收时间戳（单位：毫秒）
            uint32_t tx_timestamp = 0;

            // 从数据包中提取发送时间戳
            tx_timestamp |= rx_payload.data[28] &amp;lt;&amp;lt; 24;
            tx_timestamp |= rx_payload.data[29] &amp;lt;&amp;lt; 16;
            tx_timestamp |= rx_payload.data[30] &amp;lt;&amp;lt; 8;
            tx_timestamp |= rx_payload.data[31];

            // 计算接收到的数据包的传输时间（单位：秒）
            uint32_t time_diff = rx_timestamp - tx_timestamp;  // 时间差（毫秒）
            float time_diff_sec = time_diff / 1000.0f;  // 转换为秒

            // 计算吞吐量（单位：Mbps）
            float throughput = (rx_payload.length * 8) / time_diff_sec / 1000000.0f;  // 转换为 Mbps
            total_bytes_received += rx_payload.length;

            // 打印吞吐量和其他调试信息
            LOG_DBG(&amp;quot;Packet received, len %d, time_diff: %d ms, throughput: %.2f Mbps : &amp;quot;
                    &amp;quot;0x%02x, 0x%02x, 0x%02x, 0x%02x, &amp;quot;
                    &amp;quot;0x%02x, 0x%02x, 0x%02x, 0x%02x&amp;quot;,
                    rx_payload.length, time_diff, throughput,
                    rx_payload.data[0], rx_payload.data[1],
                    rx_payload.data[2], rx_payload.data[3],
                    rx_payload.data[4], rx_payload.data[5],
                    rx_payload.data[6], rx_payload.data[7]);
        }
        break;
    }
}


#if defined(CONFIG_CLOCK_CONTROL_NRF)
int clocks_start(void)
{
	int err;
	int res;
	struct onoff_manager *clk_mgr;
	struct onoff_client clk_cli;

	clk_mgr = z_nrf_clock_control_get_onoff(CLOCK_CONTROL_NRF_SUBSYS_HF);
	if (!clk_mgr) {
		LOG_ERR(&amp;quot;Unable to get the Clock manager&amp;quot;);
		return -ENXIO;
	}

	sys_notify_init_spinwait(&amp;amp;clk_cli.notify);

	err = onoff_request(clk_mgr, &amp;amp;clk_cli);
	if (err &amp;lt; 0) {
		LOG_ERR(&amp;quot;Clock request failed: %d&amp;quot;, err);
		return err;
	}

	do {
		err = sys_notify_fetch_result(&amp;amp;clk_cli.notify, &amp;amp;res);
		if (!err &amp;amp;&amp;amp; res) {
			LOG_ERR(&amp;quot;Clock could not be started: %d&amp;quot;, res);
			return res;
		}
	} while (err);

#if defined(NRF54L15_XXAA)
	/* MLTPAN-20 */
	nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_PLLSTART);
#endif /* defined(NRF54L15_XXAA) */

	LOG_DBG(&amp;quot;HF clock started&amp;quot;);
	return 0;
}

#elif defined(CONFIG_CLOCK_CONTROL_NRF2)

int clocks_start(void)
{
	int err;
	int res;
	const struct device *radio_clk_dev =
		DEVICE_DT_GET_OR_NULL(DT_CLOCKS_CTLR(DT_NODELABEL(radio)));
	struct onoff_client radio_cli;

	/** Keep radio domain powered all the time to reduce latency. */
	nrf_lrcconf_poweron_force_set(NRF_LRCCONF010, NRF_LRCCONF_POWER_DOMAIN_1, true);

	sys_notify_init_spinwait(&amp;amp;radio_cli.notify);

	err = nrf_clock_control_request(radio_clk_dev, NULL, &amp;amp;radio_cli);

	do {
		err = sys_notify_fetch_result(&amp;amp;radio_cli.notify, &amp;amp;res);
		if (!err &amp;amp;&amp;amp; res) {
			LOG_ERR(&amp;quot;Clock could not be started: %d&amp;quot;, res);
			return res;
		}
	} while (err == -EAGAIN);

#if defined(NRF54L15_XXAA)
	/* MLTPAN-20 */
	nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_PLLSTART);
#endif /* defined(NRF54L15_XXAA) */

	LOG_DBG(&amp;quot;HF clock started&amp;quot;);
	return 0;
}

#else
BUILD_ASSERT(false, &amp;quot;No Clock Control driver&amp;quot;);
#endif /* defined(CONFIG_CLOCK_CONTROL_NRF2) */

int esb_initialize(void)
{
	int err;
	/* These are arbitrary default addresses. In end user products
	 * different addresses should be used for each set of devices.
	 */
	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};

	struct esb_config config = ESB_DEFAULT_CONFIG;

	config.protocol = ESB_PROTOCOL_ESB_DPL;
	config.retransmit_delay = 600;
	config.bitrate = ESB_BITRATE_4MBPS;
	config.event_handler = event_handler;
	config.mode = ESB_MODE_PTX;
	config.selective_auto_ack = true;
	if (IS_ENABLED(CONFIG_ESB_FAST_SWITCHING)) {
		config.use_fast_ramp_up = true;
	}

	err = esb_init(&amp;amp;config);

	if (err) {
		return err;
	}

	err = esb_set_base_address_0(base_addr_0);
	if (err) {
		return err;
	}

	err = esb_set_base_address_1(base_addr_1);
	if (err) {
		return err;
	}

	err = esb_set_prefixes(addr_prefix, ARRAY_SIZE(addr_prefix));
	if (err) {
		return err;
	}

	return 0;
}

static void leds_update(uint8_t value)
{
	uint32_t leds_mask =
		(!(value % 8 &amp;gt; 0 &amp;amp;&amp;amp; value % 8 &amp;lt;= 4) ? DK_LED1_MSK : 0) |
		(!(value % 8 &amp;gt; 1 &amp;amp;&amp;amp; value % 8 &amp;lt;= 5) ? DK_LED2_MSK : 0) |
		(!(value % 8 &amp;gt; 2 &amp;amp;&amp;amp; value % 8 &amp;lt;= 6) ? DK_LED3_MSK : 0) |
		(!(value % 8 &amp;gt; 3) ? DK_LED4_MSK : 0);

	dk_set_leds(leds_mask);
}

int main(void)
{
    int err;

    LOG_INF(&amp;quot;Enhanced ShockBurst ptx sample&amp;quot;);

    err = clocks_start();
    if (err) {
        return 0;
    }

    err = dk_leds_init();
    if (err) {
        LOG_ERR(&amp;quot;LEDs initialization failed, err %d&amp;quot;, err);
        return 0;
    }

    err = esb_initialize();
    if (err) {
        LOG_ERR(&amp;quot;ESB initialization failed, err %d&amp;quot;, err);
        return 0;
    }

    LOG_INF(&amp;quot;Initialization complete&amp;quot;);
    LOG_INF(&amp;quot;Sending test packet&amp;quot;);

    tx_payload.noack = NO_ACK_MODE;  // 禁用ACK
    
    uint32_t packet_counter = 0;
    uint32_t start_time = k_uptime_get();
    
    while (1) {
        if (ready) {
            ready = false;
            esb_flush_tx();
            leds_update(tx_payload.data[1]);

            // 获取当前发送时间戳，并存入数据包的最后 4 字节
            uint32_t timestamp = (uint32_t)k_uptime_get();
            tx_payload.data[28] = (timestamp &amp;gt;&amp;gt; 24) &amp;amp; 0xFF;
            tx_payload.data[29] = (timestamp &amp;gt;&amp;gt; 16) &amp;amp; 0xFF;
            tx_payload.data[30] = (timestamp &amp;gt;&amp;gt; 8) &amp;amp; 0xFF;
            tx_payload.data[31] = timestamp &amp;amp; 0xFF;

            err = esb_write_payload(&amp;amp;tx_payload);
            if (err) {
                LOG_ERR(&amp;quot;Payload write failed, err %d&amp;quot;, err);
            }

            // 统计发送的字节数
            total_bytes_sent += tx_payload.length;  // 累加已发送的字节数
            uint32_t now = k_uptime_get();
            if (now - last_report_time &amp;gt;= 1000) {  // 每秒报告一次吞吐量
                float time_elapsed = (now - last_report_time) / 1000.0f;
                float throughput = (total_bytes_sent * 8) / time_elapsed / 1000000.0f;  // 计算吞吐量，单位为Mbps

                LOG_INF(&amp;quot;Throughput: %.2f Mbps (total bytes: %u)&amp;quot;, throughput, total_bytes_sent);

                total_bytes_sent = 0;  // 重置已发送字节数
                last_report_time = now;  // 更新报告时间
            }
        }

        k_sleep(K_MSEC(1));  // 提高发送频率
    }
}


&lt;/pre&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#include &amp;lt;zephyr/device.h&amp;gt;
#include &amp;lt;zephyr/devicetree.h&amp;gt;
#include &amp;lt;zephyr/drivers/clock_control.h&amp;gt;
#include &amp;lt;zephyr/drivers/clock_control/nrf_clock_control.h&amp;gt;
#if defined(NRF54L15_XXAA)
#include &amp;lt;hal/nrf_clock.h&amp;gt;
#endif /* defined(NRF54L15_XXAA) */
#include &amp;lt;zephyr/drivers/gpio.h&amp;gt;
#include &amp;lt;zephyr/irq.h&amp;gt;
#include &amp;lt;zephyr/logging/log.h&amp;gt;
#include &amp;lt;nrf.h&amp;gt;
#include &amp;lt;esb.h&amp;gt;
#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;zephyr/types.h&amp;gt;
#include &amp;lt;dk_buttons_and_leds.h&amp;gt;
#if defined(CONFIG_CLOCK_CONTROL_NRF2)
#include &amp;lt;hal/nrf_lrcconf.h&amp;gt;
#endif
#define PACKET_SIZE 252
LOG_MODULE_REGISTER(esb_prx, CONFIG_ESB_PRX_APP_LOG_LEVEL);

static struct esb_payload rx_payload;

static void leds_update(uint8_t value)
{
	uint32_t leds_mask =
		(!(value % 8 &amp;gt; 0 &amp;amp;&amp;amp; value % 8 &amp;lt;= 4) ? DK_LED1_MSK : 0) |
		(!(value % 8 &amp;gt; 1 &amp;amp;&amp;amp; value % 8 &amp;lt;= 5) ? DK_LED2_MSK : 0) |
		(!(value % 8 &amp;gt; 2 &amp;amp;&amp;amp; value % 8 &amp;lt;= 6) ? DK_LED3_MSK : 0) |
		(!(value % 8 &amp;gt; 3) ? DK_LED4_MSK : 0);

	dk_set_leds(leds_mask);
}
static uint32_t total_bytes_received = 0;
static uint32_t last_report_time = 0;
void event_handler(struct esb_evt const *event)
{
    static uint32_t last_rx_timestamp = 0;

    switch (event-&amp;gt;evt_id) {
    case ESB_EVENT_RX_RECEIVED:
        while (esb_read_rx_payload(&amp;amp;rx_payload) == 0) {
            total_bytes_received += rx_payload.length;
        }
        
        uint32_t now = k_uptime_get();
        if (now - last_report_time &amp;gt;= 10000) {  // 每 10 秒报告一次吞吐量
            float time_elapsed = (now - last_report_time) / 1000.0f;  // 转换为秒
            float throughput = (total_bytes_received * 8) / time_elapsed / 1000000.0f;  // 计算吞吐量，单位为Mbps
            
            LOG_INF(&amp;quot;Throughput: %.2f Mbps (total bytes: %u)&amp;quot;, throughput, total_bytes_received);
            
            total_bytes_received = 0;  // 重置字节数
            last_report_time = now;   // 更新报告时间
        }
        break;
    }
}


#if defined(CONFIG_CLOCK_CONTROL_NRF)
int clocks_start(void)
{
	int err;
	int res;
	struct onoff_manager *clk_mgr;
	struct onoff_client clk_cli;

	clk_mgr = z_nrf_clock_control_get_onoff(CLOCK_CONTROL_NRF_SUBSYS_HF);
	if (!clk_mgr) {
		LOG_ERR(&amp;quot;Unable to get the Clock manager&amp;quot;);
		return -ENXIO;
	}

	sys_notify_init_spinwait(&amp;amp;clk_cli.notify);

	err = onoff_request(clk_mgr, &amp;amp;clk_cli);
	if (err &amp;lt; 0) {
		LOG_ERR(&amp;quot;Clock request failed: %d&amp;quot;, err);
		return err;
	}

	do {
		err = sys_notify_fetch_result(&amp;amp;clk_cli.notify, &amp;amp;res);
		if (!err &amp;amp;&amp;amp; res) {
			LOG_ERR(&amp;quot;Clock could not be started: %d&amp;quot;, res);
			return res;
		}
	} while (err);

#if defined(NRF54L15_XXAA)
	/* MLTPAN-20 */
	nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_PLLSTART);
#endif /* defined(NRF54L15_XXAA) */

	LOG_DBG(&amp;quot;HF clock started&amp;quot;);
	return 0;
}

#elif defined(CONFIG_CLOCK_CONTROL_NRF2)

int clocks_start(void)
{
	int err;
	int res;
	const struct device *radio_clk_dev =
		DEVICE_DT_GET_OR_NULL(DT_CLOCKS_CTLR(DT_NODELABEL(radio)));
	struct onoff_client radio_cli;

	/** Keep radio domain powered all the time to reduce latency. */
	nrf_lrcconf_poweron_force_set(NRF_LRCCONF010, NRF_LRCCONF_POWER_DOMAIN_1, true);

	sys_notify_init_spinwait(&amp;amp;radio_cli.notify);

	err = nrf_clock_control_request(radio_clk_dev, NULL, &amp;amp;radio_cli);

	do {
		err = sys_notify_fetch_result(&amp;amp;radio_cli.notify, &amp;amp;res);
		if (!err &amp;amp;&amp;amp; res) {
			LOG_ERR(&amp;quot;Clock could not be started: %d&amp;quot;, res);
			return res;
		}
	} while (err == -EAGAIN);

#if defined(NRF54L15_XXAA)
	/* MLTPAN-20 */
	nrf_clock_task_trigger(NRF_CLOCK, NRF_CLOCK_TASK_PLLSTART);
#endif /* defined(NRF54L15_XXAA) */

	LOG_DBG(&amp;quot;HF clock started&amp;quot;);

	return 0;
}

#else
BUILD_ASSERT(false, &amp;quot;No Clock Control driver&amp;quot;);
#endif /* defined(CONFIG_CLOCK_CONTROL_NRF2) */

int esb_initialize(void)
{
	int err;
	/* These are arbitrary default addresses. In end user products
	 * different addresses should be used for each set of devices.
	 */
	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};

	struct esb_config config = ESB_DEFAULT_CONFIG;

	config.protocol = ESB_PROTOCOL_ESB_DPL;
	config.bitrate = ESB_BITRATE_4MBPS;
	config.mode = ESB_MODE_PRX;
	config.event_handler = event_handler;
	config.selective_auto_ack = true;
	if (IS_ENABLED(CONFIG_ESB_FAST_SWITCHING)) {
		config.use_fast_ramp_up = true;
	}

	err = esb_init(&amp;amp;config);
	if (err) {
		return err;
	}

	err = esb_set_base_address_0(base_addr_0);
	if (err) {
		return err;
	}

	err = esb_set_base_address_1(base_addr_1);
	if (err) {
		return err;
	}

	err = esb_set_prefixes(addr_prefix, ARRAY_SIZE(addr_prefix));
	if (err) {
		return err;
	}

	return 0;
}

int main(void)
{
    int err;

    LOG_INF(&amp;quot;Enhanced ShockBurst prx sample&amp;quot;);

    err = clocks_start();
    if (err) {
        return 0;
    }

    err = dk_leds_init();
    if (err) {
        LOG_ERR(&amp;quot;LEDs initialization failed, err %d&amp;quot;, err);
        return 0;
    }

    err = esb_initialize();
    if (err) {
        LOG_ERR(&amp;quot;ESB initialization failed, err %d&amp;quot;, err);
        return 0;
    }

    LOG_INF(&amp;quot;Initialization complete&amp;quot;);

    err = esb_start_rx();
    if (err) {
        LOG_ERR(&amp;quot;RX setup failed, err %d&amp;quot;, err);
        return 0;
    }

    /* return to idle thread */
    return 0;
}
&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thank you for your reply. I used the ESB example for testing and only modified the main.c to add timestamps. However, the current measured transmission rate is only 0.12Mbps. How can I improve the transmission speed? In 4Mbps mode, I expected to achieve a transmission rate of 2-3Mbps.&lt;/p&gt;
&lt;p&gt;In addition to adding the timestamps, where else do I need to make adjustments? I increased the payload to 32 bytes. Is 32 bytes the maximum payload size for the NRF54L15?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to verify the 4Mbps transmission mode of the nRF54L15 series?</title><link>https://devzone.nordicsemi.com/thread/534663?ContentTypeID=1</link><pubDate>Fri, 09 May 2025 12:51:54 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7da3b100-0413-4083-a487-91d963b66573</guid><dc:creator>tesc</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;4 Mbit phy is for proprietary protocols only, not BLE (which goes up to 2 Mbit.)&lt;/p&gt;
&lt;p&gt;With the radio test sample in nRF Connect SDK v3.0.0, when building for the nRF54L15 DK, you should have the additional options to select &lt;code&gt;data_rate&lt;/code&gt; of &lt;code&gt;nrf_4Mbit_BT04&lt;/code&gt; and/or &lt;code&gt;nrf_4MbitBT06&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can also test it with Enhanced Shockburst (ESB) using the ESB samples, by changing the configuration structure in &lt;code&gt;main.c&lt;/code&gt; used for &lt;code&gt;esb_init()&lt;/code&gt; from&lt;/p&gt;
&lt;p&gt;&lt;code&gt;config.bitrate = ESB_BITRATE_2MBPS&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;to&lt;/p&gt;
&lt;p&gt;&lt;code&gt;config.bitrate = ESB_BITRATE_4MBPS&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Regards,&lt;br /&gt;Terje&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>