Other Parts Discussed in Thread: UCD3138
UCD3138A Reset problem.
I've got a project that just suffered a very mysterious problem. Hoping to get some insight into possibilities and explanation. Will add relevant code at end of post.
Symptom:
Finished code with no backdoor to erase/remove checksum, suffered a restart/reset loop for 20-40 cycles and them stopped functioning. Checksum verification from resident bootloader now failing (full reason still unknown), and jump to c_int00(void) -> main() no longer happening.
Detail Description:
Finished code with no backdoor to erase checksum. Pmbus_handler() still called each time at the top of main's for(;;) loop.
During susceptibility testing we had a particular frequency - at high power levels - that appeared to be causing a repeated reset loop to occur (theory that !RESET line so noisy to be seen as reset by micro, or 3.3V rail extending either 3.6V+ or 3.0V- and bouncing across boundary.
After many cycles of this (trying to isolate and debug root cause), the micro appeared to stop functioning. After tear down we were able to confirm the 3.3V supply to the micro, put the programming/debug header on. No UCD3138A response from UCD3XXX Device GUI's "Scan for Device in Program Mode", but positive response "Scan Device in ROM Mode".
The only way I know for this symptom to occur is that checksum has been erased, or a byte w/n program flash has been corrupted (such that checksum is incorrect).
Question:
What are possible causes for this series of events? Obviously this is an unacceptable behavior for the project, so need to get some clarity.
Relevant Code:
void main(void){
Uint32 vsense_adc_val;
// initialize some variables
InputBits.aim9_launch_cnt = 0;
InputBits.aux_fire_cnt = 0;
InputBits.master_arm_cnt = 0;
PrevRegLoadState = RSTATE_BAD_UNKNOWN;
// this allows MASTER_ARM to be flipped to active for a powercycle, and when this is
// done, the checksums will both be erased and thus the micro will stay in boot (PMBUS capable)
// remove the CHKSUM from FLASH, forcing a hold in RAM + reprogram cycle
//if(GioRegs.FAULTIN.bit.TMS_IN == 1)
//{
// clear_integrity_word();
//}
// ================================================================
// ================================================================
// Setup Hardware / Peripherals / DPPs
SystemStartup();
TmrMSecSet(GENERAL_PURPOSE_DLY_TMR, 200);
Event_Add(EVT_STARTUP, Ram_EADC_DAC0);
for(;;)
{
// DWH: process PMBus traffic
pmbus_handler();
..... procedural project code ......
}
}