<?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>Android Secure DFU and bonds</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/38801/android-secure-dfu-and-bonds</link><description>We&amp;#39;ve been having issues getting DFU to complete consistently with Android devices when using a two-step DFU package (BL+SD and App). Some devices seem to have far less trouble than others. The newer Samsung devices tend to work pretty reliably for us</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 26 Sep 2018 07:14:53 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/38801/android-secure-dfu-and-bonds" /><item><title>RE: Android Secure DFU and bonds</title><link>https://devzone.nordicsemi.com/thread/150371?ContentTypeID=1</link><pubDate>Wed, 26 Sep 2018 07:14:53 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:057e78b4-7c44-4c6d-99ca-f1012f4d141a</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Good to hear Brian.&lt;/p&gt;
&lt;p&gt;And you are right, if the central react to service changed indication properly, we wouldn&amp;#39;t have to do that. But you never know, especially on Android, many vendors have pretty poor stack implemented.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Android Secure DFU and bonds</title><link>https://devzone.nordicsemi.com/thread/150343?ContentTypeID=1</link><pubDate>Tue, 25 Sep 2018 22:32:18 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:56c3fa61-1033-4583-9095-74ca271f83ef</guid><dc:creator>BrianK</dc:creator><description>&lt;p&gt;Hi Hung Bui,&lt;/p&gt;
&lt;p&gt;After moving the DFU service to the top of the application we&amp;#39;re&amp;nbsp;seeing more stable DFU behavior with Android. Thanks for the suggestion.&amp;nbsp;We will test with a number of devices to verify that this is a solution.&lt;/p&gt;
&lt;p&gt;We have not tried duplicating the GATT table in the bootloader. We are resistant to that since it seems like more of a workaround for an incorrect central implementation than we&amp;#39;d like to use.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Android Secure DFU and bonds</title><link>https://devzone.nordicsemi.com/thread/150189?ContentTypeID=1</link><pubDate>Tue, 25 Sep 2018 08:32:42 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8a04978f-69d8-46aa-9c24-2b1eea9b7ceb</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Brian,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You would need to capture the bonding process (from before bonding to after bonding) so that the sniffer gets the key.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;From the log I can see that the app tried request a service discovery but we don&amp;#39;t know if the phone actually did a service discovery or not. The sniffer trace would reveal this.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;From your log, I can see that the app was trying to write to a descriptor (that it thought was a characteristic) and the phone replied with&amp;nbsp;&lt;span&gt;GATT WRITE NOT PERMIT. It&amp;#39;s most likely the attributable issue.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;One solution you can think of is to match the bootloader attribute table with your application attribute table (or at least put the DFU services to the top of your application, you still need the DFU buttonless service in addition). So that when you switch between bootloader and application there isn&amp;#39;t any different. Then no new service discovery needed.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Android Secure DFU and bonds</title><link>https://devzone.nordicsemi.com/thread/150140?ContentTypeID=1</link><pubDate>Mon, 24 Sep 2018 23:45:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b4d7d6ec-db25-4dec-8522-c7c16577adb9</guid><dc:creator>BrianK</dc:creator><description>&lt;p&gt;Regarding sniffer trace, since the connection is encrypted will I see the services changed exchange at all?&amp;nbsp;I&amp;#39;m not sure what to look for to post a useful capture. I do believe the services changed is happening from looking at firmware logs.&lt;/p&gt;
&lt;p&gt;** Perhaps there is a timing issue on some Android devices?&lt;/p&gt;
&lt;p&gt;Below&amp;nbsp;is a log from nRF Connect 4.20.2 on Android Pixel XL for a DFU that failed to start (two tries). Firmware is SDK14.2 with SD 5.0. The device shows bonded in BlueTooth settings. DFU settings: pkt rcpt notification on, # of packets 10, keep bond info on, mbr size 4096. DFU package has all components for that log, but an app-only package has the same results.&lt;/p&gt;
&lt;p&gt;** Our Android app deletes and re-pairs/bonds after&amp;nbsp;&lt;span&gt; GATT WRITE NOT PERMIT, but we think this is not a good solution, and it can sometimes take 15 minutes of retries to&amp;nbsp;&lt;/span&gt;complete the full DFU.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;nRF Connect, 2018-09-24&lt;/span&gt;&lt;br /&gt;&lt;span&gt;OsRiAp8j (E3:9F:02:62:C4:3A)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:15.830 Connecting to E3:9F:02:62:C4:3A...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:15.830 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:17.433 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:17.433 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:17.433 Connected to E3:9F:02:62:C4:3A&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:17.460 wait(1600ms)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:19.063 Discovering services...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:19.064 gatt.discoverServices()&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:19.091 [Callback] Services discovered with status: 0&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:19.091 Services discovered&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:19.123 Generic Access (0x1800)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Device Name [R W] (0x2A00)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Appearance [R] (0x2A01)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Peripheral Preferred Connection Parameters [R] (0x2A04)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Central Address Resolution [R] (0x2AA6)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Generic Attribute (0x1801)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Service Changed [I] (0x2A05)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Client Characteristic Configuration (0x2902)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Secure DFU Service (0xFE59)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- DFU Packet [WNR] (8ec90002-f315-4f60-9fb8-838830daea50)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- DFU Control Point [N W] (8ec90001-f315-4f60-9fb8-838830daea50)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Client Characteristic Configuration (0x2902)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:19.123 gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:19.128 gatt.setCharacteristicNotification(8ec90001-f315-4f60-9fb8-838830daea50, true)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:22.555 Connection parameters updated (interval: 60.0ms, latency: 30, timeout: 6000ms)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:26.245 [DFU] DFU service started&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:26.245 [DFU] Opening file...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:26.264 [DFU] Firmware file opened successfully&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:26.264 [DFU] Connecting to DFU target...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:26.268 [DFU] gatt = device.connectGatt(autoConnect = false)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:26.272 [DFU] Connected to E3:9F:02:62:C4:3A&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:26.274 [DFU] wait(1600)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:27.876 [DFU] Discovering services...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:27.876 [DFU] gatt.discoverServices()&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:27.888 [DFU] Services discovered&lt;/span&gt;&lt;br /&gt;&lt;span&gt;W 16:28:27.890 [DFU] Sending system components&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:27.892 [DFU] Reading Service Changed CCCD value...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:27.892 [DFU] gatt.readDescriptor(00002902-0000-1000-8000-00805f9b34fb)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:30.163 [DFU] Read Response received from descr.00002a05-0000-1000-8000-00805f9b34fb, value (0x): 02-00&lt;/span&gt;&lt;br /&gt;&lt;span&gt;A 16:28:30.164 [DFU] Service Changed indications enabled&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:30.202 [DFU] wait(1000)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:31.187 [DFU] Requesting new MTU...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:31.187 [DFU] gatt.requestMtu(517)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:34.069 [DFU] MTU changed to: 23&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:34.070 [DFU] Enabling notifications for 8ec90001-f315-4f60-9fb8-838830daea50&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:34.070 [DFU] gatt.setCharacteristicNotification(8ec90001-f315-4f60-9fb8-838830daea50, true)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:34.074 [DFU] gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x01-00)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;E 16:28:36.165 [DFU] Error (0x03): GATT WRITE NOT PERMIT&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:36.165 [DFU] Disconnecting...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:36.206 [DFU] gatt.disconnect()&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:36.210 [DFU] Disconnected&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:36.212 [DFU] gatt.close()&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:36.216 [DFU] wait(600)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:50.873 [DFU] DFU service started&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:50.873 [DFU] Opening file...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:50.889 [DFU] Firmware file opened successfully&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:50.889 [DFU] Connecting to DFU target...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:50.890 [DFU] gatt = device.connectGatt(autoConnect = false)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:50.893 [DFU] Connected to E3:9F:02:62:C4:3A&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:50.894 [DFU] wait(1600)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:52.495 [DFU] Discovering services...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:52.495 [DFU] gatt.discoverServices()&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:52.505 [DFU] Services discovered&lt;/span&gt;&lt;br /&gt;&lt;span&gt;W 16:28:52.507 [DFU] Sending system components&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:52.511 [DFU] Reading Service Changed CCCD value...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:52.511 [DFU] gatt.readDescriptor(00002902-0000-1000-8000-00805f9b34fb)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:54.947 [DFU] Read Response received from descr.00002a05-0000-1000-8000-00805f9b34fb, value (0x): 02-00&lt;/span&gt;&lt;br /&gt;&lt;span&gt;A 16:28:54.948 [DFU] Service Changed indications enabled&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:54.972 [DFU] wait(1000)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:55.972 [DFU] Requesting new MTU...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:55.972 [DFU] gatt.requestMtu(517)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:58.901 [DFU] Enabling notifications for 8ec90001-f315-4f60-9fb8-838830daea50&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:58.901 [DFU] gatt.setCharacteristicNotification(8ec90001-f315-4f60-9fb8-838830daea50, true)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:58.904 [DFU] gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x01-00)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;E 16:28:59.022 [DFU] Error (0x03): GATT WRITE NOT PERMIT&lt;/span&gt;&lt;br /&gt;&lt;span&gt;V 16:28:59.023 [DFU] Disconnecting...&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:59.052 [DFU] gatt.disconnect()&lt;/span&gt;&lt;br /&gt;&lt;span&gt;I 16:28:59.053 [DFU] Disconnected&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:59.053 [DFU] gatt.close()&lt;/span&gt;&lt;br /&gt;&lt;span&gt;D 16:28:59.053 [DFU] wait(600)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Android Secure DFU and bonds</title><link>https://devzone.nordicsemi.com/thread/150123?ContentTypeID=1</link><pubDate>Mon, 24 Sep 2018 18:09:33 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9a6841a6-6285-4ecb-b312-44b4e868e180</guid><dc:creator>BrianK</dc:creator><description>&lt;p&gt;Hi Hung Bui,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thank you for the reply. Does the Android application need to receive the service changed indication and do a service discovery, or should that be handled for us in the Nordic DFU library by way of the configuration of the DfuServiceInitiator?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Regarding the&amp;nbsp;sniffer trace, I will capture one hopefully today.&lt;/p&gt;
&lt;p&gt;Meanwhile, yes we are setting the service changed notification in firmware: here is some firmware log output from the bootloader from a successful DFU, which includes&amp;nbsp;the service changed logs.&lt;/p&gt;
&lt;p&gt;&amp;lt;debug&amp;gt; app: In nrf_bootloader_init&lt;br /&gt;&amp;lt;debug&amp;gt; app: in weak nrf_dfu_init_user&lt;br /&gt;&amp;lt;debug&amp;gt; app: In real nrf_dfu_init&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_settings: Running nrf_dfu_settings_init(sd_irq_initialized=false).&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_flash: Calling nrf_dfu_flash_init(sd_irq_initialized=false)...&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.&lt;br /&gt;&amp;lt;debug&amp;gt; app: Initializing the clock.&lt;br /&gt;&amp;lt;debug&amp;gt; app: Enter nrf_dfu_continue&lt;br /&gt;&amp;lt;debug&amp;gt; app: Valid App&lt;br /&gt;&amp;lt;debug&amp;gt; app: Application sent bootloader request&lt;br /&gt;&amp;lt;debug&amp;gt; app: In nrf_dfu_transports_init&lt;br /&gt;&amp;lt;debug&amp;gt; app: num transports: 1&lt;br /&gt;&amp;lt;debug&amp;gt; app: Initializing BLE DFU transport&lt;br /&gt;&amp;lt;debug&amp;gt; app: Copying peer data&lt;br /&gt;&amp;lt;debug&amp;gt; app: vector table: 0x00073000&lt;br /&gt;&amp;lt;debug&amp;gt; app: vector table: 0x00073000&lt;br /&gt;&amp;lt;debug&amp;gt; app: Error code - sd_softdevice_vector_table_base_set: 0x00000000&lt;br /&gt;&amp;lt;debug&amp;gt; app: Running Service Changed config&lt;br /&gt;&amp;lt;debug&amp;gt; app: Finished running Service Changed config&lt;br /&gt;&amp;lt;debug&amp;gt; app: Enabling SoftDevice.&lt;br /&gt;&amp;lt;debug&amp;gt; app: SoftDevice enabled.&lt;br /&gt;&amp;lt;debug&amp;gt; app: Regular adv name&lt;br /&gt;&amp;lt;debug&amp;gt; app: ##### Setting adv with peer data ####&lt;br /&gt;&amp;lt;debug&amp;gt; app: ##### IRK Found. Setting whitelist ####&lt;br /&gt;&amp;lt;debug&amp;gt; app: Finished initializing BLE DFU transport&lt;br /&gt;&amp;lt;debug&amp;gt; app: After nrf_dfu_transports_init&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_flash: Calling nrf_dfu_flash_init(sd_irq_initialized=true)...&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_flash: Initializing nrf_fstorage_sd backend.&lt;br /&gt;&amp;lt;debug&amp;gt; app: Waiting for events&lt;br /&gt;&amp;lt;debug&amp;gt; app: PHY update request.&lt;br /&gt;&amp;lt;debug&amp;gt; app: == conn sec update request&lt;br /&gt;&amp;lt;debug&amp;gt; app: Sending Service Changed indication&lt;br /&gt;&amp;lt;debug&amp;gt; app: == We are finished handling conn sec update&lt;br /&gt;&amp;lt;debug&amp;gt; app: Service Changed was handled&lt;br /&gt;&amp;lt;debug&amp;gt; app: Received: BLE_GAP_EVT_CONN_PARAM_UPDATE&lt;br /&gt;&amp;lt;debug&amp;gt; app: conn_sup_timeout: 2000max_conn_interval: 6&lt;br /&gt;min_conn_interval: 6&lt;br /&gt;slave_latency 0&lt;br /&gt;&amp;lt;debug&amp;gt; app: Received: BLE_GAP_EVT_CONN_PARAM_UPDATE&lt;br /&gt;&amp;lt;debug&amp;gt; app: conn_sup_timeout: 2000&lt;br /&gt;max_conn_interval: 39&lt;br /&gt;min_conn_interval: 39&lt;br /&gt;slave_latency 0&lt;br /&gt;&amp;lt;debug&amp;gt; app: Received select object&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Valid Command: NRF_DFU_OBJECT_OP_SELECT&lt;br /&gt;&amp;lt;debug&amp;gt; app: Sending Object Info: [0x60, 0x06, 0x01 max: 0:x00000100 0:x00000000, CRC:0x00000000]&lt;br /&gt;&amp;lt;debug&amp;gt; app: Set receipt notif&lt;br /&gt;&amp;lt;debug&amp;gt; app: Sending Response: [0x2, 0x1]&lt;br /&gt;&amp;lt;debug&amp;gt; app: Received create object&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Before OP create command&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Valid Command Create&lt;br /&gt;&amp;lt;debug&amp;gt; app: Sending Response: [0x1, 0x1]&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Before OP write command&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Before OP write command&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Before OP write command&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Before OP write command&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Before OP write command&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Before OP write command&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Before OP write command&lt;br /&gt;&amp;lt;debug&amp;gt; app: Received calculate CRC&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Valid Command CRC&lt;br /&gt;&amp;lt;debug&amp;gt; app: Sending CRC: [0x60, 0x03, 0x01, 0:x00000089, CRC:0x2C2E0880]&lt;br /&gt;&amp;lt;debug&amp;gt; app: Received execute object&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Before OP execute command&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Valid command execute&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: PB: Init packet data len: 60&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Handling signed command&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Req version: 4, Expected: 4&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Skipping DFU version validations&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Calculating init packet hash&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Verify signature&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Image verified&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Running hash check&lt;br /&gt;&amp;lt;debug&amp;gt; app: Enter nrf_dfu_find_cache&lt;br /&gt;&amp;lt;debug&amp;gt; app: Bank content&lt;br /&gt;&amp;lt;debug&amp;gt; app: Bank type: 0&lt;br /&gt;&amp;lt;debug&amp;gt; app: Bank 0 code: 0x01: Size: 126860&lt;br /&gt;&amp;lt;debug&amp;gt; app: Bank 1 code: 0x00: Size: 0&lt;br /&gt;&amp;lt;debug&amp;gt; app: free_size before bank select: 311296&lt;br /&gt;&amp;lt;debug&amp;gt; app: free_size: 184320, size_req: 176432&lt;br /&gt;&amp;lt;debug&amp;gt; app: Using second bank&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Write address set to 0x00042000&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: DFU prevalidate SUCCESSFUL!&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Prevalidate OK.&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Saving init command...&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_settings: Writing settings...&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_settings: Erasing old settings at: 0x0007F000&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007F000, len=1 pages), queue usage: 1&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x0007F000, len=0x1B8 bytes), queue usage: 2&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Setting DFU flag to initialized&lt;br /&gt;&amp;lt;debug&amp;gt; app: Sending Response: [0x4, 0x1]&lt;br /&gt;&amp;lt;debug&amp;gt; app: Received select object&lt;br /&gt;&amp;lt;info&amp;gt; bl_dfu_req_handling: Valid Data Read info&lt;br /&gt;&amp;lt;debug&amp;gt; app: Sending Object Info: [0x60, 0x06, 0x01 max: 0:x00001000 0:x00000000, CRC:0x00000000]&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x0007F000, pending 1&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x0007F000, pending 0&lt;br /&gt;&amp;lt;debug&amp;gt; app: Received create object&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Android Secure DFU and bonds</title><link>https://devzone.nordicsemi.com/thread/149988?ContentTypeID=1</link><pubDate>Mon, 24 Sep 2018 10:07:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:16756781-a2fa-4615-b76c-5261438ed92c</guid><dc:creator>Hung Bui</dc:creator><description>&lt;p&gt;Hi Brian,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I suspect it may have something to do with the Service Changed characteristic. First, both the application and the bootloader need to have this characteristic enabled (check sdk_config.h ). Second, the service changed indication should be sent by the application when the GATT attributable table changed. And then the phone should follow the spec to do a service discovery after that to update the attribute table cache.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If it&amp;#39;s failed to do so, and when there is a command to write to a characteristic (which is not exist in the older attributable , or doesn&amp;#39;t support write), the phone will throw&amp;nbsp;&lt;span&gt;GATT WRITE NOT PERMIT.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I would need to see&lt;a href="https://www.nordicsemi.com/eng/Products/Bluetooth-Smart-Bluetooth-low-energy/nRF-Sniffer/"&gt; a sniffer trace &lt;/a&gt;to be able to tell if it&amp;#39;s actually the case with your setup.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>