<?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>IEEE 802.15.4 ACK Frame seems to get lost</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/70599/ieee-802-15-4-ack-frame-seems-to-get-lost</link><description>I am developing an IEEE 802.15.4 Application on the nRF52840 using the Radio Driver (v1.8.0) . I have a problem with the transmit call function. Very often in nrf_802154_transmitted_timestamp_raw(...) p_ack is NULL even when there was an ACK frame. So</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 20 Jan 2021 14:41:03 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/70599/ieee-802-15-4-ack-frame-seems-to-get-lost" /><item><title>RE: IEEE 802.15.4 ACK Frame seems to get lost</title><link>https://devzone.nordicsemi.com/thread/290308?ContentTypeID=1</link><pubDate>Wed, 20 Jan 2021 14:41:03 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:37122cd3-55f4-405a-b568-23c665d1ca24</guid><dc:creator>MeisterBob</dc:creator><description>&lt;p&gt;I tracked it down to &lt;span style="color:#000000;"&gt;ack_is_requested() in nrf_802154_core.c. In this function the destination address is compared to the own address to determine if an ack is requested (Yes, that has nothing to do with the ack request). I replaced this with the implementation from the v1.9.0 driver - just check if the ack request bit is set. Maybe I should update the driver in my environment.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: IEEE 802.15.4 ACK Frame seems to get lost</title><link>https://devzone.nordicsemi.com/thread/290174?ContentTypeID=1</link><pubDate>Wed, 20 Jan 2021 09:43:49 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d7d7d03c-d73e-46d1-b824-46528a34b8de</guid><dc:creator>MeisterBob</dc:creator><description>&lt;p&gt;I threw the debugger onto the problem and checked the NRF_RADIO register in both cases. The Registers differ in 4 values. When I receive an ACK frame:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;EVENTS_DEVMISS: 0x00000001
EVENTS_CCASTOPPED: 0x00000000
RXCRC: 0x000028b4
RSSISAMPLE: 0x0000001c&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;When the ACK is NULL the values are&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;EVENTS_DEVMISS: 0x00000000
EVENTS_CCASTOPPED: 0x00000001
RXCRC: 0x000096f5
RSSISAMPLE: 0x0000001b&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;RXCRC and RSSISAMPLE need to be different, maybe the two events help finding the problem.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: IEEE 802.15.4 ACK Frame seems to get lost</title><link>https://devzone.nordicsemi.com/thread/289845?ContentTypeID=1</link><pubDate>Mon, 18 Jan 2021 16:09:59 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f785a01c-5bcc-49ab-9865-89df287fccba</guid><dc:creator>MeisterBob</dc:creator><description>&lt;p&gt;I changes the code from above (Line 9):&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;void nrf_802154_transmitted_timestamp_raw(const uint8_t *p_frame, uint8_t *p_ack, int8_t power, uint8_t lqi, uint32_t time) {
  if (p_ack != NULL) {
    /* ACK received, check if pending bit is set */
    ack = (p_ack[FRAME_PENDING_OFFSET] &amp;amp; FRAME_PENDING_BIT) ? IEEE802154_ACK_PENDING : IEEE802154_ACK_NO_PENDING;
    nrf_802154_buffer_free_raw(p_ack);
  } else {
    if ((p_frame[1] &amp;amp; 0x20) == 0x20) {
      /* the ACK frame seem to have been lost */
      ack = IEEE802154_ACK_INVALID;
    } else {
      /* no ACK requested */
      ack = IEEE802154_ACK_NO;
    }
  }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devzone.nordicsemi.com/cfs-file/__key/communityserver-discussions-components-files/4/ack.pcapng"&gt;devzone.nordicsemi.com/.../ack.pcapng&lt;/a&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The first Frames have the ACK request bit set but there is no ACK, nrf_802154_transmit_failed() is called. Frame 5 (seq_no 3) is a Ping from the nRF device with ACK request that is ACKed with pending Bit set (Frame 6). As it should be, nrf_802154_transmitted_timestamp_raw() is called with the p_ack set and ack is set to IEEE802154_ACK_PENDING. So far so good.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;All the other Frames have the ACK request Bit set as well and nrf_802154_transmitted_timestamp_raw() is called as it should be, but p_ack is 0x0 and ack is set to IEEE802154_ACK_INVALID. Imho that shouldn&amp;#39;t happen. If there is an ACK, p_ack should be set, if there is no ACK nrf_802154_transmit_failed() should be called instead of nrf_802154_transmitted_timestamp_raw().&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: IEEE 802.15.4 ACK Frame seems to get lost</title><link>https://devzone.nordicsemi.com/thread/289817?ContentTypeID=1</link><pubDate>Mon, 18 Jan 2021 14:57:13 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ebd0ca9e-67bd-454d-80d8-5c1811f0d24a</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I am not sure I understand your&amp;nbsp;reasoning. (I have not tried to set it up like this on this level). Do you have any projects that you used to conclude with this? And how do you expect it to work? Also, do you have a sniffer trace of this? Do you see from the sniffer trace that the packets require ACKs? And does the sniffer trace contain any ACKs?&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>