FOTA application reset with Tx power > 0 dBm (pack 3.5.285)

I have upgraded my RSL10 application with the latest soft package 3.5.285.
I have upaded also the integrated FOTA application with the latest source.

Evrything works fine with the default config with Tx power set to 0 dBm, i can jump to FOTA app from my application and upgrade the firmware.
However, it does not work with Tx power set to +6dBm (same with +3dBm).
A reset occurs immediately when entering the FOTA app.

This does not occur with BLE stack and FOTA binary from soft package 3.2.608.

Also i must apply a trick, need to adjust the clock divider prior the jump to the FOTA binary as my application system clock operates @48Mhz i must adjust the prescaler as FOTA operates at @8MHz (i have this config since a start using the RSL10 from pack 3.1.575. I ll post a new subject about it).

‘’’’’’’’
RF_REG2F->CK_DIV_1_6_CK_DIV_1_6_BYTE = CK_DIV_1_6_PRESCALE_6_BYTE;
SystemCoreClockUpdate();
Sys_Fota_StartDfu(1);
‘’’’’’’’

@sylvain.mariteau

For question regarding the 3dBm and 6 dBm TX power(dBm), there is a table as you can see below. Could you please double check VDDPA voltage level?

Thank you for using our community forum!

@sylvain.mariteau

Did you check the ACS_RESET_STATUS and DIG_RESET_STATUS registers that indicate the reset cause(s) ? It won’t solve your problem but it could give hints…

In sys_fota.h there is no explicit assumptions…

/* ----------------------------------------------------------------------------
 * Function      : void Sys_Fota_StartDfu(uint32_t mode)
 * ----------------------------------------------------------------------------
 * Description   : Starts the FOTA from the application
 * Inputs        : mode     0 = from stackless application
 *                          1 = from application with BLE stack
 * Outputs       : None
 * Assumptions   :
 * ------------------------------------------------------------------------- */
void Sys_Fota_StartDfu(uint32_t mode);

…whereas it should at least mention (according to your experience on SDK3.5):

  • that SYSCLK must be set to 8MHz,
  • that Tx power must be set to 0dBm.
2 Likes

FOTA wrapper

The source code of Sys_Fota_StartDfu is provided in fota_stack_wrapper.c:

void Sys_Fota_StartDfu(uint32_t mode)
{
    /* Initialize system */
    if (mode != 0)
    {
      BLE_Reset();
    }
    Sys_Initialize();

    /* Start DFU */
    Sys_BootROM_StartApp((uint32_t *)APP_BASE_ADR);

    /* If DFU start failed -> wait for Reset */
    for (;;);
}

It performs partial initialization and calls the primary entry point (within the system library, not your applicative entry point).

The initialization is partial because the state of most hardware registers is left as set by your program and basic initialization (memory / clock / power supply) is unchanged (they are set by Sys_Initialize_Base, not by Sys_Initialize).

SDK3.2 to SDK3.5

A diff between SDK 3.2 and 3.5 shows that the code of this wrapper didn’t change, so the regression you see can only come from BLE_Reset as the other two - Sys_Initialize and Sys_BootROM_StartApp - are just wrappers to ROM code.

2 Likes

Hi,

On order to use an application with maximum Tx power +6dBm, the config of the current trim must be adjusted for VCC. See the diff below.
I remembered this update i had done a while ago for our application to work with max Tx Power.

Date:   Wed May 26 14:26:39 2021 +0200

    set vcc charge pump 80mA instead of 16mA

    diff --git a/dfu/drv_targ.c b/dfu/drv_targ.c
    index d52ed14..61d1c85 100644
    --- a/dfu/drv_targ.c
    +++ b/dfu/drv_targ.c
    @@ -48,7 +48,7 @@ void Drv_Targ_Init(void)
         DIO_JTAG_SW_PAD_CFG->CM3_JTAG_TRST_EN_ALIAS = CM3_JTAG_TRST_DISABLED_BITBAND;

         /* Configure the current trim settings for VCC, VDDA. */
    -    ACS_VCC_CTRL->ICH_TRIM_BYTE  = VCC_ICHTRIM_16MA_BYTE;
    +    ACS_VCC_CTRL->ICH_TRIM_BYTE  = VCC_ICHTRIM_80MA_BYTE;
         ACS_VDDA_CP_CTRL->PTRIM_BYTE = VDDA_PTRIM_16MA_BYTE;
2 Likes