<?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>Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/126676/is-ble-raw-ieee-802-15-4-tx-phy-only-no-thread-zigbee-officially-supported-on-nrf52840-with-mpsl</link><description>Hello Nordic team, 
 
 I am working on an nRF52840 project using nRF Connect SDK (Zephyr-based, v2.x / v3.x) and I would like to clarify the official support status of a specific multiprotocol use case. 
 I have intentionally limited this question to</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 10 Feb 2026 23:36:17 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/126676/is-ble-raw-ieee-802-15-4-tx-phy-only-no-thread-zigbee-officially-supported-on-nrf52840-with-mpsl" /><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/560856?ContentTypeID=1</link><pubDate>Tue, 10 Feb 2026 23:36:17 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f039b1d5-255b-4b0d-ae2a-ceaa795c1889</guid><dc:creator>flcl73</dc:creator><description>&lt;p&gt;It looks like the issue was related to the RF performance of the nRF52840 DK board.&lt;br /&gt;After switching to our custom board, everything is working properly and the RF behavior is stable.&lt;/p&gt;
&lt;p&gt;It was a bit unexpected and confusing at first, but now the root cause seems clear.&lt;br /&gt;Thank you very much for your support and guidance throughout the debugging process &amp;mdash; it was really helpful.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Ryan&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;00&amp;gt; *** Booting nRF Connect SDK v3.2.1-d8887f6f32df ***
00&amp;gt; *** Using Zephyr OS v4.2.99-ec78104f1569 ***
00&amp;gt; [00:00:00.000,305] &amp;lt;inf&amp;gt; ieee802154_tx: === Step 1: Starting ===
00&amp;gt; [00:00:00.100,463] &amp;lt;inf&amp;gt; ieee802154_tx: === Step 2: Initializing Radio ===
00&amp;gt; [00:00:00.200,836] &amp;lt;inf&amp;gt; ieee802154_tx: === Step 3: Setting Channel ===
00&amp;gt; [00:00:00.300,964] &amp;lt;inf&amp;gt; ieee802154_tx: === Step 4: Setting TX Power ===
00&amp;gt; [00:00:00.401,092] &amp;lt;inf&amp;gt; ieee802154_tx: === Step 5: Setting Promiscuous Mode ===
00&amp;gt; [00:00:00.501,220] &amp;lt;inf&amp;gt; ieee802154_tx: === Step 6: Entering RX Mode ===
00&amp;gt; [00:00:00.501,373] &amp;lt;inf&amp;gt; ieee802154_tx: RX mode entered successfully.
00&amp;gt; [00:00:01.001,495] &amp;lt;inf&amp;gt; ieee802154_tx: === Radio Ready! Starting TX Loop ===
00&amp;gt; 
00&amp;gt; [00:00:01.001,586] &amp;lt;inf&amp;gt; ieee802154_tx: TX Packet #1 [Dest: 0xFFFF, Src: 0x1111, PAN: 0x2435]
00&amp;gt; [00:00:01.001,678] &amp;lt;inf&amp;gt; ieee802154_tx: Transmit request accepted. (ret = 0)
00&amp;gt; [00:00:01.003,601] &amp;lt;inf&amp;gt; ieee802154_tx: &amp;gt;&amp;gt;&amp;gt; TX Success!
00&amp;gt; ]
00&amp;gt; 
00&amp;gt; 
00&amp;gt; 
00&amp;gt; [00:00:28.007,690] &amp;lt;inf&amp;gt; ieee802154_tx: TX Packet #28 [Dest: 0xFFFF, Src: 0x1111, PAN: 0x2435]
00&amp;gt; [00:00:28.007,812] &amp;lt;inf&amp;gt; ieee802154_tx: Transmit request accepted. (ret = 0)
00&amp;gt; [00:00:28.009,735] &amp;lt;inf&amp;gt; ieee802154_tx: &amp;gt;&amp;gt;&amp;gt; TX Success!
00&amp;gt; [00:00:29.007,965] &amp;lt;inf&amp;gt; ieee802154_tx: TX Packet #29 [Dest: 0xFFFF, Src: 0x1111, PAN: 0x2435]
00&amp;gt; [00:00:29.008,056] &amp;lt;inf&amp;gt; ieee802154_tx: Transmit request accepted. (ret = 0)
00&amp;gt; [00:00:29.009,979] &amp;lt;inf&amp;gt; ieee802154_tx: &amp;gt;&amp;gt;&amp;gt; TX Success!
00&amp;gt; [00:00:30.008,178] &amp;lt;inf&amp;gt; ieee802154_tx: TX Packet #30 [Dest: 0xFFFF, Src: 0x1111, PAN: 0x2435]
00&amp;gt; [00:00:30.008,300] &amp;lt;inf&amp;gt; ieee802154_tx: Transmit request accepted. (ret = 0)
00&amp;gt; [00:00:30.010,223] &amp;lt;inf&amp;gt; ieee802154_tx: &amp;gt;&amp;gt;&amp;gt; TX Success!
00&amp;gt; [00:00:31.008,453] &amp;lt;inf&amp;gt; ieee802154_tx: TX Packet #31 [Dest: 0xFFFF, Src: 0x1111, PAN: 0x2435]
00&amp;gt; [00:00:31.008,544] &amp;lt;inf&amp;gt; ieee802154_tx: Transmit request accepted. (ret = 0)&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/560769?ContentTypeID=1</link><pubDate>Tue, 10 Feb 2026 09:56:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:992cfb0f-50a1-4d6b-a673-357e57e63a71</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;This is the log from the unmodified application that you sent:&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1770716532307v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;So apparently, nrf_802154_transmitted() is being triggered.&lt;/p&gt;
&lt;p&gt;However, I do see in your main loop:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;        if (!nrf_802154_transmit_raw(tx_frame, &amp;amp;metadata)) {
            LOG_ERR(&amp;quot;TX rejected! Attempting driver reset...&amp;quot;);                
        }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;But if nrf_802154_transmit_raw returns&amp;nbsp;NRF_802154_TX_ERROR_NONE (=0), then it is a success. I did some changes, but mostly in error checking and logging. Try the attached project, and let me know the log output:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devzone.nordicsemi.com/cfs-file/__key/communityserver-discussions-components-files/4/802154_5F00_tx_5F00_test2.zip"&gt;devzone.nordicsemi.com/.../802154_5F00_tx_5F00_test2.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Note that I enabled UART logging in prj.conf. Disable it if you don&amp;#39;t need it.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/560728?ContentTypeID=1</link><pubDate>Tue, 10 Feb 2026 01:29:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5c18aceb-95c3-4609-9192-e8174b4db8a9</guid><dc:creator>flcl73</dc:creator><description>&lt;p&gt;Sure, I will zip the entire application folder (including all files) and upload it here shortly.&lt;/p&gt;
&lt;p&gt;Regarding your question, the issue happens not only with &lt;strong data-start="719" data-end="729"&gt;0xFFFF&lt;/strong&gt;, but also with unicast messages.&lt;br data-start="762" data-end="765" /&gt; In other words, I am missing replies for all messages.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Ryan&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devzone.nordicsemi.com/cfs-file/__key/communityserver-discussions-components-files/4/802154_5F00_tx_5F00_test.zip"&gt;devzone.nordicsemi.com/.../802154_5F00_tx_5F00_test.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/560522?ContentTypeID=1</link><pubDate>Fri, 06 Feb 2026 09:14:19 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:eac98aa5-03a2-49be-b09b-c4648164d2bb</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Can you please zip and upload the entire application folder (Not just some of the files)? This way I can try to reproduce what you are seeing. Are you only missing the replies when you use the 0xFFFF address? Or is it for all messages?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/560497?ContentTypeID=1</link><pubDate>Fri, 06 Feb 2026 01:00:23 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4efe32d6-8c5e-4d22-85df-a7e0a255dadf</guid><dc:creator>flcl73</dc:creator><description>&lt;p&gt;Yes. transmit_raw() returns success (err=0), but no callback is triggered at all.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Ryan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/560427?ContentTypeID=1</link><pubDate>Thu, 05 Feb 2026 11:17:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0b7f246d-8eef-4727-b3f8-d7e5ee60cba6</guid><dc:creator>Edvin</dc:creator><description>[quote user="Edvin Holmseth"]If you stop sending packet after the first&amp;nbsp;&lt;span&gt;nrf_802154_transmit_raw(), do you see any of the interrupts then? You should see either nrf_802154_transmitted() or nrf_802154_transmit_failed() occur once. As far as I know, this is the way openthread and Zigbee uses it.&lt;/span&gt;[/quote]
&lt;p&gt;Did you test queuing up only one packet, and see if you get any of the callbacks?&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/560274?ContentTypeID=1</link><pubDate>Tue, 03 Feb 2026 23:37:33 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e9a64222-c5f8-4609-9054-78abb98ad932</guid><dc:creator>flcl73</dc:creator><description>&lt;p&gt;According to IEEE 802.15.4, a broadcast data frame is defined by a destination short address of 0xFFFF, while still using a valid PAN ID and including a source address.&lt;br data-start="2940" data-end="2943" /&gt; The previous version of the code omitted the source address and used PAN ID 0xFFFF, which is not a valid broadcast data frame configuration.&lt;br data-start="3085" data-end="3088" /&gt; The updated code below uses a standard data frame with short destination and source addresses, destination address 0xFFFF, ACK disabled, and a valid PAN ID.&lt;/p&gt;
&lt;p&gt;[change code]&lt;/p&gt;
&lt;p&gt;/*&lt;br /&gt; * PHR length = MHR + Payload + FCS(2)&lt;br /&gt; * MHR = FCF(2) + Seq(1) + DstPAN(2) + DstAddr(2) + SrcAddr(2)&lt;br /&gt; */&lt;br /&gt; tx_frame[idx++] = 2 + 1 + 2 + 2 + 2 + PAYLOAD_SIZE + 2;&lt;/p&gt;
&lt;p&gt;/* FCF: Data frame&lt;br /&gt; * - Data frame&lt;br /&gt; * - No ACK request&lt;br /&gt; * - Short destination address&lt;br /&gt; * - Short source address&lt;br /&gt; */&lt;br /&gt; tx_frame[idx++] = 0x41;&lt;br /&gt; tx_frame[idx++] = 0x88;&lt;/p&gt;
&lt;p&gt;/* Sequence number */&lt;br /&gt; tx_frame[idx++] = seq;&lt;/p&gt;
&lt;p&gt;/* Destination PAN ID = local PAN */&lt;br /&gt; tx_frame[idx++] = 0x34;&lt;br /&gt; tx_frame[idx++] = 0x12; // PAN ID = 0x1234&lt;/p&gt;
&lt;p&gt;/* Destination Address = Broadcast */&lt;br /&gt; tx_frame[idx++] = 0xFF;&lt;br /&gt; tx_frame[idx++] = 0xFF;&lt;/p&gt;
&lt;p&gt;/* Source Address */&lt;br /&gt; tx_frame[idx++] = 0x01;&lt;br /&gt; tx_frame[idx++] = 0x00;&lt;/p&gt;
&lt;p&gt;Based on the results from the various test cases so far, it does not appear that the issue is caused by an incorrectly constructed broadcast frame.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Ryan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/560237?ContentTypeID=1</link><pubDate>Tue, 03 Feb 2026 13:50:07 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c693b97a-2c27-4099-86d8-4a929e88f062</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;It has been a really long time since I last looked into this, but nrf_802154_transmit_raw() is something that you need to handle very carefully in your application when you don&amp;#39;t use a protocol on top of it. If you read the description carefully from:&lt;/p&gt;
&lt;p&gt;v3.2.1\modules\hal\nordic\drivers\nrf_802154\common\include\nrf_802154.h:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/**
 * @brief Changes the radio state to @ref RADIO_STATE_TX.
 *
 * @note If the CPU is halted or interrupted while this function is executed,
 *       @ref nrf_802154_transmitted_raw or @ref nrf_802154_transmit_failed can be called before this
 *       function returns a result.
 *
 * @note This function is implemented in zero-copy fashion. It passes the given buffer pointer to
 *       the RADIO peripheral.
 *
 * @note Setting @p tx_timestamp_encode to true is only allowed if
 *       @ref NRF_802154_TX_TIMESTAMP_PROVIDER_ENABLED is enabled.
 *       If this condition is not met, any attempt to transmit a frame will fail unconditionally.
 *
 * In the transmit state, the radio transmits a given frame. If requested, it waits for
 * an ACK frame. Depending on @ref NRF_802154_ACK_TIMEOUT_ENABLED, the radio driver automatically
 * stops waiting for an ACK frame or waits indefinitely for an ACK frame. If it is configured to
 * wait, the MAC layer is responsible for calling @ref nrf_802154_receive or
 * @ref nrf_802154_sleep after the ACK timeout.
 * The transmission result is reported to the higher layer by calls to @ref nrf_802154_transmitted_raw
 * or @ref nrf_802154_transmit_failed.
 *
 * @verbatim
 * p_data
 * v
 * +-----+-----------------------------------------------------------+------------+
 * | PHR | MAC header and payload                                    | FCS        |
 * +-----+-----------------------------------------------------------+------------+
 *       |                                                                        |
 *       | &amp;lt;---------------------------- PHR -----------------------------------&amp;gt; |
 * @endverbatim
 *
 * @param[in]  p_data      Pointer to the array with data to transmit. The first byte must contain
 *                         frame length (including FCS). The following bytes contain data.
 *                         The CRC is computed automatically by the radio hardware. Therefore,
 *                         the FCS field can contain any bytes.
 * @param[in]  p_metadata  Pointer to metadata structure. Contains detailed properties of data
 *                         to transmit. If @c NULL following metadata are used:
 *                         Field           | Value
 *                         ----------------|-----------------------------------------------------
 *                         @c frame_props  | @ref NRF_802154_TRANSMITTED_FRAME_PROPS_DEFAULT_INIT
 *                         @c cca          | @c true
 *                         @c tx_timestamp_encode | @c false
 *
 * @retval NRF_802154_TX_ERROR_NONE  The TX request was successful.
 *                                   Transmit success or failure will be indicated by the callout.
 *
 * @returns Error that prevented the frame from being transmitted.
 *          No callout will be called.
 */
nrf_802154_tx_error_t nrf_802154_transmit_raw(uint8_t                              * p_data,
                                              const nrf_802154_transmit_metadata_t * p_metadata);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;So first of all, after the first packet (TX seq=1), you should&amp;nbsp;&lt;strong&gt;not&lt;/strong&gt; call nrf_802154_transmit_raw() again before you receive any of the callbacks.&lt;/p&gt;
&lt;p&gt;If you stop sending packet after the first&amp;nbsp;&lt;span&gt;nrf_802154_transmit_raw(), do you see any of the interrupts then? You should see either nrf_802154_transmitted() or nrf_802154_transmit_failed() occur once. As far as I know, this is the way openthread and Zigbee uses it.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;See if that helps.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Best regards,&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: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/560173?ContentTypeID=1</link><pubDate>Tue, 03 Feb 2026 01:38:41 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9cb79817-e41f-43e1-bbe0-f13ff1097d10</guid><dc:creator>flcl73</dc:creator><description>&lt;p&gt;Hello.&lt;/p&gt;
&lt;p&gt;I implemented the 0xFFFF broadcast frame as you suggested.&lt;/p&gt;
&lt;p&gt;**Frame structure (19 bytes total):**&lt;br /&gt;- PHR: 0x13 (19 bytes)&lt;br /&gt;- FCF: 0x41 0x88 (Data, no ACK, short dest, no src)&lt;br /&gt;- Seq: incrementing&lt;br /&gt;- Dst PAN: 0xFF 0xFF&lt;br /&gt;- Dst Addr: 0xFF 0xFF&lt;br /&gt;- Payload: 10 bytes (0xA0-0xA9)&lt;/p&gt;
&lt;p&gt;[log]&lt;br /&gt;00&amp;gt; ============================================&lt;br /&gt;00&amp;gt; IEEE 802.15.4 Broadcast TX Test&lt;br /&gt;00&amp;gt; NCS v3.2.1 - 0xFFFF Broadcast&lt;br /&gt;00&amp;gt; ============================================&lt;br /&gt;00&amp;gt; &lt;br /&gt;00&amp;gt; Step 1: Init radio&lt;br /&gt;00&amp;gt; Step 2: Set channel 20, power 0 dBm&lt;br /&gt;00&amp;gt; Step 3: Set PAN ID to 0xFFFF&lt;br /&gt;00&amp;gt; Step 4: Start RX mode&lt;br /&gt;00&amp;gt; Ready! Starting TX loop...&lt;br /&gt;00&amp;gt; &lt;br /&gt;00&amp;gt; [1102] TX seq=1, len=19... Queued&lt;br /&gt;00&amp;gt; [2103] TX seq=2, len=19... ERROR 1&lt;br /&gt;00&amp;gt; [3103] TX seq=3, len=19... ERROR 1&lt;br /&gt;00&amp;gt; [4103] TX seq=4, len=19... ERROR 1&lt;br /&gt;00&amp;gt; [5104] TX seq=5, len=19... ERROR 1&lt;br /&gt;00&amp;gt; [6104] TX seq=6, len=19... ERROR 1&lt;br /&gt;00&amp;gt; [7104] TX seq=7, len=19... ERROR 1&lt;br /&gt;00&amp;gt; [8105] TX seq=8, len=19... ERROR 1&lt;br /&gt;00&amp;gt; [9105] TX seq=9, len=19... ERROR 1&lt;br /&gt;00&amp;gt; [10105] TX seq=10, len=19... ERROR 1&lt;br /&gt;00&amp;gt; &lt;br /&gt;00&amp;gt; === Sent 10 packets ===&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Ryan&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;zephyr/logging/log.h&amp;gt;
#include &amp;lt;zephyr/sys/printk.h&amp;gt;
#include &amp;lt;nrf_802154.h&amp;gt;

LOG_MODULE_REGISTER(ieee802154_tx, LOG_LEVEL_INF);

#define TX_INTERVAL_MS 1000
#define PAYLOAD_SIZE   10

static uint8_t tx_frame[128];
static uint8_t seq = 0;

void mpsl_assert_handle(const char *const file, const uint32_t line)
{
    printk(&amp;quot;MPSL ASSERT: %s:%u\n&amp;quot;, file, line);
    k_panic();
}

void nrf_802154_transmitted_raw(
    uint8_t *p_frame,
    const nrf_802154_transmit_done_metadata_t *p_metadata)
{
    printk(&amp;quot;\n&amp;gt;&amp;gt;&amp;gt; TX SUCCESS (seq=%u) &amp;lt;&amp;lt;&amp;lt;\n\n&amp;quot;, p_frame[3]);
}

void nrf_802154_transmit_failed(
    uint8_t *p_frame,
    nrf_802154_tx_error_t error,
    const nrf_802154_transmit_done_metadata_t *p_metadata)
{
    printk(&amp;quot;\n&amp;gt;&amp;gt;&amp;gt; TX FAILED (seq=%u, err=%d) &amp;lt;&amp;lt;&amp;lt;\n\n&amp;quot;, p_frame[3], error);
}

void nrf_802154_received_raw(uint8_t *p_data, int8_t power, uint8_t lqi)
{
    printk(&amp;quot;RX packet received\n&amp;quot;);
    nrf_802154_buffer_free_raw(p_data);
}

void nrf_802154_receive_failed(nrf_802154_rx_error_t error, uint32_t id)
{
    ARG_UNUSED(error);
    ARG_UNUSED(id);
}

void nrf_802154_cca_done(bool channel_free)
{
    ARG_UNUSED(channel_free);
}

void nrf_802154_cca_failed(nrf_802154_cca_error_t error)
{
    ARG_UNUSED(error);
}

void nrf_802154_energy_detected(const nrf_802154_energy_detected_t *p_result)
{
    ARG_UNUSED(p_result);
}

void nrf_802154_energy_detection_failed(nrf_802154_ed_error_t error)
{
    ARG_UNUSED(error);
}

int main(void)
{
    printk(&amp;quot;\n============================================\n&amp;quot;);
    printk(&amp;quot;IEEE 802.15.4 Broadcast TX Test\n&amp;quot;);
    printk(&amp;quot;NCS v3.2.1 - 0xFFFF Broadcast\n&amp;quot;);
    printk(&amp;quot;============================================\n\n&amp;quot;);
    
    k_msleep(500);
    
    printk(&amp;quot;Step 1: Init radio\n&amp;quot;);
    nrf_802154_init();
    k_msleep(100);
    
    printk(&amp;quot;Step 2: Set channel 20, power 0 dBm\n&amp;quot;);
    nrf_802154_channel_set(20);
    nrf_802154_tx_power_set(0);
    
    printk(&amp;quot;Step 3: Set PAN ID to 0xFFFF\n&amp;quot;);
    uint8_t pan[2] = {0xFF, 0xFF};
    nrf_802154_pan_id_set(pan);
    
    printk(&amp;quot;Step 4: Start RX mode\n&amp;quot;);
    if (!nrf_802154_receive()) {
        printk(&amp;quot;ERROR: Failed to start RX!\n&amp;quot;);
        return -1;
    }
    
    k_msleep(500);
    printk(&amp;quot;Ready! Starting TX loop...\n\n&amp;quot;);
    
    while (1) {
        uint8_t idx = 0;
        seq++;
        
        // PHR: Length
        tx_frame[idx++] = 19;  // FCF(2) + Seq(1) + PAN(2) + Addr(2) + Payload(10) + FCS(2)
        
        // FCF
        tx_frame[idx++] = 0x41;  // Data, no ACK
        tx_frame[idx++] = 0x88;  // Short dest, no src
        
        // Sequence
        tx_frame[idx++] = seq;
        
        // Dst PAN = 0xFFFF
        tx_frame[idx++] = 0xFF;
        tx_frame[idx++] = 0xFF;
        
        // Dst Addr = 0xFFFF
        tx_frame[idx++] = 0xFF;
        tx_frame[idx++] = 0xFF;
        
        // Payload
        for (uint8_t i = 0; i &amp;lt; PAYLOAD_SIZE; i++) {
            tx_frame[idx++] = 0xA0 + i;
        }
        
        printk(&amp;quot;[%u] TX seq=%u, len=%u... &amp;quot;, k_uptime_get_32(), seq, tx_frame[0]);
        
        nrf_802154_transmit_metadata_t metadata = {
            .frame_props = {
                .is_secured = false,
                .dynamic_data_is_set = true
            },
            .cca = false,
            .tx_power = {
                .use_metadata_value = false,
                .power = 0
            },
            .tx_channel = {
                .use_metadata_value = false,
                .channel = 20
            },
            .tx_timestamp_encode = false
        };
        
        nrf_802154_tx_error_t err = nrf_802154_transmit_raw(tx_frame, &amp;amp;metadata);
        
        if (err != NRF_802154_TX_ERROR_NONE) {
            printk(&amp;quot;ERROR %d\n&amp;quot;, err);
        } else {
            printk(&amp;quot;Queued\n&amp;quot;);
        }
        
        k_msleep(TX_INTERVAL_MS);
        
        if (seq % 10 == 0) {
            printk(&amp;quot;\n=== Sent %u packets ===\n\n&amp;quot;, seq);
        }
    }
    
    return 0;
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/560119?ContentTypeID=1</link><pubDate>Mon, 02 Feb 2026 12:41:38 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8c501f95-f0b4-4479-a85c-cd7877de08ac</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;It may be correct, but can you please point to where it says that 0xFFFF packets should be broadcast packets?&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/559834?ContentTypeID=1</link><pubDate>Wed, 28 Jan 2026 23:21:05 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:88ebe25a-4068-4a75-9b2a-000fbb8bdb01</guid><dc:creator>flcl73</dc:creator><description>&lt;p&gt;Yes, I tested the 802154_phy_test sample without any custom modifications.&lt;/p&gt;
&lt;p&gt;The sample builds and runs, and I can access the shell commands (e.g. custom channel, custom rx start).&lt;br /&gt;However, I am not able to confirm successful transmission or reception of 0xFFFF broadcast packets.&lt;/p&gt;
&lt;p&gt;On the RX side, I only see repeated logs like:&lt;br /&gt;&amp;ldquo;rf_proc: rx failed error X&amp;rdquo;&lt;br /&gt;and I never see any successful RX indication.&lt;/p&gt;
&lt;p&gt;So at the moment, I am not able to verify that 0xFFFF packets are actually transmitted or received,&lt;br /&gt;even when using the 802154_phy_test sample as-is.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Ryan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/559771?ContentTypeID=1</link><pubDate>Wed, 28 Jan 2026 11:49:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:cb76d0f4-2279-462f-bff9-c989c6aca694</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Did you test the sample in my previous reply? Are you able to send the 0xFFFF packets there?&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/559727?ContentTypeID=1</link><pubDate>Tue, 27 Jan 2026 23:26:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ae24b45e-5b43-45e5-a6a8-1a8b292acb99</guid><dc:creator>flcl73</dc:creator><description>&lt;p&gt;Hello.&lt;/p&gt;
&lt;p&gt;[My test Environment]&lt;/p&gt;
&lt;p&gt;boards: nRF52840DK&lt;/p&gt;
&lt;p&gt;SDK: ncs v3.1.2 Toolchain: v3.2.1&lt;/p&gt;
&lt;p&gt;The code below is a test application that periodically transmits 802.15.4 frames.&lt;br /&gt;It was written to send periodic broadcast packets (dst: 0xFFFF) without ACK, but no packets are actually transmitted and the transmit callback functions are never called.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Ryan&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;[main.c]
#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;zephyr/logging/log.h&amp;gt;
#include &amp;lt;zephyr/sys/printk.h&amp;gt;
#include &amp;lt;nrf_802154.h&amp;gt;

LOG_MODULE_REGISTER(step_a_tx, LOG_LEVEL_INF);

static volatile bool tx_done = true;
static volatile uint32_t tx_success_count = 0;
static volatile uint32_t tx_fail_count = 0;

void mpsl_assert_handle(const char *const file, const uint32_t line)
{
    printk(&amp;quot;MPSL ASSERT: %s:%u\n&amp;quot;, file, line);
    k_panic();
}

void nrf_802154_transmitted_raw(
    uint8_t *p_frame,
    const nrf_802154_transmit_done_metadata_t *p_metadata)
{
    ARG_UNUSED(p_frame);
    ARG_UNUSED(p_metadata);
    tx_success_count++;
    printk(&amp;quot;!!! TX SUCCESS #%u !!!\n\n&amp;quot;, tx_success_count);
    tx_done = true;
}

void nrf_802154_transmit_failed(
    uint8_t *p_frame,
    nrf_802154_tx_error_t error,
    const nrf_802154_transmit_done_metadata_t *p_metadata)
{
    ARG_UNUSED(p_frame);
    ARG_UNUSED(p_metadata);
    tx_fail_count++;
    printk(&amp;quot;!!! TX FAILED: error=%d #%u !!!\n\n&amp;quot;, error, tx_fail_count);
    tx_done = true;
}

void nrf_802154_received_raw(uint8_t *p_data, int8_t power, uint8_t lqi)
{
    nrf_802154_buffer_free_raw(p_data);
}

void nrf_802154_receive_failed(nrf_802154_rx_error_t error, uint32_t id)
{
    ARG_UNUSED(error);
    ARG_UNUSED(id);
}

void nrf_802154_cca_done(bool channel_free)
{
    ARG_UNUSED(channel_free);
}

void nrf_802154_cca_failed(nrf_802154_cca_error_t error)
{
    ARG_UNUSED(error);
}

void nrf_802154_energy_detected(const nrf_802154_energy_detected_t *p_result)
{
    ARG_UNUSED(p_result);
}

void nrf_802154_energy_detection_failed(nrf_802154_ed_error_t error)
{
    ARG_UNUSED(error);
}

int main(void)
{
    printk(&amp;quot;\n===========================================\n&amp;quot;);
    printk(&amp;quot;IEEE 802.15.4 TX Test - FINAL ATTEMPT\n&amp;quot;);
    printk(&amp;quot;NCS v3.2.1\n&amp;quot;);
    printk(&amp;quot;===========================================\n\n&amp;quot;);
    
    k_msleep(500);
    
    printk(&amp;quot;Init...\n&amp;quot;);
    nrf_802154_init();
    k_msleep(100);
    
    nrf_802154_channel_set(20);
    nrf_802154_tx_power_set(0);
    nrf_802154_promiscuous_set(true);
    nrf_802154_sleep();
    k_msleep(100);
    
    printk(&amp;quot;Ready!\n\n&amp;quot;);
    
    static uint8_t tx_pkt[128];
    uint8_t seq = 0;
    
    while (1) {
        if (tx_done) {
            tx_done = false;
            
            uint8_t idx = 0;
            
            // min frame: PHR + FCF(no ACK) + Seq + Payload
            tx_pkt[idx++] = 5;        // Length: FCF(2) + Seq(1) + FCS(2) = 5
            tx_pkt[idx++] = 0x01;     // FCF low: 0x01 (Beacon frame, simplest)
            tx_pkt[idx++] = 0x00;     // FCF high: 0x00
            tx_pkt[idx++] = seq;      // Sequence
            // FCS auto add
            
            printk(&amp;quot;TX #%u: &amp;quot;, seq);
            
            // Metadata - init
            nrf_802154_transmit_metadata_t metadata = {
                .frame_props = {
                    .is_secured = false,
                    .dynamic_data_is_set = true 
                },
                .cca = false,
                .tx_power = {
                    .use_metadata_value = false,
                    .power = 0
                },
                .tx_channel = {
                    .use_metadata_value = false,
                    .channel = 20
                },
                .tx_timestamp_encode = false
            };
            
            nrf_802154_tx_error_t err = nrf_802154_transmit_raw(tx_pkt, &amp;amp;metadata);
            
            if (err != NRF_802154_TX_ERROR_NONE) {
                printk(&amp;quot;ERROR %d\n\n&amp;quot;, err);
                tx_done = true;
            } else {
                printk(&amp;quot;Queued...\n&amp;quot;);
                
                int timeout = 1000;
                int waited = 0;
                
                while (!tx_done &amp;amp;&amp;amp; waited &amp;lt; timeout) {
                    k_msleep(50);
                    waited += 50;
                }
                
                if (!tx_done) {
                    printk(&amp;quot;TIMEOUT\n\n&amp;quot;);
                    tx_done = true;
                }
            }
            
            seq++;
        }
        
        if (seq % 10 == 0 &amp;amp;&amp;amp; seq &amp;gt; 0) {
            printk(&amp;quot;Stats: Success=%u, Failed=%u\n\n&amp;quot;, 
                   tx_success_count, tx_fail_count);
        }
        
        k_sleep(K_SECONDS(1));
    }
    
    return 0;
}
[prj.conf]
# Logging
CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=3
CONFIG_USE_SEGGER_RTT=y
CONFIG_LOG_BACKEND_RTT=y
CONFIG_LOG_BACKEND_UART=n
CONFIG_RTT_CONSOLE=y
CONFIG_PRINTK=y
CONFIG_LOG_MODE_IMMEDIATE=y

# IEEE 802.15.4 Raw API
CONFIG_NRF_802154_RADIO_DRIVER=y

# MPSL
CONFIG_MPSL=y
CONFIG_MPSL_ASSERT_HANDLER=y
CONFIG_NRF_802154_TEMPERATURE_UPDATE=n

# Stack sizes
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096
CONFIG_ISR_STACK_SIZE=2048

#IRQ
CONFIG_ZERO_LATENCY_IRQS=y

# Assert
CONFIG_ASSERT=y
CONFIG_ASSERT_VERBOSE=y
[log]
00&amp;gt; *** Booting nRF Connect SDK v3.2.1-d8887f6f32df ***
00&amp;gt; *** Using Zephyr OS v4.2.99-ec78104f1569 ***
00&amp;gt; 
00&amp;gt; ===========================================
00&amp;gt; IEEE 802.15.4 TX Test - FINAL ATTEMPT
00&amp;gt; NCS v3.2.1
00&amp;gt; ===========================================
00&amp;gt; 
00&amp;gt; Init...
00&amp;gt; Ready!
00&amp;gt; 
00&amp;gt; TX #0: Queued...
00&amp;gt; TIMEOUT
00&amp;gt; 
00&amp;gt; TX #1: ERROR 1
00&amp;gt; 
00&amp;gt; TX #2: ERROR 1
00&amp;gt; 
00&amp;gt; TX #3: ERROR 1
00&amp;gt; 
00&amp;gt; TX #4: ERROR 1
00&amp;gt; 
00&amp;gt; TX #5: ERROR 1
00&amp;gt; 
00&amp;gt; TX #6: ERROR 1
00&amp;gt; 
00&amp;gt; TX #7: ERROR 1
00&amp;gt; 
00&amp;gt; TX #8: ERROR 1
00&amp;gt; 
00&amp;gt; TX #9: ERROR 1
00&amp;gt; 
00&amp;gt; Stats: Success=0, Failed=0&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/559650?ContentTypeID=1</link><pubDate>Tue, 27 Jan 2026 09:47:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ad58443a-1d34-4a56-8c2b-226e8049bcb8</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;You can upload it, and I can try to run it. Please let me know what NCS version you are using.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/559609?ContentTypeID=1</link><pubDate>Mon, 26 Jan 2026 23:26:10 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:20e3af6d-2266-456c-9730-20ef8ff89ce5</guid><dc:creator>flcl73</dc:creator><description>&lt;p&gt;Hello.&lt;/p&gt;
&lt;p data-start="126" data-end="365"&gt;I understand that there is no official reference code available for this specific use case.&lt;br data-start="217" data-end="220" /&gt; As a first step, I am trying to implement periodic TX using IEEE 802.15.4 only, but even this basic periodic transmission is not working yet.&lt;/p&gt;
&lt;p data-start="372" data-end="482"&gt;If I upload the source code I have been working on, would it be possible to receive support or feedback on it?&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Ryan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Is BLE + raw IEEE 802.15.4 TX (PHY only, no Thread/Zigbee) officially supported on nRF52840 with MPSL?</title><link>https://devzone.nordicsemi.com/thread/559559?ContentTypeID=1</link><pubDate>Mon, 26 Jan 2026 12:00:13 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a678f8a2-d6ae-48e6-b0b9-fb1a552be383</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;You should be able to use 802154_phy_test together with MPSL+BLE. It is only BLE that has hard timing requirements, while the rest of the time can be spent on 802154. We don&amp;#39;t have any samples showing exactly how to do this, but I imagine that you can take any of the ble+Zigbee/Thread samples, strip out the zigbee/thread, and replace it with what you find in NCS\nrf\samples\peripheral\802154_phy_test, and go from there.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;For follow up questions, please don&amp;#39;t use chatGPT or other AI tools to format your questions. It makes it difficult to know what you are really asking for, and what the AI made up.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>