<?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>Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/29537/multiple-packets-per-connection-interval---s132-ios</link><description>Target - NRF52832 populated on a custom PCB using SDK 14.0.0 and s132 5.0 
 Background - end device will be used to send logged IMU data to the cloud via a smart device, 2-3mB expected to be sent at a time 
 Looking for a bit of help to increase the</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Thu, 25 Jan 2018 08:58:25 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/29537/multiple-packets-per-connection-interval---s132-ios" /><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117421?ContentTypeID=1</link><pubDate>Thu, 25 Jan 2018 08:58:25 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:3b13375c-e36d-4b4b-96ea-949f547c1530</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Chris,&lt;/p&gt;
&lt;p&gt;If you can provide a sniffer trace, it would be easier to check from whom the MTU request is sent. There is also a chance that an iOS update can change the behavior of the phone.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117420?ContentTypeID=1</link><pubDate>Wed, 24 Jan 2018 17:26:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e58860db-b417-418a-89b5-d19d165cd386</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;Hung- Ah, thanks, that makes sense. On either IOS device, based on what is logged in RTT, the initial MTU exchange upon connection results in a 185 byte MTU, with or without the code commented out that you mention above. Leaving the code in simply results in another negotiation to a 185 byte MTU, Not really a huge deal right now, but it will be good to eventually get to 247 bytes on an IOS device.&lt;/p&gt;
&lt;p&gt;-Chris&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117419?ContentTypeID=1</link><pubDate>Wed, 24 Jan 2018 16:59:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:388a734d-eb38-4f42-b982-66e8c9ddcea7</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Chris,&lt;/p&gt;
&lt;p&gt;Think of the buffer like this, you have 7 buffers. At the beginning they are all free, or at least you don&amp;#39;t know how many are free. It&amp;#39;s the buffer shared between a write command and a notification. You call sd_ble_gatts_hvx () as many as possible until it&amp;#39;s full and you receive NRF_ERROR_RESOURCES.&lt;/p&gt;
&lt;p&gt;Calling sd_ble_gatts_hvx again before receiving BLE_GATTS_EVT_HVN_TX_COMPLETE  usually won&amp;#39;t help. Because the buffer was full before that and usually in one connection event, you can&amp;#39;t get the buffer from full to empty (7 packets to be sent). So it&amp;#39;s better to just wait for BLE_GATTS_EVT_HVN_TX_COMPLETE   before calling sd_ble_gatts_hvx () again.&lt;/p&gt;
&lt;p&gt;To achieve 247 bytes MTU on iOS , as I suggested in the first answer, you let the phone request it instead of requesting it from the nRF5. To do that you need to comment out the call to sd_ble_gattc_exchange_mtu_request() inside on_connected_evt() in nrf_ble_gatt.c&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117418?ContentTypeID=1</link><pubDate>Wed, 24 Jan 2018 15:01:44 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2aa91209-22b6-4173-90e5-cd4c0415a9ed</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;Hung- Apologies I did not send the actual output, I was too focused on the details. Using an iPhone SE, I hit, on average, 124kpbs with a 182B data length and an average buffer length of 90. Based on the log in either lightBlue explorer or nRF toolbox, packets are being sent at ~15ms intervals, with occasional multiple packets per interval. Based on a quick calc, this makes sense - 182Bytes&lt;em&gt;8bits&lt;/em&gt;(1/15ms) = 97kbps, 2 packets per interval is of course double this, so occasional multiple packets per interval would yield a throughput between these two numbers.&lt;/p&gt;
&lt;p&gt;With a S7, a ~480kbps throughput is achieved  with a 244B data length and an average buffer length around 250. The log file on this device always crashes, so I can&amp;#39;t be sure of the interval, but assuming 15ms, then given the 244B data length, multiple packets must be sent during a given interval.&lt;/p&gt;
&lt;p&gt;With a iPhone X, I was still only able to hit a 182B data length, but an average transfer speed of ~500kbps was achieved. Again, obviously multiple packets were sent.&lt;/p&gt;
&lt;p&gt;So, it seems that multiple packets are being sent per interval, but it also seems that, based on my code testing, making calls to sd_ble_gatts_hvx before receiving BLE_GATTS_EVT_HVN_TX_COMPLETE is not the mechanism which enables multiple packets per interval to be sent and actually doesn&amp;#39;t seem to do anything since, until BLE_GATTS_EVT_HVN_TX_COMPLETE is received, sd_ble_gatts_hvx returns NRF_ERROR_RESOURCES.&lt;/p&gt;
&lt;p&gt;Apologies that I kind of backed in to this as an answer, but based off of documentation/threads elsewhere, I was led to believe that the multiple calls to sd_ble_gatts_hvx before receiving BLE_GATTS_EVT_HVN_TX_COMPLETE was necessary to maximize throughput. I just want to be sure that I have a (somewhat) reasonable understanding about how the examples work before I start working on my own code.&lt;/p&gt;
&lt;p&gt;Please let me know if you disagree or find any issues with what I&amp;#39;ve stated above.&lt;/p&gt;
&lt;p&gt;-Chris&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117417?ContentTypeID=1</link><pubDate>Wed, 24 Jan 2018 13:27:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6c1ab178-97b0-4338-9ef1-8c82427bd7a5</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Chris,&lt;/p&gt;
&lt;p&gt;Yes, that is the correct way of doing this. I don&amp;#39;t know why you only get one packet.&lt;/p&gt;
&lt;p&gt;Please let us know the result of the test with your phones. What printed out on UART ? What is the connection interval.&lt;/p&gt;
&lt;p&gt;My test here with the unmodified example above, with an S6 showing 60kbps, 5 packets per interval , 15ms interval. Please use NRFConnect to test. On S8 it&amp;#39;s 1200kbps.&lt;/p&gt;
&lt;p&gt;Please try capture a &lt;a href="https://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF-Sniffer/"&gt;sniffer trace&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can also test between 2 nRF DK one as central one as peripheral to see the maximum through put it can achieve.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117434?ContentTypeID=1</link><pubDate>Tue, 23 Jan 2018 18:33:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c55a34c4-abd1-4fb8-a389-d53ea537c513</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;Hung- Same result. If I modify the code to count the number of NRF_SUCCESS returns while &amp;quot;loop&amp;quot; = 1, and then I write this number to an array (length = 100) when NRF_ERROR_RESOURCES is returned, if I breakpoint on the array index rollover at any point during data transmission, the array is filled with &amp;quot;1&amp;quot; at every location. This is with sending the &amp;quot;asdf&amp;quot; array as-is, and with the byte count dropped to 20. Tested on both an iPhone SE and Samsung S7. Are you able to replicate/test on your end?&lt;/p&gt;
&lt;p&gt;Based on these results, it seems like you cannot call ble_nus_string_send again until BLE_GATTS_EVT_HVN_TX_COMPLETE is received.&lt;/p&gt;
&lt;p&gt;My understanding was that consecutive calls to ble_nus_string_send (sd_ble_gatts_hvx) would queue up packets in the buffer, and therefore would enable multiple packets per interval (if connection time allowed). What is the proper way to do this?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117433?ContentTypeID=1</link><pubDate>Tue, 23 Jan 2018 16:17:03 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:73b88e1a-4931-4597-889d-1446d384fa32</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Chris,&lt;/p&gt;
&lt;p&gt;Please try with this example and let us know what throughput you have. Note that you may tune it to have 15ms interval. And also to get 247 bytes MTU, you shouldn&amp;#39;t request MTU update, let the phone do it.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devzone.nordicsemi.com/cfs-file/__key/communityserver-discussions-components-files/4/ble_5F00_UART_5F00_TP_5F00_examples.zip"&gt;ble_UART_TP_examples.zip&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117425?ContentTypeID=1</link><pubDate>Mon, 22 Jan 2018 18:41:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5fca7f19-cd4c-4cb7-bbee-08d64efe8fcc</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;Hung- The questions above still apply, but I was able to achieve a 15ms connection interval using the max and min interval set to 15 - I thought I had previously tried this, but apparently not. So, while I still cannot achieve more than a packet per interval for whatever reason, this shortened interval time effectively doubled my throughput - great news. Please let me know what I might be doing wrong in terms of sending packets to be queued, clearly I must be doing something incorrectly given how quickly I receive the RESOURCES error.&lt;/p&gt;
&lt;p&gt;I did also try an iPhone 10, curiously enough, the negotiated MTU size was still 185 bytes.&lt;/p&gt;
&lt;p&gt;-Chris&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117422?ContentTypeID=1</link><pubDate>Mon, 22 Jan 2018 14:59:53 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5eb4566a-0b71-41f0-9bb5-2f0b0cafd86e</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;I dropped the packet size down to 20B, now I am seeing 9-10 packets per interval being sent. This is with an interval set to 30ms or 60ms. Good news - does not seem to be a limitation on the iOS side. BUT, I also now realize that I am seeing a NRF_ERROR_RESOURCES error upon consecutive calls to &amp;quot;ble_nus_string_send&amp;quot; (really sd_ble_gatts_hvx) - even with a packet size of only 20B. It seems like I can only call &amp;quot;ble_nus_string_send&amp;quot; once I&amp;#39;ve received &amp;quot; BLE_GATTS_EVT_HVN_TX_COMPLETE&amp;quot; - but my understanding was that I could repeatedly call &amp;quot;ble_nus_string_send&amp;quot; until the buffer was full. Based on my current testing, the &amp;quot;buffer&amp;quot; fills after 20B - doesn&amp;#39;t seem right. Should I be doing something differently to queue up packets?&lt;/p&gt;
&lt;p&gt;-Chris&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117426?ContentTypeID=1</link><pubDate>Mon, 22 Jan 2018 13:29:34 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:78b836c1-c257-4379-8f18-725b264b17f1</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;I don&amp;#39;t think there is anything else. Note that you can always look at the MD (More Data) bit in a BLE packet (Link layer) to see if the slave saying that it still have more data to send but the master didn&amp;#39;t send more packet or it&amp;#39;s the opposite that the slave didn&amp;#39;t have more data to send (MD = 0).&lt;/p&gt;
&lt;p&gt;I would suggest to test also with different central, Android, or another NRF52 acts as central for example.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117423?ContentTypeID=1</link><pubDate>Fri, 19 Jan 2018 16:44:42 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e504c65b-7524-4382-a457-a435a16cf374</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;Hung - Yes, this is already done in nrf_sdh_ble.c:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#if (NRF_SDH_BLE_GATT_MAX_MTU_SIZE != 23)
memset(&amp;amp;ble_cfg, 0x00, sizeof(ble_cfg));
ble_cfg.conn_cfg.conn_cfg_tag                 = conn_cfg_tag;
ble_cfg.conn_cfg.params.gatt_conn_cfg.att_mtu = NRF_SDH_BLE_GATT_MAX_MTU_SIZE;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the sdk:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE
#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 247
#endif
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So it seems like the buffer and softdevice are configured correctly, right? Anything else that must be configured to enable multiple packets per interval? I know I still need to test a smaller packet size, I should get to this in the afternoon.&lt;/p&gt;
&lt;p&gt;-Chris&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117424?ContentTypeID=1</link><pubDate>Fri, 19 Jan 2018 15:50:38 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:339513ea-6d8e-444d-b941-33b038677eca</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Yes, but you also need to tell the softdevice to prepare big enough buffer for large packet (and x7 of them) when you enable the softdevice.&lt;/p&gt;
&lt;p&gt;You can find the code I pointed above in nrf_sdh_ble_default_cfg_set() in nrf_sdh_ble.c . I assume the function is used in your code and NRF_SDH_BLE_GATT_MAX_MTU_SIZE in sdk_config.h isn&amp;#39;t modified to smth else but 247 ?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117430?ContentTypeID=1</link><pubDate>Fri, 19 Jan 2018 14:23:42 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9bdbe6a5-5dad-43a0-b3fc-fefd165aaaff</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;Yes, with hvn_tx_queue_size = 7, and with the necessary updates to ram_start implemented, I can only call ble_nus_string_send once before receipt of a NRF_ERROR_RESOURCE return (in other words, upon the second call of ble_nus_string_send, with a 182 byte packet, I receive the NRF_ERROR_RESOURCE error).&lt;/p&gt;
&lt;p&gt;I am making this call in gatt_init:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;err_code = nrf_ble_gatt_att_mtu_periph_set(&amp;amp;m_gatt, NRF_SDH_BLE_GATT_MAX_MTU_SIZE);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Is that not sufficient to configure mtu size? Certainly this is what enabled 182 byte data transfers.&lt;/p&gt;
&lt;p&gt;Thanks for your help!&lt;/p&gt;
&lt;p&gt;-Chris&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117432?ContentTypeID=1</link><pubDate>Fri, 19 Jan 2018 14:15:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ecb283c7-6005-4ac7-ab5d-7ccb7547d853</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Chris,&lt;/p&gt;
&lt;p&gt;You are telling that even with hvn_tx_queue_size = 7 you can only queue 1 packet ?&lt;/p&gt;
&lt;p&gt;Could you try testing with very small packet says 1 byte payload and see if you seeing the same issue ?&lt;/p&gt;
&lt;p&gt;Also when you configure the softdevice, you should declare max MTU :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ble_cfg.conn_cfg.params.gatt_conn_cfg.att_mtu = NRF_SDH_BLE_GATT_MAX_MTU_SIZE;
&lt;/code&gt;&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117431?ContentTypeID=1</link><pubDate>Fri, 19 Jan 2018 14:00:18 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:12d746fa-683c-489a-b127-4dae28a62e8f</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;Hung-
I am doing the following with regards to queuing up packets (quoted from my above post) -&lt;/p&gt;
&lt;p&gt;&amp;quot;I&amp;#39;ve also increased hvn_tx_queue_size to 7 and event_length to 320 (per other posts) in an attempt to increase the packets per interval (and adjusted ram start as needed). I am calling ble_nus_string_send (effectively sd_ble_gatts_hvx) until the response is no longer NRF_SUCCESS - at this point, I wait until I receive BLE_GATTS_EVT_HVN_TX_COMPLETE before calling ble_nus_string_send again.&amp;quot;&lt;/p&gt;
&lt;p&gt;Based on this implementation, I can&amp;#39;t exceed more than one call to ble_nus_string_send before I receive a NRF_ERROR_RESOURCES response. Is there some other way I should be queueing up packets? Or is there something else I should be doing to increase the buffer size?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117429?ContentTypeID=1</link><pubDate>Fri, 19 Jan 2018 11:52:39 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6d0ba6bd-0758-4385-8559-649fffa205b0</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Have you make sure you queued the notification packets until the buffer is full (on the nRF52 side) ?
I don&amp;#39;t see any other way to increase the number of packets per interval except for queuing as quick as possible.
As far as I understand, iOS will give a connection a limited event length in each connection event. I have seen at least 3 packets per connection interval (30ms) with 251 bytes each packet.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117428?ContentTypeID=1</link><pubDate>Fri, 19 Jan 2018 00:53:34 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f4d20178-d43b-4406-b245-53720e54a567</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;Hung-
I should add to the above that, when operating with a 60ms interval, I still was not sending more than 1 or 2 packets per interval. Is there anything else I should be doing to increase the number of packets sent per interval?&lt;/p&gt;
&lt;p&gt;-Chris&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117427?ContentTypeID=1</link><pubDate>Thu, 18 Jan 2018 13:59:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e187b1a6-296c-4462-89cb-fc9f6638b030</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;Hung-&lt;/p&gt;
&lt;p&gt;Thanks, it will take me a bit to work through this but I&amp;#39;ll try to get back to you later today/tomorrow with my successes or failures - I appreciate the feedback! For reference, I am not requesting the MTU update, I am initializing with NRF_SDH_BLE_GATT_MAX_MTU_SIZE and the negotiation occurs to get to a data length of 182 (I believe this is a limitation of an SE running iOS 11.2).&lt;/p&gt;
&lt;p&gt;Yesterday I did try requesting a connection parameter update with the same parameters used during initial negotiation (15ms min, 75 ms max) - initial negotiation resulted in a 30ms connection interval, but the update request resulted in a 60ms interval!?! Its like iOS was punishing me for making the request:) I&amp;#39;ll review your code vs. mine to see if there are any differences.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ll also see if I can borrow someone&amp;#39;s iPhone8 to confirm your results.&lt;/p&gt;
&lt;p&gt;-Chris&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117416?ContentTypeID=1</link><pubDate>Thu, 18 Jan 2018 11:57:30 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c8a913b2-ba0b-491c-a2c4-47d0a35ca821</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Chris,&lt;/p&gt;
&lt;p&gt;If you have a look at &lt;a href="https://developer.apple.com/videos/play/wwdc2017/712/"&gt;this presentation&lt;/a&gt;, you can find information about the 15ms firmware update mode and the estimated through put on new iOS (v11.x I assume) (page 119).&lt;/p&gt;
&lt;p&gt;We found some tricks that might be useful for you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Try to request connection parameter update with both max and min interval to 15ms&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Try not to request MTU, but let the phone does it, we got 247 bytes MTU.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Request data length extension (DLE).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Request 2Mbps.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We tested with an iPhone 8 iOS 11.1 and got ~300kbps at 1Mbps and 650kbps at 2Mbps&lt;/p&gt;
&lt;p&gt;However, I&amp;#39;m not sure about the iPhone SE if it supports those 4.2 features and 5.0 features.&lt;/p&gt;
&lt;p&gt;You can have a look at our image demo &lt;a href="https://github.com/NordicPlayground/nrf52-ble-image-transfer-demo"&gt;here&lt;/a&gt; for your reference (the demo is without the first two &amp;quot;tricks&amp;quot; I mentioned above)&lt;/p&gt;
&lt;p&gt;Bellow is the main.c I modified to have it optimized for iOS, MTU request is delayed for 2 seconds to let the phone requests.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devzone.nordicsemi.com/cfs-file/__key/communityserver-discussions-components-files/4/8400.main.c"&gt;main.c&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multiple packets per connection interval - s132/IOS</title><link>https://devzone.nordicsemi.com/thread/117415?ContentTypeID=1</link><pubDate>Wed, 17 Jan 2018 21:22:24 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:eac23f80-c1b1-4848-a6bb-a7a1c9c2adc4</guid><dc:creator>Chris</dc:creator><description>&lt;p&gt;I&amp;#39;ve also increased hvn_tx_queue_size to 7 and event_length to 320 (per other posts) in an attempt to increase the packets per interval (and adjusted ram start as needed). I am now calling ble_nus_string_send (effectively sd_ble_gatts_hvx) until the response is no longer NRF_SUCCESS - at this point, I wait until I receive BLE_GATTS_EVT_HVN_TX_COMPLETE before calling ble_nus_string_send again. Based on a simple counter, upon the second call ble_nus_string_send, I receive a NRF_ERROR_RESOURCES error. What am I missing?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>