apparatus for programming a non - volatile memory , the apparatus having corresponding methods and tangible computer - readable media , comprise : a command memory configured to hold a plurality of command templates , wherein each of the command templates specifies a sequence of pad signals ; a state machine configured to i ) receive descriptors , wherein each of the descriptors includes a pointer to a respective one of the command templates in the command memory , and ii ) generate the sequence of pad signals based on the command template indicated by the respective pointer ; and a non - volatile memory interface configured to provide , to pads of the non - volatile memory , the sequence of pad signals generated by the state machine .