Multiple copies of firmware code for controlling operation of a
non-volatile flash memory system are stored at different suitable
locations of the flash memory of a memory system. A map of addresses of
these locations is also stored in the flash memory. Upon initialization
of the memory system, boot code stored in the memory controller is
executed by its microprocessor to reference the address map and load one
copy of the firmware from the flash memory into a controller memory, from
which it may then be executed by the microprocessor to operate the memory
system to store and retrieve user data. An error correction code (ECC) is
used to check the data but the best portions of the two or more firmware
copies stored in the flash memory are used to reduce the need to use ECC.
The firmware code may be stored in the flash memory in two-states when
user data is stored in the same memory in more than two-states.