54.5.5.1 Introduction
Programming 1 to a command bit in PUF_CR starts the corresponding operation. Each operation follows the same protocol.
When a command bit is activated and the corresponding bit in the Allow register (PUF_AR) is set to 1, the operation is started and the flags PUF_SR.BUSY=1, PUF_SR.OK=0 and PUF_AR.ALLOW_*=0.
The command bit in PUF_CR is automatically cleared when the command is accepted.
After the operation is finished, the PUF controller sets the following status:
- PUF_SR.BUSY=0, while the OK and ERROR bits show the result of the operation.
- PUF_AR.ALLOW_x bits indicate which commands are allowed next.
When the result is successful, PUF_SR.OK=1 and PUF_SR.ERROR=0 and the PUF controller moves to the next state. If the result is not successful (OK=0 and ERROR =1), the software determines what to do next.
With result codes provided via PUF_ORR.RCODE, the PUF controller shows additional information about the cause of an error. Details about PUF controller errors, result codes and error handling are described in PUF Error Handling.
The PUF_SR.REJECTED flag indicates that a past command was not accepted. It is intended as a signal to software that something went wrong and specific actions are required. The PUF controller sets REJECTED=1 in the following cases:
- More than one command bit is 1 at a time.
- A new command is issued while the current command is still running.
- An unallowed command is issued.
- A command with incorrect or unallowed parameters is issued.
The PUF_SR.REJECTED flag remains at 1 until it is cleared by writing PUF_SR.REJECTED=1. While PUF_SR.REJECTED=1, it is still possible to run commands, and when these commands are valid, the PUF controller accepts them and starts the corresponding operation.
The Zeroize command differs from the standard protocol: it can be issued at any time and will never be rejected, whether an operation (or initialization) is already running or not.