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