Hi Paul,
Your understanding of margin read is correct.
The difference between "user" margin level and "field" margin level is just setting of internal threshold for reading.
The "field" margin level could be set only by Set Field Margin Level command for unsecured MCU in special mode. Field margin levels must only be used during verify of the initial factory programming.
However "user" margin level could be set by Set Field Margin Level and Set User Margin Level commands. Set User Margin Level command could be executed by MCU in normal mode (despite on security) and by unsecured MCU in special mode.

So, if you detect problem with "field" margin level in factory, P-Flash/EEPROM is probably wrongly programmed (In this case NVM should be reprogrammed) and if you detect problem with "user" margin level in the field, P-Flash/EEPROM is probably close to Data retention limit (In this case MCU may signalize that NVM should be reprogrammed or MCU/module replaced). In extreme case I could imagine case with two identical copies of code/data in NVM and MCU may in that case reprogram itself.
How to use "user" margin level:
We could use for example CRC checksum stored it somewhere in P-Flash or EEPROM.
We could set User Margin-1 Level, calculate CRC checksum over whole flash and compare it with stored value. After that we could set User Margin-0 Level, calculate CRC checksum over whole flash and compare it with stored value. After that we should not forget set margin level back to Normal Level. If both comparing fits, NVM looks ok. If any of comparing fails, MCU should signalize error,…
I hope it helps you.
Have a great day,
RadekS
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------