cancel
Showing results for 
Search instead for 
Did you mean: 

Why mcu not reset on ESD test ?

Mahendra Rana
Associate III
Posted on May 16, 2018 at 08:54

  1. When I run system clock through HSE(8MHz/24MHz/25MHz) and PLLCLK (multiplier PLLN and divider PLLM & PLLR) than mcu not reset by ESD.

  2. But when I run system clock directly through HSE(8MHz/24MHz/25MHz) than mcu get reset by ESD.

Can any one comment for my issue..

Note: this post was migrated and contained many threaded conversations, some content may be missing.
34 REPLIES 34
Posted on May 18, 2018 at 10:44

I've re-read the original post and you are quite right.. Maybe the VCO in the PLL keeps going for long enough to keep the MCU happy.

Posted on May 18, 2018 at 11:23

I am still not convinced that both things (reset with PLL, no reset without) are a direct effect of the ESD tests.

http://www.tylervigen.com/spurious-correlations

.

The PLL implies a higher core clock, which in turn means higher current draw.

Posted on May 18, 2018 at 18:58

Can you elaborate more for VCO in PLL?

Posted on May 18, 2018 at 19:01

Yes I agree at high frequency or PLL require more current but by PLL it is not reset. Can you reply why happens so?

Posted on May 18, 2018 at 19:25

Yes I am using IWDG to obtain 250ms IWDG TimeOut.

And one more interesting thing is that by default in HAL library all 

fault 

interrupt handler routine having infinite while loop than at that time MCU reset during esd test and got hangs. But when I called system soft reset than only mcu not hangs. and restart.

as in below code mcu not hangs when auto reset by esd otherwise sometimes it goes into this anyone handler and got hangs in infinite loop so I wrote in all handler as system soft reset in spite of infinite while loop only. But I don't now that in which handler it got hangs. So is it a right way??

I will do some more trials to find exact location and handler in which it goes after auto reset by esd.

void HardFault_Handler(void)

{

NVIC_SystemReset(); /*reset the system by software, after reset when power up check eeprom bytes for jumping to rom bootloader */

}

/**

* @brief This function handles Memory management fault.

*/

void MemManage_Handler(void)

{

NVIC_SystemReset(); /*reset the system by software, after reset when power up check eeprom bytes for jumping to rom bootloader */

}

/**

* @brief This function handles Prefetch fault, memory access fault.

*/

void BusFault_Handler(void)

{

NVIC_SystemReset(); /*reset the system by software, after reset when power up check eeprom bytes for jumping to rom bootloader */

}

/**

* @brief This function handles Undefined instruction or illegal state.

*/

void UsageFault_Handler(void)

{

NVIC_SystemReset(); /*reset the system by software, after reset when power up check eeprom bytes for jumping to rom bootloader */

}
Posted on May 18, 2018 at 19:27

No mcu auto reset by esd.

And one more interesting thing is that by default in HAL library all 

fault 

interrupt handler routine having infinite while loop than at that time MCU reset during esd test and got hangs. But when I called system soft reset than only mcu not hangs. and restart.

as in below code mcu not hangs when auto reset by esd otherwise sometimes it goes into this anyone handler and got hangs in infinite loop so I wrote in all handler as system soft reset in spite of infinite while loop only. But I don't now that in which handler it got hangs. So is it a right way??

I will do some more trials to find exact location and handler in which it goes after auto reset by esd.

void HardFault_Handler(void)

{

NVIC_SystemReset(); /*reset the system by software, after reset when power up check eeprom bytes for jumping to rom bootloader */

}

/**

* @brief This function handles Memory management fault.

*/

void MemManage_Handler(void)

{

NVIC_SystemReset(); /*reset the system by software, after reset when power up check eeprom bytes for jumping to rom bootloader */

}

/**

* @brief This function handles Prefetch fault, memory access fault.

*/

void BusFault_Handler(void)

{

NVIC_SystemReset(); /*reset the system by software, after reset when power up check eeprom bytes for jumping to rom bootloader */

}

/**

* @brief This function handles Undefined instruction or illegal state.

*/

void UsageFault_Handler(void)

{

NVIC_SystemReset(); /*reset the system by software, after reset when power up check eeprom bytes for jumping to rom bootloader */

}
Posted on May 18, 2018 at 19:29

yes you are right.

I have question why by hse+pll not reset but by hse only reset on esd test.

Posted on May 18, 2018 at 19:35

I am testing esd through electric lighter on air discharge and on metal body by contact discharge. As in my lab don't have esd gun. But went to third party lab and also tested on esd gun. Same rest issue their also.

What you mean by lowest power possible? can you elaborate more please..

Posted on May 18, 2018 at 19:37

yes you are right

Posted on May 18, 2018 at 19:43

what in Hard fault handler I have to write. Can you elaborate more please.. 

And one more interesting thing is that by default in HAL library all 

fault 

interrupt handler routine having infinite while loop than at that time MCU reset during esd test and got hangs. But when I called system soft reset than only mcu not hangs. and restart.

as in below code mcu not hangs when auto reset by esd otherwise sometimes it goes into this anyone handler and got hangs in infinite loop so I wrote in all handler as system soft reset in spite of infinite while loop only. But I don't now that in which handler it got hangs. So is it a right way??

I will do some more trials to find exact location and handler in which it goes after auto reset by esd.

void HardFault_Handler(void)

{

NVIC_SystemReset();

}

void MemManage_Handler(void)

{

NVIC_SystemReset();

}

void BusFault_Handler(void)

{

NVIC_SystemReset();

}

void UsageFault_Handler(void)

{

NVIC_SystemReset();

}