Setup -
1. Zephyr 2.7.0 for firmware build .bin file and signed using imgtool.
2. Working phones - iPhone, Custom Android ROM (Android 12).
3. Not working phones - Xiaomi Note 4, Samsung M51 (Android 12)
Procedure followed -
1. Built the firmware with above mentioned steps, and signed the image.
2. Transferred over the zephyr.signed.bin file to phone.
3. Tried BLE DFU from nRF Connect for Android on phones mentioned in Setup(3).
4. Tried BLE DFU from nRF Connect on phones mentioned in Setup(2).
5. Same file was shared across all the phones.
Issue observed -
1. In Step 4, the firmware update was successful.
2. In Step 3, the firmware update was not attempted with error "DFU File Error".
Relevant logs and images -
1. Not Working -
2. Working -
nRF Connect, 2022-06-29 DT22011203220001 (D4:7B:D2:BF:EA:93) V 13:10:25.476 Connecting to D4:7B:D2:BF:EA:93... D 13:10:25.476 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M) D 13:10:26.097 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED D 13:10:26.100 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2) I 13:10:26.102 Connected to D4:7B:D2:BF:EA:93 V 13:10:26.109 Discovering services... D 13:10:26.109 gatt.discoverServices() I 13:10:26.801 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms) D 13:10:26.966 [Callback] Services discovered with status: 0 I 13:10:26.966 Services discovered V 13:10:26.980 Generic Attribute (0x1801) - Service Changed [I] (0x2A05) Client Characteristic Configuration (0x2902) - Client Supported Features [R W] (0x2B29) - Database Hash [R] (0x2B2A) Generic Access (0x1800) - Device Name [R W] (0x2A00) - Appearance [R] (0x2A01) - Peripheral Preferred Connection Parameters [R] (0x2A04) SMP Service (8d53dc1d-1db7-4cd3-868b-8a527460aa84) - SMP Characteristic [N WNR] (da2e7828-fbce-4e01-ae9e-261174997c48) Client Characteristic Configuration (0x2902) D 13:10:26.981 gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true) I 13:10:27.068 Connection parameters updated (interval: 45.0ms, latency: 0, timeout: 5000ms) I 13:10:30.984 Connection parameters updated (interval: 45.0ms, latency: 0, timeout: 420ms) V 13:10:50.792 [McuMgr] Connecting... D 13:10:50.794 [McuMgr] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, LE 1M) D 13:10:50.832 [McuMgr] [Callback] Connection state changed with status: 0 and new state: 2 (CONNECTED) I 13:10:50.845 [McuMgr] Connected to D4:7B:D2:BF:EA:93 D 13:10:50.846 [McuMgr] wait(300) V 13:10:51.147 [McuMgr] Discovering services... D 13:10:51.148 [McuMgr] gatt.discoverServices() I 13:10:51.174 [McuMgr] Services discovered V 13:10:51.175 [McuMgr] Primary service found V 13:10:51.198 [McuMgr] Requesting new MTU... D 13:10:51.199 [McuMgr] gatt.requestMtu(498) I 13:10:51.281 [McuMgr] MTU changed to: 252 D 13:10:51.282 [McuMgr] gatt.setCharacteristicNotification(da2e7828-fbce-4e01-ae9e-261174997c48, true) V 13:10:51.284 [McuMgr] Enabling notifications for da2e7828-fbce-4e01-ae9e-261174997c48 D 13:10:51.287 [McuMgr] gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x01-00) I 13:10:51.369 [McuMgr] Data written to descr. 00002902-0000-1000-8000-00805f9b34fb, value: (0x) 01-00 I 13:10:51.370 [McuMgr] Notifications enabled A 13:10:51.376 [McuMgr] Sending (10 bytes) Header (Op: 0, Flags: 0, Len: 2, Group: 1, Seq: 0, Command: 0) CBOR {} V 13:10:51.377 [McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND) D 13:10:51.378 [McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48) I 13:10:51.407 [McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 00-00-00-02-00-01-00-00-BF-FF I 13:10:51.506 [McuMgr] Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 01-00-00-86-00-01-00-00-BF-66-69-6D-61-67-65-73-9F-BF-64-73-6C-6F-74-00-67-76-65-72-73-69-6F-6E-65-30-2E-30-2E-30-64-68-61-73-68-58-20-E8-F4-0F-1E-14-19-DA-D6-B0-F7-4F-B0-01-F1-67-70-D0-84-78-C2-C2-A4-CC-BC-97-66-69-A4-20-C7-81-45-68-62-6F-6F-74-61-62-6C-65-F5-67-70-65-6E-64-69-6E-67-F4-69-63-6F-6E-66-69-72-6D-65-64-F5-66-61-63-74-69-76-65-F5-69-70-65-72-6D-61-6E-65-6E-74-F4-FF-FF-6B-73-70-6C-69-74-53-74-61-74-75-73-00-FF A 13:10:51.512 [McuMgr] Received Header (Op: 1, Flags: 0, Len: 134, Group: 1, Seq: 0, Command: 0) CBOR {"images":[{"slot":0,"version":"0.0.0","hash":"6PQPHhQZ2taw90+wAfFncNCEeMLCpMy8l2ZppCDHgUU=","bootable":true,"pending":false,"confirmed":true,"active":true,"permanent":false}],"splitStatus":0} V 13:10:51.537 [McuMgr] Uploading firmware... A 13:11:18.235 [McuMgr] 229500 bytes sent in 25734 ms (8.92 kB/s) A 13:11:18.262 [McuMgr] Sending (10 bytes) Header (Op: 2, Flags: 0, Len: 2, Group: 63, Seq: 16, Command: 0) CBOR {} V 13:11:18.263 [McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND) D 13:11:18.264 [McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48) I 13:11:18.267 [McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 02-00-00-02-00-3F-10-00-BF-FF I 13:11:18.325 [McuMgr] Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 03-00-00-06-00-3F-10-00-BF-62-72-63-08-FF A 13:11:18.326 [McuMgr] Received Header (Op: 3, Flags: 0, Len: 6, Group: 63, Seq: 16, Command: 0) CBOR {"rc":8} W 13:11:18.328 [McuMgr] Error: NOT_SUPPORTED (8) V 13:11:18.333 [McuMgr] New state: TEST A 13:11:18.335 [McuMgr] Sending (58 bytes) Header (Op: 2, Flags: 0, Len: 50, Group: 1, Seq: 17, Command: 0) CBOR {"confirm":false,"hash":"GFRGqyqtKCsVcCScKiLlA0K66SimU8Z6B5jUHsKhHBo="} V 13:11:18.336 [McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND) D 13:11:18.337 [McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48) I 13:11:18.354 [McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 02-00-00-32-00-01-11-00-BF-67-63-6F-6E-66-69-72-6D-F4-64-68-61-73-68-58-20-18-54-46-AB-2A-AD-28-2B-15-70-24-9C-2A-22-E5-03-42-BA-E9-28-A6-53-C6-7A-07-98-D4-1E-C2-A1-1C-1A-FF I 13:11:18.594 [McuMgr] Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 03-00-00-F4-00-01-11-00-BF-66-69-6D-61-67-65-73-9F-BF-64-73-6C-6F-74-00-67-76-65-72-73-69-6F-6E-65-30-2E-30-2E-30-64-68-61-73-68-58-20-E8-F4-0F-1E-14-19-DA-D6-B0-F7-4F-B0-01-F1-67-70-D0-84-78-C2-C2-A4-CC-BC-97-66-69-A4-20-C7-81-45-68-62-6F-6F-74-61-62-6C-65-F5-67-70-65-6E-64-69-6E-67-F4-69-63-6F-6E-66-69-72-6D-65-64-F5-66-61-63-74-69-76-65-F5-69-70-65-72-6D-61-6E-65-6E-74-F4-FF-BF-64-73-6C-6F-74-01-67-76-65-72-73-69-6F-6E-65-30-2E-30-2E-30-64-68-61-73-68-58-20-18-54-46-AB-2A-AD-28-2B-15-70-24-9C-2A-22-E5-03-42-BA-E9-28-A6-53-C6-7A-07-98-D4-1E-C2-A1-1C-1A-68-62-6F-6F-74-61-62-6C-65-F5-67-70-65-6E-64-69-6E-67-F5-69-63-6F-6E-66-69-72-6D-65-64-F4-66-61-63-74-69-76-65-F4-69-70-65-72-6D-61-6E-65-6E-74-F4-FF-FF-6B-73-70-6C-69-74-53-74-61-74-75 I 13:11:18.595 [McuMgr] Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 73-00-FF A 13:11:18.597 [McuMgr] Received Header (Op: 3, Flags: 0, Len: 244, Group: 1, Seq: 17, Command: 0) CBOR {"images":[{"slot":0,"version":"0.0.0","hash":"6PQPHhQZ2taw90+wAfFncNCEeMLCpMy8l2ZppCDHgUU=","bootable":true,"pending":false,"confirmed":true,"active":true,"permanent":false},{"slot":1,"version":"0.0.0","hash":"GFRGqyqtKCsVcCScKiLlA0K66SimU8Z6B5jUHsKhHBo=","bootable":true,"pending":true,"confirmed":false,"active":false,"permanent":false}],"splitStatus":0} V 13:11:18.601 [McuMgr] New state: RESET A 13:11:18.618 [McuMgr] Sending (10 bytes) Header (Op: 2, Flags: 0, Len: 2, Group: 0, Seq: 18, Command: 5) CBOR {} V 13:11:18.620 [McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND) D 13:11:18.620 [McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48) I 13:11:18.622 [McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 02-00-00-02-00-00-12-05-BF-FF I 13:11:18.684 [McuMgr] Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 03-00-00-02-00-00-12-05-BF-FF A 13:11:18.686 [McuMgr] Received Header (Op: 3, Flags: 0, Len: 2, Group: 0, Seq: 18, Command: 5) CBOR {} D 13:11:19.508 [Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0) E 13:11:19.508 Error 8 (0x8): GATT CONN TIMEOUT I 13:11:19.508 Disconnected D 13:11:19.509 [McuMgr] [Callback] Connection state changed with status: 8 and new state: 0 (DISCONNECTED) W 13:11:19.511 [McuMgr] Error: (0x8): GATT CONN TIMEOUT I 13:11:19.511 [McuMgr] Disconnected D 13:11:19.512 [McuMgr] gatt.close() D 13:11:19.557 [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED V 13:11:28.700 [McuMgr] Connecting... D 13:11:28.701 [McuMgr] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, LE 1M) V 13:11:28.704 [McuMgr] New state: CONFIRM D 13:11:45.060 [McuMgr] [Callback] Connection state changed with status: 0 and new state: 2 (CONNECTED) I 13:11:45.064 [McuMgr] Connected to D4:7B:D2:BF:EA:93 D 13:11:45.067 [McuMgr] wait(300) D 13:11:45.074 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED V 13:11:45.375 [McuMgr] Discovering services... D 13:11:45.375 [McuMgr] gatt.discoverServices() I 13:11:45.594 [McuMgr] Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms) I 13:11:45.760 [McuMgr] Services discovered V 13:11:45.761 [McuMgr] Primary service found V 13:11:45.763 [McuMgr] Requesting new MTU... D 13:11:45.764 [McuMgr] gatt.requestMtu(498) I 13:11:45.796 [McuMgr] MTU changed to: 252 D 13:11:45.797 [McuMgr] gatt.setCharacteristicNotification(da2e7828-fbce-4e01-ae9e-261174997c48, true) V 13:11:45.798 [McuMgr] Enabling notifications for da2e7828-fbce-4e01-ae9e-261174997c48 D 13:11:45.799 [McuMgr] gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x01-00) I 13:11:45.820 [McuMgr] Data written to descr. 00002902-0000-1000-8000-00805f9b34fb, value: (0x) 01-00 I 13:11:45.821 [McuMgr] Notifications enabled A 13:11:45.824 [McuMgr] Sending (58 bytes) Header (Op: 2, Flags: 0, Len: 50, Group: 1, Seq: 0, Command: 0) CBOR {"confirm":true,"hash":"GFRGqyqtKCsVcCScKiLlA0K66SimU8Z6B5jUHsKhHBo="} V 13:11:45.825 [McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND) D 13:11:45.825 [McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48) I 13:11:45.828 [McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 02-00-00-32-00-01-00-00-BF-67-63-6F-6E-66-69-72-6D-F5-64-68-61-73-68-58-20-18-54-46-AB-2A-AD-28-2B-15-70-24-9C-2A-22-E5-03-42-BA-E9-28-A6-53-C6-7A-07-98-D4-1E-C2-A1-1C-1A-FF I 13:11:45.864 [McuMgr] Connection parameters updated (interval: 45.0ms, latency: 0, timeout: 5000ms) I 13:11:45.999 [McuMgr] Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 03-00-00-F4-00-01-00-00-BF-66-69-6D-61-67-65-73-9F-BF-64-73-6C-6F-74-00-67-76-65-72-73-69-6F-6E-65-30-2E-30-2E-30-64-68-61-73-68-58-20-18-54-46-AB-2A-AD-28-2B-15-70-24-9C-2A-22-E5-03-42-BA-E9-28-A6-53-C6-7A-07-98-D4-1E-C2-A1-1C-1A-68-62-6F-6F-74-61-62-6C-65-F5-67-70-65-6E-64-69-6E-67-F4-69-63-6F-6E-66-69-72-6D-65-64-F5-66-61-63-74-69-76-65-F5-69-70-65-72-6D-61-6E-65-6E-74-F4-FF-BF-64-73-6C-6F-74-01-67-76-65-72-73-69-6F-6E-65-30-2E-30-2E-30-64-68-61-73-68-58-20-E8-F4-0F-1E-14-19-DA-D6-B0-F7-4F-B0-01-F1-67-70-D0-84-78-C2-C2-A4-CC-BC-97-66-69-A4-20-C7-81-45-68-62-6F-6F-74-61-62-6C-65-F5-67-70-65-6E-64-69-6E-67-F4-69-63-6F-6E-66-69-72-6D-65-64-F4-66-61-63-74-69-76-65-F4-69-70-65-72-6D-61-6E-65-6E-74-F4-FF-FF-6B-73-70-6C-69-74-53-74-61-74-75 I 13:11:46.000 [McuMgr] Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 73-00-FF A 13:11:46.002 [McuMgr] Received Header (Op: 3, Flags: 0, Len: 244, Group: 1, Seq: 0, Command: 0) CBOR {"images":[{"slot":0,"version":"0.0.0","hash":"GFRGqyqtKCsVcCScKiLlA0K66SimU8Z6B5jUHsKhHBo=","bootable":true,"pending":false,"confirmed":true,"active":true,"permanent":false},{"slot":1,"version":"0.0.0","hash":"6PQPHhQZ2taw90+wAfFncNCEeMLCpMy8l2ZppCDHgUU=","bootable":true,"pending":false,"confirmed":false,"active":false,"permanent":false}],"splitStatus":0} V 13:11:46.007 [McuMgr] Disconnecting... D 13:11:46.009 [McuMgr] gatt.disconnect() D 13:11:46.011 [McuMgr] [Callback] Connection state changed with status: 0 and new state: 0 (DISCONNECTED) I 13:11:46.012 [McuMgr] Disconnected D 13:11:46.013 [McuMgr] gatt.close() D 13:11:46.027 gatt.close() D 13:11:46.028 wait(200) V 13:11:46.228 Connecting to D4:7B:D2:BF:EA:93... D 13:11:46.228 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M) D 13:11:46.234 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2) I 13:11:46.234 Connected to D4:7B:D2:BF:EA:93 I 13:11:46.235 MTU changed to: 252 D 13:11:46.237 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2) I 13:11:46.239 MTU changed to: 252 V 13:11:46.249 Discovering services... D 13:11:46.249 gatt.discoverServices() V 13:11:46.251 Discovering services... D 13:11:46.251 gatt.discoverServices() V 13:11:46.252 Discovering services... D 13:11:46.252 gatt.discoverServices() I 13:11:46.764 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms) D 13:11:46.893 [Callback] Services discovered with status: 0 I 13:11:46.893 Services discovered V 13:11:46.899 Generic Attribute (0x1801) - Service Changed [I] (0x2A05) Client Characteristic Configuration (0x2902) - Client Supported Features [R W] (0x2B29) - Database Hash [R] (0x2B2A) Generic Access (0x1800) - Device Name [R] (0x2A00) - Appearance [R] (0x2A01) - Peripheral Preferred Connection Parameters [R] (0x2A04) SMP Service (8d53dc1d-1db7-4cd3-868b-8a527460aa84) - SMP Characteristic [N WNR] (da2e7828-fbce-4e01-ae9e-261174997c48) Client Characteristic Configuration (0x2902) D 13:11:46.900 gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true) I 13:11:46.988 Connection parameters updated (interval: 45.0ms, latency: 0, timeout: 5000ms) I 13:11:49.913 Connection parameters updated (interval: 45.0ms, latency: 0, timeout: 420ms)