Part Number: TMS570LC4357-EP
Other Parts Discussed in Thread: TMS570LC4357
Hello,
We are currently developing software on a TMS570LC4357-EP and are running into an intermittent problem with the N2HET module that we have difficulty root causing. We were hoping for some assistance in understanding what could affect this peripheral, to help figure out which part of our system (either software or hardware) could be causing this and whether or not you’ve seen similar issues in the past.
The context of the problem is this:
We use the N2HET peripherals as GPIO i.e. we disable the HTU and the HET controller. We also use a development probe (Lauterbach Trace32 probe) to debug our boards. When we issue resets from the probe to the HW board, the probe sends a command to the nRST pin to reset the MCU. The MCU remains powered on during this reset.
The N2HET works as expected most of the time but intermittently fails, about 1 in 10000 times, after we issue the reset command. During the startup sequence of our bootstrap, the N2HET would be unresponsive, after putting peripherals out of reset. It's as if the peripheral remains in a reset condition despite us using commands to get it out of reset. This issue remains until the next full electrical power cycle of the TMS570LC4357-EP.
When the issue happens, both N2HET1 and N2HET2 have all their all registers (control, direction, input, outputs, etc.) zeroed out and no longer editable. Reads to the HET input pins fail as they always return 0x00000000.
Resetting power domain pins (PDPWRDWNSET and PDPWRDWNCLR) makes no differences. Same with the VLCK CDDIS pins. We cannot seem to get the HET out of reset from that point onwards until we power cycle.
Our start up sequence up until the point of failure is as follows:
- we erase core registers (R0 to R12)
- we set FIQ, IRQ, Abort, Undefined and System modes,
- FIQ = 10001
- IRQ = 10010
- Abort = 10111
- Undef = 11011
- System = 11111
- We enable VFP Unit
- We clear Floating point registers (D0-D15)
- We set the stack pointers
- We initialize the RAM memory
- load and configure RAMCTRL,
- enable global memory hardware initialization via MINITGCR
- enable auto hardware initalization via MSIENA and wait for it to complete
- disable global memory hardware initialization via MINITGCR
- we bring peripherals out of reset, by doing this:
- forcing the primary system register (0xFFFFFF00) CLKCNTL bit 5 to 0 (to forcefully disable peripherals),
- setting all the PSPWRDWNCLRx to 0xFFFFFFFF, for PCR1, PCR2 and PCR3, then
- forcing the primary system register CLKCNTL bit 5 back to 1 (to forcefully re-enable peripherals),
After this, the HET should have be brought out of reset and be operational but sometimes it isn’t.
We initially suspected a VCLK issue (errata GCM#58 when VCLK <= HCLK/4) but this would be strange: we assume by default the ratio is VCLK/HCLK = 1/2 at startup, up until peripherals are out of reset. Also, our custom PLL configurations happen later in the startup it sets HCLK = 150MHz and keep VCLK1 and VCLK2 at a div ratio of 1/2.
Any help or other theories on what could be affecting the system would be appreciated. Attached are the register snapshots at start of operation, prior to and after reset and shortly after N2HET issue is encountered.
2112.Collected register values.zip