<?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>gazell host reply rate</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/75337/gazell-host-reply-rate</link><description>To the kind attention of Nordic support team, 
 We have got an nRF52833 gzll host that has to interact with multiple gzll devices. We empirically saw that (in our case and in our particular implementation) when multiple devices are communicating at once</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 21 May 2021 10:48:27 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/75337/gazell-host-reply-rate" /><item><title>RE: gazell host reply rate</title><link>https://devzone.nordicsemi.com/thread/311000?ContentTypeID=1</link><pubDate>Fri, 21 May 2021 10:48:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9c174470-8f4c-46d3-97a1-3a560c44e828</guid><dc:creator>astella</dc:creator><description>&lt;p&gt;Thank you Hakon. I think at a first glance I under estimated the importance of the dummy packet in gzll. We could also call it like a &amp;quot;flush packet&amp;quot;, because it naturally flushes tx host fifos, without any need to force or impose tx host fifo flushes from code running in the host itself (at least in the best case scenario). It sounds the best thing so to avoid host congestion. I&amp;#39;m confident will be making a good usage of these info you shared. Thank you again&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: gazell host reply rate</title><link>https://devzone.nordicsemi.com/thread/310950?ContentTypeID=1</link><pubDate>Fri, 21 May 2021 08:32:10 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:827df50d-6718-4ff6-ada4-08883177c359</guid><dc:creator>H&amp;#229;kon Alseth</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
[quote user="astella"]We have until 5 mice like devices on unencrypted pipes and then pipe 6 dedicated to encrypted gazell communication. That it is why we also use gzp.[/quote]
&lt;p&gt;GZP will claim the ACK payload for the encrypted pipe on the host side, which will flush any preloaded ACKs on other RF pipes&lt;/p&gt;
&lt;p&gt;(See gzp_host.c -&amp;gt;&amp;nbsp;gzp_process_encrypted_user_data -&amp;gt;&amp;nbsp;gzp_preload_ack -&amp;gt;&amp;nbsp;gzll_tx_fifo_flush)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once you start to use the encrypted RF pipe, this will be in conflict with the other devices using preloaded ACK payloads.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
[quote user="astella"]PROTO_GZLL_TIMESLOT_PERIOD ---&amp;gt; 800[/quote]
&lt;p&gt;This is a bit short wrt. 1 MBit on-air datarate if you use 32 byte payload:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://infocenter.nordicsemi.com/topic/sdk_nrf5_v17.0.2/group__gzll__02__api.html#ga3347094a64c07793c773c4fdf4bc4bff"&gt;https://infocenter.nordicsemi.com/topic/sdk_nrf5_v17.0.2/group__gzll__02__api.html#ga3347094a64c07793c773c4fdf4bc4bff&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;What is the payload length, and ACK payload length used?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
[quote user="astella"]&lt;p&gt;Basically if we try to always put acks in gzll tx internal fifos, following the rhythm at which we receive from multiple devices, we fail and try to flush repeatedly, until some gzll internal error appears like&amp;nbsp;&lt;/p&gt;
&lt;div&gt;NRF_GZLL_ERROR_CODE_INTERNAL_ASSERT_OCCURRED.&lt;/div&gt;
&lt;div&gt;After that we loose the chance to flush (flushing routine not working anymore) and either some device stuck, is not able to communicate, or the communication is affected by a degradation.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;The only thing that seem to work is to try and not ack always. I mean not always trying to ack and put ack in internal gzll fifos, as this implies a flush (considering how legacy routines of our project are implemented) and gzll repeatedly disabled and enabled. It seems that having an external queue and dequeuing (trying to queue in internal gzll fifo) at a reasonable rate could be ok. Maybe you can help us understand theoretically the situation a little more deeply. Thank you for your efforts and kindness,&lt;/div&gt;[/quote]
&lt;p&gt;The internal fifo is 6 entries deep:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://infocenter.nordicsemi.com/topic/sdk_nrf5_v17.0.2/gzll_02_user_guide.html?cp=7_1_5_4#FIFOs"&gt;https://infocenter.nordicsemi.com/topic/sdk_nrf5_v17.0.2/gzll_02_user_guide.html?cp=7_1_5_4#FIFOs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If the TX FIFO is filled up on each different pipe, then there&amp;#39;s no room for receiving any new payloads.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Do you mean that the gazell host still works, while some of the devices stops communicating? If yes, does the device recover if it is reset, or do you need to reset the gazell host only to resume communication?&lt;/p&gt;
&lt;p&gt;Note in the above link, where ACK payloads are mentioned wrt. how its handled in the hosts FIFO; meaning that it is not popped off before the next incoming RF payload on that specific pipe:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;Since the ACK will not always be successfully received by the Device, the data payload added to the ACK will not be removed from the TX FIFO immediately. This TX packet will be removed from the TX FIFO when a new packet (new packet ID or CRC) is received on the same pipe. In this case, the new packet sent from the Device serves as an acknowledgement of the ACK sent previously by the Host. ACKs sent in reply to retransmission attempts contain the same TX payload.

When the Host is handling packets on multiple pipes, care needs to be taken to ensure that ACK payloads in the TX FIFOs on pipes that are no longer in use, are not taking up space in the memory pool and consequently blocking communication on other pipes. To avoid such congestion, the application on the Host can flush the TX FIFOs on the pipes no longer in use.&lt;/pre&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This means that if you only send one RF payload to fetch the ACK from the host; it will still take place in the hosts FIFO. This could be the source of your issues.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Håkon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: gazell host reply rate</title><link>https://devzone.nordicsemi.com/thread/310809?ContentTypeID=1</link><pubDate>Thu, 20 May 2021 14:35:49 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:bf3bd279-bbb2-45d8-90ae-d0a78351e69f</guid><dc:creator>astella</dc:creator><description>&lt;p&gt;Thank you Hakon for replying.&lt;/p&gt;
&lt;p&gt;This scenario is based on a legacy project. We have until 5 mice like devices on unencrypted pipes and then pipe 6 dedicated to encrypted gazell communication. That it is why we also use gzp.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1. Can you share your gazell configuration on the host side?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;NRF_GZLL_MODE_HOST&lt;/p&gt;
&lt;p&gt;PROTO_GZLL_DATARATE ---&amp;gt;&amp;nbsp;NRF_GZLL_DATARATE_1MBIT&lt;br /&gt;PROTO_GZLL_MAX_TX_ATTEMPTS ---&amp;gt; 250&lt;br /&gt;PROTO_GZLL_CHANNEL_SELECTION_POLICY ---&amp;gt;&amp;nbsp;NRF_GZLL_DEVICE_CHANNEL_SELECTION_POLICY_USE_SUCCESSFUL&lt;br /&gt;PROTO_GZLL_TIMESLOT_PERIOD ---&amp;gt; 800&lt;br /&gt;PROTO_GZLL_SYNC_LIFETIME ---&amp;gt;&amp;nbsp;GZLL_DEFAULT_PARAM_MAX_SYNC_PERIOD&lt;br /&gt;PROTO_GZLL_TSLOTS_PER_CHANNEL ---&amp;gt; 2&lt;br /&gt;PROTO_GZLL_POWER ---&amp;gt;&amp;nbsp;NRF_GZLL_TX_POWER_0_DBM&lt;br /&gt;PROTO_GZLL_CHANNEL_TAB_SIZE ---&amp;gt; 5&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2. How many devices are communicating with the host?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;In theory, until 5 plus the encrypted one: 6 devices. But after we connect 3 non encrypted ones we already get bad quality communication&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;3. How often do each device send a payload to the host?&lt;/p&gt;
&lt;p&gt;About 10 ms each&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;4. Do each device have a dedicated RF pipe?&lt;/p&gt;
&lt;p&gt;Unfortunately yes, That is why we have often need to flush when changing device. But it is very interesting your question.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Basically if we try to always put acks in gzll tx internal fifos, following the rhythm at which we receive from multiple devices, we fail and try to flush repeatedly, until some gzll internal error appears like&amp;nbsp;&lt;/p&gt;
&lt;div&gt;NRF_GZLL_ERROR_CODE_INTERNAL_ASSERT_OCCURRED.&lt;/div&gt;
&lt;div&gt;After that we loose the chance to flush (flushing routine not working anymore) and either some device stuck, is not able to communicate, or the communication is affected by a degradation.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;The only thing that seem to work is to try and not ack always. I mean not always trying to ack and put ack in internal gzll fifos, as this implies a flush (considering how legacy routines of our project are implemented) and gzll repeatedly disabled and enabled. It seems that having an external queue and dequeuing (trying to queue in internal gzll fifo) at a reasonable rate could be ok. Maybe you can help us understand theoretically the situation a little more deeply. Thank you for your efforts and kindness,&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Best regard&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: gazell host reply rate</title><link>https://devzone.nordicsemi.com/thread/310799?ContentTypeID=1</link><pubDate>Thu, 20 May 2021 14:07:55 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c1bf737b-e5ee-49ea-9ac1-86acbb7c8110</guid><dc:creator>H&amp;#229;kon Alseth</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. Can you share your gazell configuration on the host side?&lt;/p&gt;
&lt;p&gt;2. How many devices are communicating with the host?&lt;/p&gt;
&lt;p&gt;3. How often do each device send a payload to the host?&lt;/p&gt;
&lt;p&gt;4. Do each device have a dedicated RF pipe?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Kind regards,&lt;/p&gt;
&lt;p&gt;Håkon&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>