DA14531 SUOTA - Invalid product header

After a successful OTA operation, the succeeding OTA operation keeps giving an error message "Invalid product header" on SUOTA app with an update option to the oldest image-bank.

I would like to try running the OTA operations with two image files to update chip backwards and forwards. Please hint how to solve this situation. Thanks.

The following figures are the comparisons of the header parts between the content read from chip and the content burned to chip, after the successful OTA operation.

A difference is found starting at 0x10008, i.e. the CRC and Version and Timestamp of image. Is there any constraint on the format of the Version string?

Multipart Image Header at 0x0000 

Single Image Header at 0x04000 

Single Image Header at 0x10000 

Product Header at 0x1F000 

This is the information read from device on SUOTA app after the successful OTA operation.

Thanks,

Jim

Parents
  • Hi Jim,

    Thank you for posting your question online.
    The Invalid Product Header error means that the product header is corrupted, the SUOTA expects to read from the product header the location of the images, before doing that it checks the product header signature. If the product header doesn't match the signature bytes, then the application returns the INVALID PRODUCT HEADER message. 
    From the Screenshots you have shared I understand that you are working with DA14531MOD. Is that correct?
    You stated that you have added a macro SDK_VERSION_DATE to the user_version.h file. Where is the user_version.h file located? 
    You should use the sdk_version.h file which already contains the SDK_VERSION_DATE macro.
    You are able to OTA update from Image A to Image B, but you are not able to OTA update from Image B back to Image A. Have I misunderstood something?
    If this is the case, could you try to OTA update Image B to Image B again, and then try to OTA update from Image B back to Image A?

    Kind Regards,
    OV_Renesas

Reply
  • Hi Jim,

    Thank you for posting your question online.
    The Invalid Product Header error means that the product header is corrupted, the SUOTA expects to read from the product header the location of the images, before doing that it checks the product header signature. If the product header doesn't match the signature bytes, then the application returns the INVALID PRODUCT HEADER message. 
    From the Screenshots you have shared I understand that you are working with DA14531MOD. Is that correct?
    You stated that you have added a macro SDK_VERSION_DATE to the user_version.h file. Where is the user_version.h file located? 
    You should use the sdk_version.h file which already contains the SDK_VERSION_DATE macro.
    You are able to OTA update from Image A to Image B, but you are not able to OTA update from Image B back to Image A. Have I misunderstood something?
    If this is the case, could you try to OTA update Image B to Image B again, and then try to OTA update from Image B back to Image A?

    Kind Regards,
    OV_Renesas

Children
  • Hi OV_Renesas,

    Yes, I am working on DA14531MOD.

    Following your recommendation, I have use the sdk_version.h instead of the user_version.h and have successfully run OTA update from Image A to Image B, then to Image C, then to Image A, and then to Image D. It works well.

    The user_version.h was created according to this page, and I modified this file to change SDK_VERSION and/or SDK_VERSION_DATE then created testing images for OTA update. But SUOTA app always gave me this error message.

    Thank you for the correct information.

    Thanks,

    Jim

  • Hi Jim,

    Thank you for the reply and the feedback.
    Glad you were able to implement the OTA update as expected.
    Thank you also for highlighting the user_version.h file on the tutorial, I will reach out to the team to change this.
    On chapter 22. SUOTA Overview there is a video which explains all the steps. In this video sdk_version.h file is being used which is the correct one.

    Kind Regards,
    OV_Renesas

  • Hi OV_Renesas,

    The macro SDK_VERSION of sdk_version.h is referred by two macros APP_DIS_FIRM_REV_STR and APP_DIS_SW_REV_STR in user_profiles_config.h.

    /// Firmware Revision
    #define APP_DIS_FIRM_REV_STR            SDK_VERSION
    #define APP_DIS_FIRM_REV_STR_LEN        (sizeof(APP_DIS_FIRM_REV_STR) - 1)

    /// Software Revision String
    #define APP_DIS_SW_REV_STR              SDK_VERSION
    #define APP_DIS_SW_REV_STR_LEN          (sizeof(APP_DIS_SW_REV_STR) - 1)

    However, I would like to keep one of them as is, i.e. SDK_VERSION, while put my version string to the other one, for this could get us the information about the SDK_VERSION and APP_VERSION of this BLE device in used.

    I have try the following two modifications, and copy sdk_version.h to user_version.h while change the macro SDK_VERSION of user_version.h to the same value of APP_VERSION for image making.

    Both of them fail by the error message Invalid product header. How to make this requirement archive?

    (1)

    /// Firmware Revision
    #define APP_DIS_FIRM_REV_STR            APP_VERSION
    #define APP_DIS_FIRM_REV_STR_LEN        (sizeof(APP_DIS_FIRM_REV_STR) - 1)

    /// Software Revision String
    #define APP_DIS_SW_REV_STR              SDK_VERSION
    #define APP_DIS_SW_REV_STR_LEN          (sizeof(APP_DIS_SW_REV_STR) - 1)

    (2)

    /// Firmware Revision
    #define APP_DIS_FIRM_REV_STR            SDK_VERSION
    #define APP_DIS_FIRM_REV_STR_LEN        (sizeof(APP_DIS_FIRM_REV_STR) - 1)

    /// Software Revision String
    #define APP_DIS_SW_REV_STR              APP_VERSION
    #define APP_DIS_SW_REV_STR_LEN          (sizeof(APP_DIS_SW_REV_STR) - 1)

    Thanks,

    Jim

  • Hi Jim,

    Thank you for the reply.
    I replicated your issue. I declared a macro named APP_VERSION and the prox_reporter example can run just fine with that. 
    But I was also unable to perform SUOTA while the macro APP_VERSION was defined for the Firmware Revision or the Software Revision. 
    The SUOTA process needs the SDK_VERSION macro there. 
    You could insert in your 2nd FW (the one updated via SUOTA) to change the APP_DIS_SW_REV_STR just before advertising so you can see the version you had set when connected on the Info tab of any Generic BLE application.
    However you will have to keep the SDK_VERSION macro defined in the APP_DIS_FIRM_REV_STR and APP_DIS_SW_REV_STR when you want to perform SUOTA.

    Kind Regards,
    OV_Renesas