This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Hash validation failure when DFU package transferred manually. nrf_dfu_validation: Hash verification failed.

When i use nrfutil to perform DFU it is passed, but when i send it through STM32 dev kit it Hash validation failed. but however i can see the CRC is correct.

  • Hi,

    The question is a bit short on information, but I take it you have made your own serial DFU controller implementation running on the STM32, then? It is difficult to say what is the problem, but there must be a difference in the sequence when you use your implementation and when you use nrfutil. Have you compared them? What is the difference?

  • Hi Einar, 

    Yes we are trying to implement DFU from STM32 to nRF. When the same package is transferred through the PC using nrfutil, it is always successful. But when the same package is transferred from STM32 i see failure. but CRC is correct. 

    Soft-device : S140-V6.1.1
    SDK : v15.3.0
    Bootloader : "secure_bootloader_uart_mbr_pca10056_debug" example provided in SDK
    Generating the Application dfu package :
    nrfutil pkg generate --hw-version 52 --sd-req 0xB6 --application-version 1 --application Application.hex --key-file priv.pem AppDfuPkg.zip
    Following is the procedure to send Application binary using DFU
    1. Set PRN to 0, NRF_DFU_OP_RECEIPT_NOTIF_SET
    2.  GET MTU NRF_DFU_OP_MTU_GET
    3. Send init packet 
    • Send NRF_DFU_OP_OBJECT_SELECT  
    • Send  NRF_DFU_OP_OBJECT_CREATE
    • Send  NRF_DFU_OP_OBJECT_WRITE (keep sending packets with MTU size with slip packet )
    • Send  NRF_DFU_OP_OBJECT_EXECUTE
    4. Send application package
    1. Send NRF_DFU_OP_OBJECT_SELECT   
    2. Send  NRF_DFU_OP_OBJECT_CREATE
    3. Send  NRF_DFU_OP_OBJECT_WRITE (keep sending packets with MTU size with slip packet )
    4. Send  NRF_DFU_OP_OBJECT_EXECUTE
    5. Repeat step 2,3,4 till whole firmware is transferred

    5. DFU fails with <warning> nrf_dfu_serial: DFU request completed with result: 0xB

  • I see. It looks correct to me, but obviously there is a problem somewhere. Can you dump the UART traffic when using both nrfutil and your implementation and diff it to see where it differs?

  • I checked the debug logs from nRF while performing DFU from PC and from STM, I see similar logs.

    I enable verbose in nrfutil and checked and i found we're also following similar process.  

  • Hi,

    I see. Please upload the complete logs to this case, as it will be useful. However, what I was really interested in was a raw dump of the UART traffic (assuming you are using UART as DFU transport - please confirm). Comparing the dumps should hopefully show where there is a difference, and then we know where to look closer. 

Related