SWCU192 November 2021 CC1312R7 , CC1352P7 , CC2652P7 , CC2652R7
After a command is issued, the CMDSTA register is updated by the radio CPU, causing an RFCMDACK interrupt to be sent back to the system CPU. This update occurs after the command finishes for immediate and direct commands and after the command is scheduled for radio operation commands. No new command may be issued until this interrupt is received. The CMDSTA register consists of 32 bits; the 8 LSBs give the result, while the upper 24 bits may be used for specific signaling in each command. Figure 26-5 shows this format.
In the result byte, bit 7 indicates whether an error occurred or not. The result byte of 0x00, meaning pending, is produced automatically by the radio doorbell hardware when a command is issued, and the other bits in the CMDSTA register also become 0, which is the value of CMDSTA before the RF_CMD_ACK interrupt is raised.
Table 26-2 lists the values of the result byte in the CMDSTA register.
Value | Name | Description |
---|---|---|
No Error | ||
0x00 | Pending | The command has not been parsed. |
0x01 | Done | Immediate command: The command finished successfully. Radio operation command: The command was successfully submitted for execution. |
Error | ||
0x81 | IllegalPointer | The pointer signaled in CMDR is not valid. |
0x82 | UnknownCommand | The command ID number in the command structure is unknown. |
0x83 | UnknownDirCommand | The command number for a direct command is unknown, or the command is not a direct command. |
0x85 | ContextError | An immediate or direct command was issued in a context where it is not supported. |
0x86 | SchedulingError | A radio operation command was attempted to be scheduled while another operation was already running in the RF core. The new command is rejected, while the command already running is not impacted. |
0x87 | ParError | There were errors in the command parameters that are parsed on submission. For radio operation commands, errors in parameters parsed after start of the command are signaled by the command ending, and an error is indicated in the status field of that command structure. |
0x88 | QueueError | An operation on a data entry queue was attempted, but the operation was not supported by the queue in its current state. |
0x89 | QueueBusy | An operation on a data entry was attempted while that entry was busy. |
In addition to the command status register, each radio operation command contains a status field (see Table 26-9). This field may have values in the following categories.
Table 26-3 lists the status codes for common commands and when parsing any command before starting.
Number | Name | Description |
---|---|---|
Operation Not Finished | ||
0x0000 | IDLE | Operation has not started. |
0x0001 | PENDING | Waiting for start trigger. |
0x0002 | ACTIVE | Running operation. |
0x0003 | SKIPPED | Operation skipped due to condition in another command. |
Operation Finished Normally | ||
0x0400 | DONE_OK | Operation ended normally. |
0x0401 | DONE_COUNTDOWN | Counter reached zero. |
0x0402 | DONE_RXERR | Operation ended with CRC error. |
0x0403 | DONE_TIMEOUT | Operation ended with time-out. |
0x0404 | DONE_STOPPED | Operation stopped after CMD_STOP command. |
0x0405 | DONE_ABORT | Operation aborted by CMD_ABORT command. |
Operation Finished With Error | ||
0x0800 | ERROR_PAST_START | The start trigger occurred in the past. |
0x0801 | ERROR_START_TRIG | Illegal start trigger parameter. |
0x0802 | ERROR_CONDITION | Illegal condition for next operation. |
0x0803 | ERROR_PAR | Error in a command specific parameter. |
0x0804 | ERROR_POINTER | Invalid pointer to next operation. |
0x0805 | ERROR_CMDID | Next operation has a command ID that is undefined or not a radio operation command. |
0x0807 | ERROR_NO_SETUP | Operation using RX, TX or synthesizer attempted without CMD_RADIO_SETUP. |
0x0808 | ERROR_NO_FS | Operation using RX or TX attempted without the synthesizer being programmed or powered on. |
0x0809 | ERROR_SYNTH_PROG | Synthesizer programming failed. |
0x080A | ERROR_TXUNF | Modem TX underflow observed. |
0x080B | ERROR_RXOVF | Modem RX overflow observed. |
0x080C | ERROR_NO_RX | Data requested from last RX when no such data exists. |
When the system CPU prepares a command structure, the CPU should initialize the status field to IDLE. Commands may be set up in a loop. If so, the system CPU must not modify command structures until the radio CPU becomes idle (the system CPU receives a LAST_COMMAND_DONE interrupt, even if the status is finished or skipped (see Section 26.11.2).