This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nrfutil dfu ble timeout

I'm attempting to use nrfutil with a nRF52 DK to perform dfu over BLE. The command I'm using and the result I get is:

% nrfjprog --eraseall                                       
Erasing user available code and UICR flash areas.
Applying system reset.
% nrfutil dfu ble -ic NRF52 -pkg app_dfu_package_1_1.0.0.zip
No target selected. Default device name: DfuTarg is used.
Please select connectivity serial port:
	0 : /dev/tty.usbmodem0006821181671 - 000682118167
Enter your choice: : 0

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/bin/nrfutil", line 11, in <module>
    load_entry_point('nrfutil==6.1.0', 'console_scripts', 'nrfutil')()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/__main__.py", line 1197, in ble
    dfu.dfu_send_images()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu.py", line 115, in dfu_send_images
    self._dfu_send_image(self.manifest.softdevice_bootloader)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu.py", line 88, in _dfu_send_image
    self.dfu_transport.open()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu_transport_ble.py", line 473, in open
    self.dfu_adapter.open()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu_transport_ble.py", line 103, in open
    self.adapter.driver.open()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pc_ble_driver_py/ble_driver.py", line 103, in wrapper
    raise NordicSemiException(
pc_ble_driver_py.exceptions.NordicSemiException: Failed to open. Error code: NRF_ERROR_TIMEOUT

This is with the latest nrfutil 6.1.0, on windows or mac, the result is the same.

  • After disabling, unplugging, reconnecting and retrying I get the same error. I think this is probably a bug in nrfutil.

  • Please try the following command and provide the log if it cannot work. 

    nrfutil dfu ble -ic NRF52 -pkg app_dfu_package_1_1.0.0.zip -f -snr 000682118167

    -Amanda H.

  • This gets further, it connects to the device, but encounters another error.

    nrfutil dfu ble -ic NRF52 -pkg package.zip  -f -snr 000682118167 --name "AirTurn D96D"
    Board already flashed with connectivity firmware.
    
    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/3.8/bin/nrfutil", line 11, in <module>
        load_entry_point('nrfutil==6.1.0', 'console_scripts', 'nrfutil')()
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 829, in __call__
        return self.main(*args, **kwargs)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 782, in main
        rv = self.invoke(ctx)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 610, in invoke
        return callback(*args, **kwargs)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/__main__.py", line 1197, in ble
        dfu.dfu_send_images()
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu.py", line 115, in dfu_send_images
        self._dfu_send_image(self.manifest.softdevice_bootloader)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu.py", line 88, in _dfu_send_image
        self.dfu_transport.open()
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu_transport_ble.py", line 477, in open
        self.__set_prn()
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu_transport_ble.py", line 583, in __set_prn
        self.dfu_adapter.write_control_point([DfuTransportBle.OP_CODE['SetPRN']] + list(struct.pack('<H', self.prn)))
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu_transport_ble.py", line 347, in write_control_point
        self.adapter.write_req(self.conn_handle, DFUAdapter.CP_UUID, data)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pc_ble_driver_py/ble_driver.py", line 101, in wrapper
        err_code = wrapped(*args, **kwargs)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pc_ble_driver_py/ble_adapter.py", line 489, in write_req
        return result["status"]
    TypeError: 'NoneType' object is not subscriptable

  • Hi Nick, 

    It would be nice if you could run the command with verbose log level and provide the log again. Thanks. 

    nrfutil -vvvv dfu ble -ic NRF52 -pkg app_dfu_package_1_1.0.0.zip -f -snr 000682118167

    -Amanda H.

  • nrfutil -vvvv dfu ble -ic NRF52 -pkg output/3.0.0-b.3_release_BT500S6_BL_SD_APP.zip  -f -snr 000682118167 --name "AirTurn D96D"
    Board already flashed with connectivity firmware.
    2021-01-25 16:43:19,012 Using connectivity board at serial port: /dev/tty.usbmodem0006821181671
    2021-01-25 16:43:19,021 Sending SoftDevice+Bootloader image.
    2021-01-25 16:43:22,438 Successfully opened /dev/tty.usbmodem0006821181671. Baud rate: 1000000. Flow control: none. Parity: none.
    2021-01-25 16:43:22,438 evt> severity(20) message(Successfully opened /dev/tty.usbmodem0006821181671. Baud rate: 1000000. Flow control: none. Parity: none.)
    2021-01-25 16:43:22,438 RpcAppStatus.resetPerformed: Target Reset performed
    2021-01-25 16:43:22,438 evt> status code(RpcAppStatus.resetPerformed) message(Target Reset performed)
    2021-01-25 16:43:23,653 RpcAppStatus.connectionActive: Connection active
    2021-01-25 16:43:23,653 evt> status code(RpcAppStatus.connectionActive) message(Connection active)
    2021-01-25 16:43:23,661 BLE: Scanning for AirTurn D96D
    2021-01-25 16:43:23,674 evt> adv_report conn(65535)
     peer_addr(35:36:A1:32:EA:52)
     rssi(-59)
     adv_type(BLEGapAdvType.non_connectable_undirected)
    2021-01-25 16:43:23,675 Received advertisement report, address: 0x3536A132EA52, device_name: 
    2021-01-25 16:43:23,676 evt> adv_report conn(65535)
     peer_addr(46:B8:5F:F1:9B:8D)
     rssi(-70)
     adv_type(BLEGapAdvType.connectable_undirected)
    2021-01-25 16:43:23,676 Received advertisement report, address: 0x46B85FF19B8D, device_name: 
    2021-01-25 16:43:23,677 evt> adv_report conn(65535)
     peer_addr(46:B8:5F:F1:9B:8D)
     rssi(-70)
     adv_type(None)
    2021-01-25 16:43:23,677 Received advertisement report, address: 0x46B85FF19B8D, device_name: 
    2021-01-25 16:43:23,678 evt> adv_report conn(65535)
     peer_addr(E6:21:97:15:02:0F)
     rssi(-33)
     adv_type(BLEGapAdvType.connectable_undirected)
    2021-01-25 16:43:23,678 Received advertisement report, address: 0xE6219715020F, device_name: AirTurn D96D
    2021-01-25 16:43:23,679 BLE: Found target advertiser, address: 0xE6219715020F, name: AirTurn D96D
    2021-01-25 16:43:23,679 BLE: Connecting to 0xE6219715020F
    2021-01-25 16:43:23,679 Unknown address type: {self.addr_type)
    2021-01-25 16:43:23,680 evt> adv_report conn(65535)
     peer_addr(E6:21:97:15:02:0F)
     rssi(-32)
     adv_type(None)
    2021-01-25 16:43:23,680 Received advertisement report, address: 0xE6219715020F, device_name: 
    2021-01-25 16:43:23,680 BLE: Found target advertiser, address: 0xE6219715020F, name: 
    2021-01-25 16:43:23,680 BLE: Connecting to 0xE6219715020F
    2021-01-25 16:43:23,709 BLE: Connected to [230, 33, 151, 21, 2, 15]
    2021-01-25 16:43:23,710 evt> conn_param_update_request conn(0)
     conn_params(
      min_conn_interval_ms(15.0)
      max_conn_interval_ms(15.0)
      slave_latency(0))
    2021-01-25 16:43:23,710 evt> conn_param_update_request conn(0)
     conn_params(
      min_conn_interval_ms(15.0)
      max_conn_interval_ms(15.0)
      slave_latency(0))
    2021-01-25 16:43:24,710 Successfully Connected
    2021-01-25 16:43:24,710 BLE: Service Discovery
    2021-01-25 16:43:24,761 evt> on_gattc_evt_prim_srvc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Service uuid(0x1800) start handle(1) end handle(9)
     Service uuid(0x1801) start handle(10) end handle(13)
     Service uuid(0xFE59) start handle(14) end handle(19)
    2021-01-25 16:43:24,820 evt> on_gattc_evt_prim_srvc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Service uuid(0x180A) start handle(20) end handle(65535)
    2021-01-25 16:43:24,881 evt> on_gattc_evt_char_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Characteristic uuid(0x2A00) properties(BLECharProperties(broadcast=0, read=1, write_wo_resp=0, write=1, notify=0, indicate=0, auth_signed_wr=0)) declaration handle(2) value handle(3)
     Characteristic uuid(0x2A01) properties(BLECharProperties(broadcast=0, read=1, write_wo_resp=0, write=0, notify=0, indicate=0, auth_signed_wr=0)) declaration handle(4) value handle(5)
     Characteristic uuid(0x2A04) properties(BLECharProperties(broadcast=0, read=1, write_wo_resp=0, write=0, notify=0, indicate=0, auth_signed_wr=0)) declaration handle(6) value handle(7)
    2021-01-25 16:43:24,940 evt> on_gattc_evt_char_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Characteristic uuid(0x2AA6) properties(BLECharProperties(broadcast=0, read=1, write_wo_resp=0, write=0, notify=0, indicate=0, auth_signed_wr=0)) declaration handle(8) value handle(9)
    2021-01-25 16:43:25,000 evt> on_gattc_evt_char_disc_rsp status(BLEGattStatusCode.attribute_not_found) conn(0)
     
    2021-01-25 16:43:25,060 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x2A00) handle(3)
    2021-01-25 16:43:25,120 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x2A01) handle(5)
    2021-01-25 16:43:25,180 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x2A04) handle(7)
    2021-01-25 16:43:25,240 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x2AA6) handle(9)
    2021-01-25 16:43:25,300 evt> on_gattc_evt_char_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Characteristic uuid(0x2A05) properties(BLECharProperties(broadcast=0, read=0, write_wo_resp=0, write=0, notify=0, indicate=1, auth_signed_wr=0)) declaration handle(11) value handle(12)
    2021-01-25 16:43:25,360 evt> on_gattc_evt_char_disc_rsp status(BLEGattStatusCode.attribute_not_found) conn(0)
     
    2021-01-25 16:43:25,420 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x2A05) handle(12)
     Descriptor uuid(0x2902 (Standard.cccd)) handle(13)
    2021-01-25 16:43:25,481 evt> on_gattc_evt_char_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Characteristic uuid(0x0002) properties(BLECharProperties(broadcast=0, read=0, write_wo_resp=1, write=0, notify=0, indicate=0, auth_signed_wr=0)) declaration handle(15) value handle(16)
    2021-01-25 16:43:25,541 evt> on_gattc_evt_char_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Characteristic uuid(0x0001) properties(BLECharProperties(broadcast=0, read=0, write_wo_resp=0, write=1, notify=1, indicate=0, auth_signed_wr=0)) declaration handle(17) value handle(18)
    2021-01-25 16:43:25,600 evt> on_gattc_evt_char_disc_rsp status(BLEGattStatusCode.attribute_not_found) conn(0)
     
    2021-01-25 16:43:25,661 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x0002) handle(16)
    2021-01-25 16:43:25,721 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x0001) handle(18)
    2021-01-25 16:43:25,780 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x2902 (Standard.cccd)) handle(19)
    2021-01-25 16:43:25,841 evt> on_gattc_evt_char_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Characteristic uuid(0x2A29) properties(BLECharProperties(broadcast=0, read=1, write_wo_resp=0, write=0, notify=0, indicate=0, auth_signed_wr=0)) declaration handle(21) value handle(22)
     Characteristic uuid(0x2A24) properties(BLECharProperties(broadcast=0, read=1, write_wo_resp=0, write=0, notify=0, indicate=0, auth_signed_wr=0)) declaration handle(23) value handle(24)
     Characteristic uuid(0x2A25) properties(BLECharProperties(broadcast=0, read=1, write_wo_resp=0, write=0, notify=0, indicate=0, auth_signed_wr=0)) declaration handle(25) value handle(26)
    2021-01-25 16:43:25,900 evt> on_gattc_evt_char_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Characteristic uuid(0x2A27) properties(BLECharProperties(broadcast=0, read=1, write_wo_resp=0, write=0, notify=0, indicate=0, auth_signed_wr=0)) declaration handle(27) value handle(28)
    2021-01-25 16:43:25,959 evt> on_gattc_evt_char_disc_rsp status(BLEGattStatusCode.attribute_not_found) conn(0)
     
    2021-01-25 16:43:26,020 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x2A29) handle(22)
    2021-01-25 16:43:26,080 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x2A24) handle(24)
    2021-01-25 16:43:26,140 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x2A25) handle(26)
    2021-01-25 16:43:26,200 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.success) conn(0)
     Descriptor uuid(0x2A27) handle(28)
    2021-01-25 16:43:26,260 evt> on_gattc_evt_desc_disc_rsp status(BLEGattStatusCode.attribute_not_found) conn(0)
     
    2021-01-25 16:43:26,260 BLE: Enabling longer ATT MTUs
    2021-01-25 16:43:26,320 ATT MTU exchanged: conn_handle=0 att_mtu=247
    2021-01-25 16:43:26,320 New ATT MTU is 247
    2021-01-25 16:43:26,320 BLE: Enabling longer Data Length
    2021-01-25 16:43:26,440 New Data Length is 251
    2021-01-25 16:43:26,440 BLE: Enabling Notifications
    2021-01-25 16:43:26,500 evt> on_gattc_evt_write_rsp conn(0)
     status(BLEGattStatusCode.success)
     error_handle(0)
     attr_handle(19)
     write_op(BLEGattWriteOperation.write_req)
     offset(0)
     data([])
    2021-01-25 16:43:26,500 BLE: Set Packet Receipt Notification 0
    2021-01-25 16:43:26,560 evt> on_gattc_evt_write_rsp conn(0)
     status(BLEGattStatusCode.success)
     error_handle(0)
     attr_handle(18)
     write_op(BLEGattWriteOperation.write_req)
     offset(0)
     data([])
    2021-01-25 16:43:26,561 evt> on_gattc_evt_hvx status(BLEGattStatusCode.success) conn(0)
     error_handle(0)
     attr_handle(18)
     hvx_type(BLEGattHVXType.notification)
     data([96, 2, 1])
    2021-01-25 16:43:26,561 Sending init packet...
    2021-01-25 16:43:26,561 BLE: Selecting Object: type:1
    2021-01-25 16:43:26,620 evt> on_gattc_evt_write_rsp conn(0)
     status(BLEGattStatusCode.success)
     error_handle(0)
     attr_handle(18)
     write_op(BLEGattWriteOperation.write_req)
     offset(0)
     data([])
    2021-01-25 16:43:26,621 evt> on_gattc_evt_hvx status(BLEGattStatusCode.success) conn(0)
     error_handle(0)
     attr_handle(18)
     hvx_type(BLEGattHVXType.notification)
     data([96, 6, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
    2021-01-25 16:43:26,621 BLE: Object selected: max_size:512 offset:0 crc:0
    2021-01-25 16:43:26,680 evt> on_gattc_evt_write_rsp conn(0)
     status(BLEGattStatusCode.success)
     error_handle(0)
     attr_handle(18)
     write_op(BLEGattWriteOperation.write_req)
     offset(0)
     data([])
    2021-01-25 16:43:26,681 evt> on_gattc_evt_hvx status(BLEGattStatusCode.success) conn(0)
     error_handle(0)
     attr_handle(18)
     hvx_type(BLEGattHVXType.notification)
     data([96, 1, 1])
    2021-01-25 16:43:26,681 BLE: Streaming Data: len:151 offset:0 crc:0x00000000
    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/3.8/bin/nrfutil", line 11, in <module>
    2021-01-25 16:43:28,499 RpcAppStatus.pktSendError: Error sending packet to target. Code: 0x802a
    2021-01-25 16:43:28,499 evt> status code(RpcAppStatus.pktSendError) message(Error sending packet to target. Code: 0x802a)
        load_entry_point('nrfutil==6.1.0', 'console_scripts', 'nrfutil')()
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 829, in __call__
        return self.main(*args, **kwargs)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 782, in main
        rv = self.invoke(ctx)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/click/core.py", line 610, in invoke
        return callback(*args, **kwargs)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/__main__.py", line 1199, in ble
        dfu.dfu_send_images()
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu.py", line 115, in dfu_send_images
        self._dfu_send_image(self.manifest.softdevice_bootloader)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu.py", line 95, in _dfu_send_image
        self.dfu_transport.send_init_packet(data)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu_transport_ble.py", line 524, in send_init_packet
        self.__stream_data(data=init_packet)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu_transport_ble.py", line 642, in __stream_data
        self.dfu_adapter.write_data_point(list(to_transmit))
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/nordicsemi/dfu/dfu_transport_ble.py", line 350, in write_data_point
        self.adapter.write_cmd(self.conn_handle, DFUAdapter.DP_UUID, data)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pc_ble_driver_py/ble_adapter.py", line 568, in write_cmd
        raise e
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pc_ble_driver_py/ble_adapter.py", line 554, in write_cmd
        response = self.driver.ble_gattc_write(conn_handle, write_params)
      File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pc_ble_driver_py/ble_driver.py", line 103, in wrapper
        raise NordicSemiException(
    pc_ble_driver_py.exceptions.NordicSemiException: Failed to ble_gattc_write. Error code: NRF_ERROR_SD_RPC_NO_RESPONSE
    

    The receiving bootloader is from 17.0.2 SDK, and works with the DFU libraries on Android and iOS.

Related