Hi expert,
To summarize the problem:
Background:
Customer wanted the TPS65381A to always work in the diagnostic state instead of the active state, but found that when the power was turned on, the TPS65381A would be stuck in a safe state.
Compared with the previous normal design, the main difference is that IGN wake-up is now used instead of CAN wake-up
Progress:
I checked the power on and stuck in a safe state. There are the following possibilities:
- Diagnostic Status Timeout // Most cars work fine, so this is ruled out
- ABIST, LBIST, or both failed to start// It may be the reason that it is stuck in a safe state
- SPI failure // Not sure, is there a good way to verify it?
- DIAGNOSTIC STATE TIME-OUT AND(DIAG_EXIT_MASK or DIAG_EXIT) Was Not Set // Most cars work fine, so this is ruled out
- (CFG_CRC_ERR = 1 AND CFG_CRC_EN is cleared to 0)
- EE_CRC_ERR
- ABIST_ERR // It may be the reason that it is stuck in a safe state, refer the follow test data
- LBIST_ERR
- (WD_FAIL and ERROR_PIN_FAIL flags were not cleared to 0 before setting DIAG_EXIT) //It has been set in the client software
Please help to comment.
The initialization software is as follows:
Void TPS65381Init(void)
{
Uint16 Temp = 0;
Temp = ReadData(RD_SAFETY_STAT_5);
if (Temp == 0x07) //diagnostic state
{
Temp = ReadData(RD_SAFETY_FUNC_CFG); // Read register RD_SAFETY_FUNC_CFG value
Temp = (Temp & 0xF7) | 0x10; // Watchdog monitor clear, latch IGN pin
WriteData(WR_SAFETY_FUNC_CFG, Temp ); // Disable watchdog reset function, latch IGN pin
WriteData(WR_SAFETY_ERR_STAT, 0x00); // Clear WD_FAIL and ERROR_PIN_FAIL bits
WriteData(WR_DIAG_CFG_CTRL, 0x82); //
EnVSOUT1(); // Enable VSOUT1
EnDRV(); // Enable ENDRV
WriteData(WR_DIAG_MUX_SEL, 0x20); // VBATP
WDConfig(0x7F,0x1F); // Configure the time to open the watchdog and close the watchdog of the TPS65381
Temp = ReadData(RD_SAFETY_CHECK_CTRL);
WriteData(WR_SAFETY_CHECK_CTRL, Temp | 0x02); // mask exit diagnostic
}
}
The following is the test data, please help to analyze:
- Why is it stuck in a safe state? #1, Could this be caused by a faulty watchdog? The details here might be?
- Why are the test results of #2 and #3 so different?
Register |
#1 Test data: Stuck in a safe state when powered on |
#2 Test data on a normal Single board |
#3 Test data on a normal car |
VMON_STAT_1 Register |
0000 0000 |
0000 0000 |
0000 0000 |
VMON_STAT_2 Register |
0000 0000 |
0000 0000 |
0000 0000 |
SAFETY_STAT_1 Register |
0000 0000 |
0000 0000 |
0000 0000 |
SAFETY_STAT_2 Register |
0000 0111 |
0000 0000 |
0000 0111 |
SAFETY_STAT_3 Register |
0000 1100 |
0000 0000 |
0000 0000 |
SAFETY_STAT_4 Register |
0000 0000 |
0000 0000 |
0000 1100 |
AFETY_STAT_5 Register |
0000 0100 |
0000 0111 |
0000 0111 |
SAFETY_ERR_STAT Register |
0000 0010 |
0000 0000 |
0011 0000 |
SAFETY_CHECK_CTRL Register |
0011 0100 |
0011 0111 |
0011 0111 |
SAFETY_FUNC_CFG Register |
1011 0101 |
1011 1101 |
1011 0101 |
SAFETY_BIST_CTRL Register |
0000 0000 |
0000 0000 |
0000 0000 |
DIAG_CFG_CTRL Register |
1000 0010 |
1000 0010 |
1000 0010 |
DIAG_MUX_SEL Register |
0010 0000 |
0010 0000 |
0010 0000 |
SAFETY_CFG_CRC Register |
0001 0000 |
0001 0000 |
0001 0000 |
SAFETY_ERR_CFG Register |
0000 0000 |
0000 0000 |
0000 0000 |
WD_STATUS Register |
0000 0000 |
0000 0000 |
0000 0000 |
WD_TOKEN_FDBK Register |
0000 0000 |
0000 0000 |
0000 0000 |
For #1, when an ABIST error occurs and find out why WD_ERR is not set to 1 when the WD_FAIL_CNT count is 7?