mpc5643L power up sequence

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

mpc5643L power up sequence

553 Views
jinjingyang
NXP Employee
NXP Employee

Dear Sir,

 

Customer use 3.3V to supply MPC5643L VDD_HV_IO/VDD_HV_ADV, and internal regulator based on 3.3V to supply VDD_LV.

And customer us 5.0V to supply VDD_HV_ADR.

The problem here is that if we supply 3.3V first, then after a while, turn on 5V for VDD_HV_ADR manually, the MCU looks not working.

Do we have any requirement on power up sequence? And what's the max allowed delay between VDD_HV/VDD_LV and VDD_HV_ADR?

 

Regards,

Jason Yang

Labels (1)
0 Kudos
2 Replies

422 Views
jinjingyang
NXP Employee
NXP Employee

Hi, David,

Customer can use Lauterbach debugger to attach to the MCU when VDD_HV_ADR (5V) is not applied.

MCU is in reset state. But reset pin is high.

Then apply 5V to VDD_HV_ADR and check the MC_RGM module register FES, found that F_FCCU_SAFE is 1 and F_SOFT is 1.

The function Clear_CF and Clear_NCF is at the beginning of main. But MCU cannot run to this location, thus cannot run these two functions.

What else should we do to handle this case?

Customer's problem is if VDD_HV/VDD_LV/VDD_HV_ADC is applied first, then VDD_HV_ADR 5V is applied after a while, MCU cannot run to normal state.

Regards,

Jason Yang

0 Kudos

422 Views
davidtosenovjan
NXP TechSupport
NXP TechSupport

What does it mean “MCU looks not working”?

 

If you don’t have stable ADC reference voltage during reset, after reset device will report FCCU fault due to failed self-test and if unhandled it’ll go into SAFE mode. If you use clear fails as below, it should work even in case ADC reference is attached later.

 

 

static void ClearFails(void)

{

    uint16_t reset_register;

   

    if(RGM.FES.B.F_FCCU_SAFE /*|| RGM.FES.B.F_FCCU_HARD*/)

    {

        reset_register = RGM.FES.R;

        ME.IMTS.R = 0x00000001;

        ClearCF();

        ClearNCF();

       

        RGM.FES.R = 0xFFFF;

        RGM.DES.R = 0xFFFF;

       

        /* re-enter DRUN */

        ME.MCTL.R = 0x30005AF0; /* Enter DRUN Mode & Key */       

        ME.MCTL.R = 0x3000A50F; /* Enter DRUN Mode & Inverted Key */

    }

}

 

static void ClearCF(void)

{

    uint32_t i,a[4];

    for(i=0;i<4;i++)

    {

        FCCU.CFK.R = FCCU_CFK_KEY;

  

        FCCU.CF_S[i].R = 0xFFFFFFFF;

 

        while(FCCU.CTRL.B.OPS != 0x3)

        {

           

        };      /* wait for the completion of the operation */

 

        a[i]=FCCU.CF_S[i].R;

    }

}

 

static void ClearNCF(void)

{

    uint32_t i,b[4];

    for(i=0;i<4;i++)

    {

        FCCU.NCFK.R = FCCU_NCFK_KEY;

        FCCU.NCF_S[i].R = 0xFFFFFFFF;

        while(FCCU.CTRL.B.OPS != 0x3)

        {

       

        };              /* wait for the completion of the operation */

        b[i]=FCCU.NCF_S[i].R;

    }

}

0 Kudos