7.6.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.

Note: After a system reset or power-up, the PUF controller is initialized; it is busy and no commands are allowed. Any command issued during initialization is rejected.

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.