A semiconductor memory system can experience hard failures from permanent physical defects or soft errors from random, non-destructive events that change memory cell contents without permanent damage. Error correcting codes add redundant bits when data is stored to detect and possibly correct errors by regenerating codes when data is read out and comparing them. ECC memory can detect common internal data corruption to prevent data loss in applications where reliability is critical.