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.