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

MCP - Firmware upload - timeout waiting for START

Hello, I tried to do DFU using MCP 3.10.0.14 and I'm getting the error:

"Error during firmware upload. Timeout while waiting for response for START DFU"

How do I increase timeout in MCP??

It seems to happen when I try to upload bigger firmware.

Parents
  • "Timeout while waiting for response for START DFU" should be 60 seconds according to the documentation, but it seems to be less. A quick fix is to add an additional delay in "..\Master Control Panel\3.10.0.14\lib\nordicsemi\dfu\dfu_transport_ble.py" at line ~229:

    def _start_dfu(self, program_mode, image_size_packet):
        logger.debug("Sending 'START DFU' command")
        self.send_control_data(DfuOpcodesBle.START_DFU, chr(program_mode))
        logger.debug("Sending image size")
        self.send_packet_data(image_size_packet)
        # wait 10 seconds
        sleep(10)
        self._wait_for_condition(self.get_received_response, waiting_for="response for START DFU")
        self.clear_received_response()
    

    Reason for this failure is that the swap erase is taking too long time to complete when the FW image exceeds a certain size. I will report this internally so that it will be addressed when adding DFU support for nRFconnect.

    Note that the MIN_CONN_INTERVAL should not be reduced as the flash writes may become a bottleneck. 15 ms is the lowest recommended interval.

Reply
  • "Timeout while waiting for response for START DFU" should be 60 seconds according to the documentation, but it seems to be less. A quick fix is to add an additional delay in "..\Master Control Panel\3.10.0.14\lib\nordicsemi\dfu\dfu_transport_ble.py" at line ~229:

    def _start_dfu(self, program_mode, image_size_packet):
        logger.debug("Sending 'START DFU' command")
        self.send_control_data(DfuOpcodesBle.START_DFU, chr(program_mode))
        logger.debug("Sending image size")
        self.send_packet_data(image_size_packet)
        # wait 10 seconds
        sleep(10)
        self._wait_for_condition(self.get_received_response, waiting_for="response for START DFU")
        self.clear_received_response()
    

    Reason for this failure is that the swap erase is taking too long time to complete when the FW image exceeds a certain size. I will report this internally so that it will be addressed when adding DFU support for nRFconnect.

    Note that the MIN_CONN_INTERVAL should not be reduced as the flash writes may become a bottleneck. 15 ms is the lowest recommended interval.

Children
No Data
Related