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.