I am using the process detailed in the note on page 61 of the product data sheet to do a test on the CRC checking hardware during DIAGNOSTIC mode.
From Datasheet:
While in the DIAGNOSTIC state, a check can be performed to confirm the CFG_CRC_ERR
bit is set to 1 on a mismatch between the value stored in the SAFETY_CFG_CRC register
and the value that is calculated from the configuration registers covered by the CRC8. If the
CFG_CRC_EN is cleared while the CFG_CRC_ERR bit is set to 1, then the device
transitions to the SAFE state, set the EE_CRC_ERR bit and clear the CFG_CRC_EN bit. To
avoid this transition to the SAFE state, the CFG_CRC_ERR bit must be cleared by running
the EEPROM CRC by setting the EE_CRC_CHK bit. While the EPPROM CRC is running,
the EE_CRC_ERR bit is set. Assuming the EEPROM CRC was good, both the
EE_CRC_ERR and CFG_CRC_ERR bits are cleared. To check if the CFG_CRC_ERR bit is
0 for a matching CRC, the matching CRC value should be stored in the SAFETY_CFG_CRC
register. Then the CFG_CRC_EN bit must be cleared to 0 and set again to 1 which reruns
the CRC on the configuration registers, resulting in the CFG_CRC_ERR bit being 0.
This works as expected when the system is brought up from a power down state. When EE_CRC_EN is set the EE_CRC_ERR flag is immediately set. After about 800uS the EE_CRC_ERR and CFG_CRC_ERR flags are cleared as expected. The code exits normally by following the process listed in the note.
When the system is cycled using the IGN pin, with POST_RUN_RST=1 and IGN_PWRL=1, the same code fails. The CFG_CRC_EN process works as expected by setting the CFG_CRC_ERR flag. When the EE_CRC_CHK is set the EE_CRC_ERR bit never sets to indicate the check is in progress. After the ~800uS the process does not clear the CFG_CRC_ERR flag leaving the software stalled waiting for CFG_CRC_ERR to clear indicating a successful EE_CRC test completion.
I'm assuming some register value or internal process is not reseting the same under IGN vs power up but cannot pinpoint it. Figure 5-16 Device Controller State Diagram indicates that both of these paths (IGN and power up) should result in the power supply entering the RESET state, which I would assume would reset ALL the internal values independent of what initiated the reset.
Can you explain what might be different between the two reset initiators (power up and IGN recrank) and how that might be affecting the EE_CRC_EN response?
Thanks