A non-volatile memory system is formed of floating gate memory cells arranged
in
blocks as the smallest unit of memory cells that are erasable together. The system
includes a number of features that may be implemented individually or in various
cooperative combinations. One feature is the storage in separate blocks of the
characteristics of a large number of blocks of cells in which user data is stored.
These characteristics for user data blocks being accessed may, during operation
of the memory system by its controller, be stored in a random access memory for
ease of access and updating. According to another feature, multiple sectors of
user data are stored at one time by alternately streaming chunks of data from the
sectors to multiple memory blocks. Bytes of data in the stream may be shifted to
avoid defective locations in the memory such as bad columns. Error correction codes
may also be generated from the streaming data with a single generation circuit
for the multiple sectors of data. The stream of data may further be transformed
in order to tend to even out the wear among the blocks of memory. Yet another feature,
for memory systems having multiple memory integrated circuit chips, provides a
single system record that includes the capacity of each of the chips and assigned
contiguous logical address ranges of user data blocks within the chips which the
memory controller accesses when addressing a block, making it easier to manufacture
a memory system with memory chips having different capacities. A typical form of
the memory system is as a card that is removably connectable with a host system
but may alternatively be implemented in a memory embedded in a host system. The
memory cells may be operated with multiple states in order to store more than one
bit of data per cell.