I'm having a problem with my A9 based system (Zynq 7000) freezing occasionally, to a point that JTAG can't halt the processor. The issue isn't easily repeatable and when it does happen no debug info can be extracted. The only thing that can be read is the program counter, but even that seems all over the place with different locations for different instances.
First question - what could possibly lead to a critical failure like that? My thinking was around interrupt return address becoming corrupt somehow, but it's just guesswork at the moment.
Second question - how to arrest the problem, so I can at least see the stack trace? Any register I can set a hw watchpoint on?
Any comments are appreciated.
Hi Peter S,
I wonder if a memory load request blocked in the system, or some power management might also cause the symptoms you describe.
I am not sure if that would help but looking at the Zynq 7000 TRM it seems the DAP does have access to the system interconnect.
If you are able to tell your debugger to go through the DAP port, you might be able to inspect the (uncached) memory and peripheral MMIO registers.
Thanks Vincent, I'll try that.
Steps to reset -
The Cortex-A9 processor has the following reset inputs:
nCPURESETThe nCPURESET signal is the main Cortex-A9 processor reset. It initializes the Cortex-A9 processor logic and the FPU logic including the FPU register file when the MPE or FPU option is present.
nNEONRESETThe nNEONRESET signal is the reset that controls the NEON SIMD independently of the main Cortex-A9 processor reset.
nDBGRESETThe nDBGRESET signal is the reset that initializes the debug logic. See Debug.
All of these are active-LOW signals.