A fault tolerant storage controller having a processor, redundant copies
of a stored program, and a timer that automatically runs when the
processor is reset is disclosed. Selection logic selects a first copy of
the program to boot on the processor. If the timer expires before the
first copy successfully boots, the timer resets the processor and
re-enables itself to run again. This time, selection logic selects a
second copy of the stored program. In one embodiment, the program
comprises separate loader and application programs, each having a
redundant copy. The loader re-enables the timer when jumping to the first
copy of the application code. If the timer expires before the first
application copy successfully boots, the timer resets the processor and
re-enables itself to run again. This time, the loader selects a second
copy of the application program. In one embodiment, the redundant copies
are stored in separate FLASH devices; in another, in distinct regions of
the same FLASH device.