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

USB-BLE Bootloader stuck unable to DFU after DFU process was interrupted

Hello,

We've recently updated our BLE-USB bootloader from using SDK v15.2.0 to v17.0.2 and noticed an issue. Our USB-BLE bootloader was created with the USB-serial bootloader as the base. We then added the ble transport files, soft-device-related files, and relevant sdk config flags on top.

We call the USB-serial dfu in nrfutil using the following command:

nrfutil dfu usb-serial -pkg package.zip -p COM75

When we interrupt the nrfutil dfu (e.g. through keyboard interrupt), the device bootloader will get stuck in a state where subsequent dfu attempts through nrfutil will not go through and output this error message:

File "C:\Python27\Scripts\nrfutil-script.py", line 11, in <module>
load_entry_point('nrfutil==5.1.0', 'console_scripts', 'nrfutil')()
File "C:\Python27\lib\site-packages\click-7.1.2-py2.7.egg\click\core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "C:\Python27\lib\site-packages\click-7.1.2-py2.7.egg\click\core.py", line 782, in main
rv = self.invoke(ctx)
File "C:\Python27\lib\site-packages\click-7.1.2-py2.7.egg\click\core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\Python27\lib\site-packages\click-7.1.2-py2.7.egg\click\core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "C:\Python27\lib\site-packages\click-7.1.2-py2.7.egg\click\core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "C:\Python27\lib\site-packages\click-7.1.2-py2.7.egg\click\core.py", line 610, in invoke
return callback(*args, **kwargs)
File "C:\Python27\lib\site-packages\nrfutil-5.1.0-py2.7.egg\nordicsemi\__main__.py", line 1000, in usb_serial
timeout)
File "C:\Python27\lib\site-packages\nrfutil-5.1.0-py2.7.egg\nordicsemi\__main__.py", line 955, in do_serial
dfu.dfu_send_images()
File "C:\Python27\lib\site-packages\nrfutil-5.1.0-py2.7.egg\nordicsemi\dfu\dfu.py", line 129, in dfu_send_images
self._dfu_send_image(self.manifest.application)
File "C:\Python27\lib\site-packages\nrfutil-5.1.0-py2.7.egg\nordicsemi\dfu\dfu.py", line 102, in _dfu_send_image
self.dfu_transport.send_firmware(data)
File "C:\Python27\lib\site-packages\nrfutil-5.1.0-py2.7.egg\nordicsemi\dfu\dfu_transport_serial.py", line 301, in send_firmware
response['crc'] = self.__stream_data(data=data, crc=response['crc'], offset=i)
File "C:\Python27\lib\site-packages\nrfutil-5.1.0-py2.7.egg\nordicsemi\dfu\dfu_transport_serial.py", line 475, in __stream_data
response = self.__calculate_checksum()
File "C:\Python27\lib\site-packages\nrfutil-5.1.0-py2.7.egg\nordicsemi\dfu\dfu_transport_serial.py", line 413, in __calculate_checksum
raise NordicSemiException('Did not receive checksum response from DFU target. '
pc_ble_driver_py.exceptions.NordicSemiException: Did not receive checksum response from DFU target. If MSD is enabled on the target device, try to disable it ref. https://wiki.segger.com/index.php?title=J-Link-OB_SAM3U

The device's bootloader is stuck in this mode until we reflash it. We've tried using nrfutil on another computer but dfu still fails with this message. We've also tried this with nrfutil version 6.1.0.

We did not have this issue on the v15.2.0 bootloader. Is there something introduced in the latest SDK revisions since v15.2.0 that causes conflict between the USB and BLE dfu transports?

Thanks for your help.

Related