Other Parts Discussed in Thread: NOWECC
Dear friends,
Recently we started enabling flash ECC in our app. (That was its own adventure, but never mind that here.) This mostly seems to work.
Possibly related, possibly not, I discovered that, while running our app some time after boot, ESMSR3 bit 7 gets set and the nERROR pin becomes active. However, the processor continues executing and everything is otherwise fine. The data sheet labels this ESR channel as "FMC - uncorrectable error: bus1 and bus2 interfaces (does not include address parity error and errors on accesses to EEPROM bank)".
I am quite surprised, because this is a Group3 channel. It had been my impression that any activity on a Group3 channel would immediately trigger a processor abort. The "Reset / Abort / Error Sources" table in the data sheet implies that "Bus1" uncorrectable flash errors result in "Abort (CPU), ESM => nError", but "Bus2" uncorrectable flash errors result in just "ESM => nError".
This further surprises me because while I knew there were two SRAM buses, I didn't realize there were two flash buses. What's the difference between them? If I want all uncorrectable flash ECC errors to result in a fault, what should I do? Since it's a Group3 ESM channel, there are no control registers for its behavior (originally I thought that's because they all create an immediate CPU abort, but apparently not). Meanwhile I am _not_ seeing any errors logged in the flash error registers... but of course, there's the possibility that I'm Doing It Wrong(tm).
To recap, my questions are:
- Is it true that some Group3 ESM errors are non-aborting? If so, how should I catch them?
- What is the difference between "bus1" and "bus2" of the main flash memory?
- Why would uncorrectable flash ECC errors that set an ESM channel not show up in the flash error capture registers?
More details available on request, if it helps. Thanks!
-- egnor