Data is read from a nonvolatile memory array using one or more read
voltages that are adjusted during memory life. Programming target
voltages and read voltages may be adjusted together over memory life to
map memory states to an increasingly wide threshold window. Individual
memory states are mapped to sub-ranges that are made wider, reducing
errors.