Patent ID: 8456897

Claim:
A method of programming a non-volatile magnetic memory element comprising: applying a first level of switching current to a bottom electrode or a top electrode of a non-volatile magnetic memory element, the non-volatile magnetic memory element including a magnetic tunneling junction (MTJ) formed on top of the bottom electrode and having a fixed layer, a barrier layer and a non-uniform free layer, the non-uniform free layer having a magnetic moment that is switchable and having grains that are magnetic and of varying sizes and randomly distributed throughout the non-uniform free layer, each grain having a distinct magnetic moment, the first level of switching current corresponding to one of multiple logical states taken on by the non-volatile magnetic memory element; the non-uniform free layer receiving the switching current when it flows through the non-volatile magnetic memory element to cause switching of the magnetic moment of the non-uniform free layer, the logical state of the non-volatile magnetic memory element being defined by the magnetic moment of the non-uniform free layer; each grain of the non-uniform free layer switching substantially independently of the other grains of the non-uniform free layer, the magnetic moment of a substantial number of grains defining the magnetic moment of the non-uniform free layer; switching the magnetic moment of the non-volatile magnetic memory element; applying another level of switching current of the multiple levels of switching current, other than the first level, to the non-volatile magnetic memory element to cause switching of the non-volatile magnetic memory element to another logical states; switching the non-volatile magnetic memory element to another logic state; and repeating the applying another level and switching steps to switch the non-volatile magnetic memory element to the multiple logical states.