Patent ID: 8295085

Claim:
A method of programming non-volatile storage, comprising: performing a first stage of a multi-stage programming process on a plurality of non-volatile storage elements, the multi-stage programming process programs the plurality of non-volatile storage elements to one or more final target conditions, the first stage programs at least a subset of the non-volatile storage elements to one or more first interim target conditions, the performing of the first stage includes: applying a first set of programming pulses to the non-volatile storage elements with a first increment between programming pulses, determining that at least a predetermined number of the subset of non-volatile storage elements have reached an intermediate condition for the first stage in response to a nth programming pulse of the first set of programming pulses, the intermediate condition for the first stage is different than the one or more first interim target conditions, in response to determining that at least the predetermined number of the subset of non-volatile storage elements have reached an intermediate condition, performing a sensing operation at an alternative condition for the subset of non-volatile storage elements, storing an indication based on the alternative condition if the sensing operation found greater than a particular number of non-volatile storage elements in the alternative condition, storing an indication based on the intermediate condition if the sensing operation did not find greater than the particular number of non-volatile storage elements in the alternative condition, changing the first set of programming pulses to have a second increment between programming pulses in response to determining that at least the predetermined number of the subset of non-volatile storage elements have reached the intermediate condition for the first stage, the second increment between programming pulses is smaller than the first increment between programming pulses, and terminating the first stage when a sufficient number of the non-volatile storage elements have reached the respective one or more first interim target conditions; and performing an additional stage of the multi-stage programming process including applying a second set of programming pulses to the plurality of non-volatile storage elements, the second set of programming pulses have an initial pulse with a magnitude set based on the stored indication.