4. Sub-GHz radio (SUBGHZ)

4.1 Sub-GHz radio introduction

The sub-GHz radio is an ultra-low-power sub-GHz radio operating in the 150 - 960 MHz ISM band. LoRa ® and (G)FSK modulation in transmit and receive, and BPSK/(G)MSK in transmit only, allow an optimal trade-off between range, data rate and power consumption. This sub-GHz radio is compliant with the LoRaWAN ® specification v1.0 and radio regulations including ETSI EN 300 220, EN 300 113, EN 301 166, FCC CFR 47 part 15, 24, 90, 101 and the ARIB STD-T30, T-67, T-108.

Features related to the LoRa modulation are only available on STM32WLE5xx devices, that support LoRa.

The sub-GHz radio consists of:

4.2 Sub-GHz radio main features

The main features of the sub-GHz radio are listed below:

4.3 Sub-GHz radio functional description

4.3.1 General description

The sub-GHz radio provides an internal processing unit to handle communication with the system CPU. Communication is handled by commands sent over the SPI interface, and a set of interrupts is used to signal events. BUSY information signals operation activity and is used to indicate when the sub-GHz radio commands cannot be received.

The block diagram of the sub-GHz radio system is shown in the figure below.

Figure 5. Sub-GHz radio system block diagram

Figure 5. Sub-GHz radio system block diagram. The diagram shows the internal architecture of the sub-GHz radio. On the left, external pins are connected to internal blocks: VDDPA, VR_PA, RFO_HP, RFO_LP, RFI_P, RFI_N, PB0_VDDTCXO, OSC_IN, and OSC_OUT. These connect to a 'Sub-GHz RF frontend' block. Below the RF frontend is an 'HSE32' block. The central part is a 'Sub-GHz radio' block containing 'FSK modem', 'Radio control', 'LoRa modem (note)', and 'Data and control' blocks. The 'Radio control' block is connected to the 'Data and control' block and the 'Sub-GHz SPI' interface. The 'Data and control' block is connected to the 'BUSY', 'Interrupts', 'HSEON', 'HSEBYPWR', 'HSERDY', and 'hse32' pins. A note at the bottom states: 'Note: LoRa modem is only available on STM32WLE5xx devices.' The diagram is labeled MSV62615V1.
Figure 5. Sub-GHz radio system block diagram. The diagram shows the internal architecture of the sub-GHz radio. On the left, external pins are connected to internal blocks: VDDPA, VR_PA, RFO_HP, RFO_LP, RFI_P, RFI_N, PB0_VDDTCXO, OSC_IN, and OSC_OUT. These connect to a 'Sub-GHz RF frontend' block. Below the RF frontend is an 'HSE32' block. The central part is a 'Sub-GHz radio' block containing 'FSK modem', 'Radio control', 'LoRa modem (note)', and 'Data and control' blocks. The 'Radio control' block is connected to the 'Data and control' block and the 'Sub-GHz SPI' interface. The 'Data and control' block is connected to the 'BUSY', 'Interrupts', 'HSEON', 'HSEBYPWR', 'HSERDY', and 'hse32' pins. A note at the bottom states: 'Note: LoRa modem is only available on STM32WLE5xx devices.' The diagram is labeled MSV62615V1.

4.3.2 Sub-GHz radio signals

Table 18 gives the list of sub-GHz radio signals.

Table 18. Sub-GHz internal input/output signals

Signal nameSignal typeDescription
RFO_HPRF outputTransmit high-power PA output
RFO_LPRF outputTransmit low-power PA output
RFI_PRF inputReceiver differential P input
RFI_NRF inputReceiver differential N input
OSC_INAnalog inputHSE32 oscillator input
OSC_OUTAnalog outputHSE32 oscillator output
VDDPASupplyInput supply for PA regulator
VR_PASupplyRegulated PA supply output
PB0_VDDTCXOSupplyRegulated TCXO supply output
hse32Digital outputHSE32 clock signal to CPU
HSEONDigital inputEnable HSE32 clock for CPU usage
HSEBYPWRDigital inputEnable VDDTCXO regulator control

Table 18. Sub-GHz internal input/output signals (continued)

Signal nameSignal typeDescription
HSERDYDigital outputHSE32 clock ready indication
SUBGHZSPIDigital in/outputSub-GHz radio SPI interface
BUSYDigital outputBUSY signal
InterruptsDigital outputIRQ interrupts

4.3.3 Transmitter

The transmit chain comprises the modulated output from the modem, that directly modulates the RF-PLL. An optional pre-filtering of the bit stream can be enabled to reduce the power in the adjacent channel also dependent on the selected modulation scheme. The modulated signal from the RF-PLL directly drives the high-power PA (HP PA) or low-power PA (LP PA).

Transmitter high output power

Transmit high output power up to + 22 dBm, is supported through the RFO_HP RF pin. The HP PA can be supplied from the PA regulator (REG PA) up to 3.1 V.

For this, the REG PA must be supplied directly from \( V_{DD} \) (on VDDSMPS pin), as shown in Figure 6.

Figure 6. High output power PA

Figure 6: High output power PA circuit diagrams. Left side shows 'LDO mode' and right side shows 'SMPS mode'. Both circuits feature an LDO/SMPS block, a REG PA block, and an HP PA amplifier. In LDO mode, VLXSMPS and VFBSMPS (1.55V) are connected directly. In SMPS mode, they are connected via an external inductor. Both modes show VDDSMPS (1.8 to 3.6V) connected to VDD. VDDPA is connected to VDD with a decoupling capacitor. VR_PA (up to 3.1V) is connected to the REG PA output with an LC filter. The HP PA output goes to RFO_HP.

Note: Use of the SMPS is optional. When SMPS is not used, the BOM can be reduced by removing the coil between VLXSMPS and VFBSMPS pins.

Figure 6: High output power PA circuit diagrams. Left side shows 'LDO mode' and right side shows 'SMPS mode'. Both circuits feature an LDO/SMPS block, a REG PA block, and an HP PA amplifier. In LDO mode, VLXSMPS and VFBSMPS (1.55V) are connected directly. In SMPS mode, they are connected via an external inductor. Both modes show VDDSMPS (1.8 to 3.6V) connected to VDD. VDDPA is connected to VDD with a decoupling capacitor. VR_PA (up to 3.1V) is connected to the REG PA output with an LC filter. The HP PA output goes to RFO_HP.

Table 19 gives the maximum transmit output power versus the \( V_{DDPA} \) supply level.

Table 19. Sub-GHz radio transmit high output power

\( V_{DDPA} \) supply (V)Transmit output power (dBm)
3.3+ 22
2.7+ 20
2.4+ 19
1.8+ 16

Transmitter low output power

The transmit low output power up to + 15 dBm, is supported through the RFO_LP pin. The LP PA can be supplied from the PA regulator (REG PA) up to 1.35 V. For this, the REG PA must be supplied from the regulated \( V_{FBSMPS} \) supply at 1.55 V, as shown in the figure below.

The output power range is programmable in 32 steps of ~1 dB. The power amplifier ramping timing is also programmable. This allows adaptation to meet radio regulation requirements.

Figure 7. Low output power PA

Figure 7: Low output power PA. Two circuit diagrams showing LDO mode and SMPS mode for the LP PA supply. In LDO mode, the LP PA is connected to the REG PA output (VR_PA) which is connected to the VFB SMPS (1.55V) output. In SMPS mode, the LP PA is connected to the REG PA output (VR_PA) which is connected to the VLX SMPS (1.8 to 3.6V) output via a coil. Both modes show the LP PA connected to the RFO_LP pin.

The diagram illustrates two power supply configurations for the Low Power Power Amplifier (LP PA):

Note: Use of the SMPS is optional. When SMPS is not used, the BOM can be reduced by removing the coil between VLXSMPS and VFBSMPS pins. MSV62617V2

Figure 7: Low output power PA. Two circuit diagrams showing LDO mode and SMPS mode for the LP PA supply. In LDO mode, the LP PA is connected to the REG PA output (VR_PA) which is connected to the VFB SMPS (1.55V) output. In SMPS mode, the LP PA is connected to the REG PA output (VR_PA) which is connected to the VLX SMPS (1.8 to 3.6V) output via a coil. Both modes show the LP PA connected to the RFO_LP pin.

4.3.4 Receiver

The receive chain comprises a differential low-noise amplifier (LNA), a down-converter to low-IF by mixer operation in quadrature configuration. The I and Q signals are low pass filtered and a \( \Sigma\Delta \) ADC converts them into the digital domain. In the digital modem, the signals are decimated, further down converted and channel filtered. The demodulation is done according to the selected modulation scheme.

The down mixing to low-IF is done by mixing the receive signal with the local RF-PLL located in the negative frequency, where \( -f_{lo} = -f_{rf} + f_{if} \) . (where \( f_{lo} \) is the local RF-PLL

frequency, \( f_{rf} \) is the received signal and \( f_{if} \) is the intermediate frequency). The wanted signal is located at \( f_{rf} = f_{lo} + f_{if} \) .

The receiver features automatic I and Q calibration, that improves image rejection. The calibration is done automatically at startup before using the receiver, and can be requested by command (see Image calibration for specific frequency bands for more details).

The receiver supports LoRa and (G)FSK modulations.

4.3.5 RF-PLL

The RF-PLL is used as the frequency synthesizer for the generation of the local oscillator frequency ( \( f_{lo} \) ) for both transmit and receive chains. The RF-PLL uses auto calibration and uses the 32 MHz HSE32 reference. The sub-GHz radio covers all continuous frequencies in the range between 150 to 960 MHz.

4.3.6 Intermediate frequencies

The sub-GHz radio receiver operates mostly in low-IF configuration, except for specific high-bandwidth settings.

Table 20. FSK mode intermediate frequencies

Setting nameBandwidth (kHz)\( f_{if} \) (kHz)
RX_BW_467467.0250
RX_BW_234234.3
RX_BW_117117.3
RX_BW_5858.6
RX_BW_2929.3
RX_BW_1414.6
RX_BW_77.3
RX_BW_373373.6200
RX_BW_187187.2
RX_BW_9393.8
RX_BW_4646.9
RX_BW_2323.4
RX_BW_1111.7
RX_BW_55.8
RX_BW_312312.0167
RX_BW_156156.2
RX_BW_7878.2
RX_BW_3939.0
RX_BW_1919.5
RX_BW_99.7
RX_BW_44.8
Table 21. LoRa mode intermediate frequencies
Setting nameBandwidth [kHz]\( f_{if} \) [kHz]
LORA_BW_5005000
LORA_BW_250250250
LORA_BW_125125
LORA_BW_6262.5
LORA_BW_4141.67167
LORA_BW_3131.25250
LORA_BW_2020.83167
LORA_BW_1515.63250
LORA_BW_1010.42167
LORA_BW_77.81250

4.4 Sub-GHz radio clocks

4.4.1 Internal oscillators

The following sub-GHz radio dedicated internal RC oscillators are available:

The frequency of each sub-GHz radio internal oscillators is calibrated using the HSE32 clock at every sub-GHz radio transition from Deep-Sleep or Sleep-to-Standby, and after a sub-GHz radio reset. The calibration can also be done on demand by the command Calibrate() .

4.4.2 HSE32 reference clock

The high-precision 32 MHz frequency needed for the sub-GHz radio transmission and reception is taken from HSE32. The HSE32 clock can also be used by the MCU. The use of an external crystal (XTAL) or a temperature compensated crystal oscillator (TCXO) are supported. The used clock source is configured in the RCC (see Section 6.2.1: HSE32 clock with trimming for more details).

When using the HSE32 with a XTAL, the load capacitors are provided by the integrated capacitor banks that can be trimmed. The trimming is provided by SUBGHZ_HSEINTRIMR and SUBGHZ_HSEOUTRIMR registers. The load capacitances on OSC_IN and OSC_OUT can be trimmed separately. Software trimming must be applied after the sub-GHz radio entered Standby with HSE32 mode.

The TCXO regulator, integrated in the sub-GHz radio, can be used to supply an external temperature compensated crystal oscillator (TCXO). The regulated \( V_{DDTCXO} \) supply level is controlled through set_TcxoMode() command.

The sub-GHz radio, depending on the transmit output power (max + 22 dBm), can heat up the device. The heating depends on the used transmit output power and the device package. Careful PCB design using thermal heat dissipation techniques must be applied to avoid heat transfer to the HSE32 reference clock source. For the HSE32 frequency drift requirements related to the sub-GHz radio, see Section 4.5.1 .

4.5 Sub-GHz radio modems

The following modems are provided enabling the respective modulation and associated framing.

The modems and frame types are set by Set_PacketType() command. The current used modem and frame type can be obtained by Get_PacketType() command.

Once the modem and frame to be used are selected, modulation and packet parameters can be defined by Set_ModulationParams() and Set_PacketParams() commands.

The LoRa and (G)FSK (a) modems support both transmission and reception.

The (G)MSK and BPSK modems only supports transmission.

The framing determines how the bit stream is translated in packets and how data is stored in the data buffers. It performs operations such as whitening and CRC handling. The framing is configured using Set_PacketParams() command.

4.5.1 LoRa modem

The LoRa modem uses spread spectrum modulation and forward error correction techniques to increase the range and reliability of sub-GHz radio communication. The LoRa modem provides improved co-channel rejection.

The LoRa modulation can be optimized for a given application by Set_ModulationParams() command, allowing a trade off between link budget, interference immunity, spectral occupation and nominal data rate.

The following parameters can be optimized:

The LoRa symbol rate ( \( R_s \) ) is defined as \( R_s = BW / 2^{SF} \)

The transmitted signal is a constant envelope signal. Equivalently, one chip is sent per second per Hz of bandwidth.


a. The (G)FSK modem can be used for (G)MSK modulation in Tx and Rx when setting the frequency deviation to a quarter of the bit rate.

Spreading factor (SF)

The LoRa spread spectrum modulation is performed by representing each data bit of the packet payload by multiple chips of information. The rate at which the spread information is sent, is referred to as the symbol rate ( \( R_s \) ). The ratio between the nominal data rate and the chip rate is the spreading factor (SF). It represents the number of symbols per data bit.

The spreading factor must be known in advance on both transmit and receive side of the link.

The resulting signal to noise ratio (SNR) required at the receiver input, is influenced by the spreading factor. This allows the increase of the receiver sensitivity, and so increase the link budget and range.

A higher spreading factor provides a better receiver sensitivity, more link budget and longer range at the expense of a longer transmission time (see the table below).

Table 22. Spreading factor, chips/symbol and LoRa SNR

Spreading factor (SF)56 (1)7 (2)89101112
\( 2^{SF} \) (chips/symbol)3264128256512102420484096
LoRa demodulator SNR (dB)- 2.5- 5- 7- 9.5- 12- 14.5- 17- 19
  1. 1. The SF6 is not backward compatible with earlier LoRa devices.
  2. 2. Default value.

For SF5 and SF6, due to the higher symbol rate, the minimum preamble length needed to ensure correct detection and demodulation of the received signal is 12 symbols.

Bandwidth (BW)

An increase in signal bandwidth allows the use of a higher effective data rate and reduces the transmission time at the expense of a reduced sensitivity, less link budget and shorter range. The LoRa modem operates at a programmable bandwidth (BW) around a programmable RF frequency ( \( f_H \) ).

There are country dependent regulatory constraints on the permitted occupied bandwidth. The LoRa signal bandwidth refers to the double side bandwidth (DSB). The bandwidth selection range is given in the table below.

Table 23. LoRa bandwidth setting

LoRa BW setting0819210345 (1)6 (1)
Bandwidth (kHz)7.8110.4215.6320.8331.2541.6762.5125250500
  1. 1. Bandwidth not available below a 400 MHz RF frequency.

Forward error correction coding rate (CR)

The sub-GHz radio communication reliability can be improved by performing forward error correction. This is particularly efficient in the presence of interference. The coding rate can be changed in response to channel condition. The coding rate information is included in the packet header for use by the receiver.

A higher coding rate provides better immunity to interference at the expense of longer transmission time. In normal conditions and factor of 4 / 5 provides the best trade off. In case of strong interference, a higher coding rate may be used.

The coding rate and overhead ratio is given in the table below.

Table 24. Coding rate and overhead ratio

CR setting0 (1)12 (2)34
Coding rate (data bits/total coded bits)4/44/54/64/74/8
Overhead ratio11.251.51.752

1. No forward error correction.

2. Default value.

Low data rate optimization (LDRO)

For low data rates (typically high SF or low BW) and very long payloads (may last several seconds), the low data rate optimization (LDRO) can be enabled. This reduces the number of bits per symbol to the given SF minus 2, to allow the receiver to have a better tracking of the LoRa receive signal. Depending on the payload length, the low data rate optimization is usually recommended when the LoRa symbol time is equal or above 16.38 ms.

When using LoRa modulation, the total frequency drift over the packet time must be kept lower than Freq_drift_max:

\[ \text{Freq\_drift\_max} = \text{BW} / (3 \times 2^{\text{SF}}) \]

When possible, enabling the low data rate optimization (Set_ModulationParams() command), relaxes the total frequency drift over the packet time by 16:

\[ \text{Freq\_drift\_optimise\_max} = 16 \times \text{Freq\_drift\_max} \]

4.5.2 LoRa framing

The following types of LoRa packet formats are available:

The LoRa packet frames are illustrated in Figure 8 .

Figure 8. LoRa packet frames format

Diagram illustrating the LoRa packet frames format, showing Explicit and Implicit packet structures.

The diagram illustrates two LoRa packet frame formats: Explicit and Implicit.

Explicit packet frame:

Implicit packet frame:

MSv62618V1

Diagram illustrating the LoRa packet frames format, showing Explicit and Implicit packet structures.

The LoRa packet frames start with a preamble that is used to synchronize the receiver with the received signal. By default, the packet is configured with a 12-symbol-long preamble sequence. The preamble length is programmable by Set_PacketParams() command. This allows the transmission of near arbitrarily long preamble sequences.

The receiver undertakes a preamble detection process that periodically restarts. For this reason, the preamble length at receiving side must be configured identical to the one at transmitting side. When the preamble length is not known at receiving side or when it varies, the maximum preamble length must be programmed at receiving side.

In the explicit packet format, the preamble is followed by a header with CRC, then followed by the payload and payload CRC.

In the implicit packet format, the preamble is directly followed by the payload and payload CRC.

The payload is a variable length field that contains the user data coded at the coding rate, either as specified in the explicit header or in the sub-GHz configuration when using implicit mode, by Set_PacketParams() and Set_ModulationParams() commands.

The payload can be followed by an optional payload CRC.

Explicit header mode

The default operation mode is the explicit header mode, where the header provides information on the payload. The header is transmitted using maximum forward error correction coding rate \( 4/8 \) . It is protected by its own header CRC to allow the receiver to discard a packet up on receiving an invalid header.

Implicit header mode

In certain operation modes where the payload coding rate and CRC presence are fixed or known in advance, it can be advantageous to reduce transmission time by invoking implicit header mode. In this mode, the header is not present in the packet frame. The payload length, forward error correction coding rate and presence of the payload CRC must be configured on both sides of the sub-GHz radio link.

LoRa time-on-air

The total transmission time of packet can be calculated as follows:

\[ \text{TotalTimeOnAir} = (\text{PreambleSymbols} + \text{NbSymbolPayload} + 4.25 + 8) \times (2^{\text{SF}} / \text{BW}) \]

where PreambleSymbols is the number of preamble symbols programmed in Set_PacketParams(PbLength) .

The number of payload symbols can be calculated as follows:

\[ \text{NbSymbolPayload} = \text{CEILING}(\text{NbSymbolPayloadFrac}, 4 + \text{CR}) \]

where CEILING is the function that rounds up to the integer multiple of (4 + CR) immediately superior to the fractional first parameter.

The number of payload fractional symbols in Explicit mode can be calculated as follows:

\[ \text{NbSymbolPayloadFrac} = ((\text{PL} \times 8 + \text{CRC} \times 16 - 4 \times (\text{SF} - 7)) \times (4 + \text{CR})) / (4 \times \text{SF}) \]

The number of payload fractional symbols in Implicit mode can be calculated as follows:

\[ \text{NbSymbolPayloadFrac} = ((\text{PL} \times 8 + \text{CRC} \times 16 - 4 \times (\text{SF} - 2)) \times (4 + \text{CR})) / (4 \times \text{SF}) \]

where:

LoRa data rates “raw data rate” and “real data rate” are defined as:

\[ \text{RawBitRate} = ((\text{SF} \times \text{BW}) / 2^{\text{SF}}) \times (4 / (4 + \text{CR})) \]

\[ \text{RealBitRate} = (\text{PayloadLength} \times 8) / \text{TotalTimeOnAir} \]

Channel activity detection (CAD)

The channel activity detection is used to detect the presence of a LoRa signal, by detecting a LoRa preamble or data symbols.

Once in channel activity detection mode, the band is scanned for a determined duration as set in Set_CadParams() command. If LoRa symbols are detected during this period, the channel activity detected IRQ is set.

The time needed to perform the channel activity detection depend on the LoRa modulation settings. For a given SF / BW, the typical CAD detection time can be selected to be 1, 2, 4, 8, or 16 symbols. The CAD duration time is further more extended with half a symbol.

4.5.3 FSK modem

The FSK modem provides a 2-FSK modulation over a range of data rates from 0.6 Kbit/s up to 300 Kbit/s. In receive mode, the bandwidth is automatically adjusted to match the selected data rate. In transmit mode, the frequency deviation is selected via the modulation

index. An optional Gaussian filter can be used. All modulation parameters are set using Set_ModulationParams() command.

The bit rate (or equivalent chip) is referenced to the HSE32 frequency and controlled by the BR parameter, defined as follows:

\[ BR = 32 \times HSE32_{FREQ} / \text{BitRate where } HSE32_{FREQ} = 32 \text{ MHz} \]

FSK modulation is performed inside the RF-PLL bandwidth, by changing the fractional divider. The high resolution of the RF-PLL allows very narrow frequency deviation. The frequency deviation parameter \( F_{dev} \) , is one of the parameters in Set_ModulationParams() . \( F_{dev} \) is defined as follows:

\[ F_{dev} = F_{dev}[Hz] / \text{FreqStep where } \text{FreqStep} = HSE32_{FREQ} / 2^{25} \]

To ensure correct modulation, the following limit applies: \( (F_{dev} + BR/2) < BW \) .

The bandwidth must be chosen so that:

\[ BW[DSB] \geq BR + 2 \times \text{frequency deviation} + \text{frequency error} \]

where \( \text{frequency error} = 2 \times HSE32_{FREQ} \text{ error} \)

The FSK modem offers several pulse shape options in the PulseShape parameter.

4.5.4 MSK modem

The MSK modem provides a 2-MSK modulation over a range of data rates from 0.1 Kbit/s up to 10 Kbit/s. This MSK modulation is only available in transmit mode. The modulation index is automatically adjusted to 0.5. An optional Gaussian filter can be used. All modulation parameters are set using Set_ModulationParams() command.

The bit rate (or equivalent chip) is referenced to the HSE32 frequency and controlled by the BR parameter, defined as follows:

\[ BR = HSE32_{FREQ} / \text{BitRate where } HSE32_{FREQ} = 32 \text{ MHz} \]

4.5.5 Generic framing

The generic packet framing is used with the FSK and MSK modems.

The generic packet provides a conventional packet format for applications in proprietary NRZ coded, long range, low-energy communication links. The generic packet framing can be configured by Set_PacketParams() command and allows whitening based on pseudo random number generation, CRC operations and packet acknowledgment.

The following types of generic packet formats are available:

In both packet formats, the payload length is limited to 254 when the address filtering is activated.

The generic packet frames are illustrated in Figure 9 .

Figure 9. Generic packet frames format

Diagram showing two generic packet frame formats: Variable length and Fixed length. The variable length frame includes Preamble, Syncword (0-8 bytes), Length, Address (0-1 byte), Payload (0-255 bytes), and CRC (0-2 bytes). The fixed length frame includes Preamble (8-65535 bits), Syncword (0-8 bytes), Address (0-1 byte), Payload (0-255 bytes), and CRC (0-2 bytes). Both frames show CRC check and Whitening fields.

Variable length generic packet frame

PreambleSyncwordLengthAddress
0 to 1 byte
PayloadCRC
0 to 8 bytes0 to 255 bytes0 to 2 bytes
CRC check
Whitening

Fixed length generic packet frame

PreambleSyncwordAddress
0 to 1 byte
PayloadCRC
8 to 65535 bits0 to 8 bytes0 to 255 bytes0 to 2 bytes
CRC check
Whitening

MSv62620V4

Diagram showing two generic packet frame formats: Variable length and Fixed length. The variable length frame includes Preamble, Syncword (0-8 bytes), Length, Address (0-1 byte), Payload (0-255 bytes), and CRC (0-2 bytes). The fixed length frame includes Preamble (8-65535 bits), Syncword (0-8 bytes), Address (0-1 byte), Payload (0-255 bytes), and CRC (0-2 bytes). Both frames show CRC check and Whitening fields.
  1. 1. The payload length can be extended beyond 255 bytes. Refer to Section 4.6: Sub-GHz radio data buffer for more details.

The generic packet frames start with a preamble that is used to synchronize the receiver with the received signal. The preamble length is programmable by Set_PacketParams() command.

The receiver undertakes a preamble detection process that periodically restarts. For this reason, the preamble length at the receiving side must be configured identical to the one of the transmitting side. When the preamble length is not known at receiving side or when it can vary, the maximum preamble length must be programmed at receiving side.

The preamble is followed by a syncword field with programmable length in Set_PacketParams() command.

The address is optional and can be used for a unicast when several devices share the same syncword.

In the variable length generic packet format, the syncword is followed by the length of the payload (If the Address field is present then Length must include this additional byte), followed by the payload and payload CRC.

In the fixed length generic packet format, the syncword is directly followed by the payload and payload CRC.

The payload is a variable length field that contains the user data either as specified in the variable length generic packet or in the sub-GHz radio configuration when using fixed length generic packet by Set_PacketParams() .

The payload can be followed by an optional payload CRC with programmable length in Set_PacketParams() command.

Endianness of the frame is MSB first.

Variable length generic packet mode

When the packet is of uncertain or variable length, the information on the payload length must be transmitted within the packet. For this, a header with the payload length information is transmitted after the syncword.

Fixed length generic packet mode

In certain operation modes where the payload length is fixed or known in advance, it may be advantageous to reduce transmission time by invoking fixed length generic packet mode. In this mode, the header is not present in the packet frame and the payload length must be configured on both sides of the sub-GHz radio link.

Node or broadcast address

The node or broadcast address are not considered part of the payload. They are added automatically when enabled by Set_PacketParams() command. Adding these fields allows the user to perform additional packet filtering at the header level.

Whitening

Whitening is based on a 9-bit LFSR and used to whiten the payload and, when present, the header and CRC. Whitening limits a sequence of consecutive 1 or 0 bit to nine. The whitening polynomial is \( x^9 + x^5 + 1 \) , and can be initialized with the whitening initial value in WHITEINI[8:0] .

CRC

CRC computation can be configured for polynomial and initial value, and allows inversion. Configuration is done through Set_PacketParams() command.

The flexible CRC configuration allows any standard CRC or proprietary CRC to be generated and checked, for example:

4.5.6 BPSK modem

The BPSK modem provides a BPSK modulation for data rates of 100 and 600 bit/s. BPSK modulation is only available in transmit mode. The modulation offers a raise-cosine pulse shape filter with a BT of 0.5. The BPSK modulator can be changed into DBPSK modulation by some host pre-processing on the data to be transmitted.

All modulation parameters are set by Set_ModulationParams() command.

The bit rate (or equivalent chip) is controlled by Br parameter, defined as follows:

\[ Br = HSE32_{FREQ} / BitRate \text{ where } HSE32_{FREQ} = 32 \text{ MHz.} \]

4.5.7 BPSK framing

The BPSK packet framing is used with the BPSK modem. The BPSK packet framing can be configured by Set_PacketParams() command and allows the total frame length definition. The full packet (preamble, synch word, device id to CRC) must be provided in the transmit data buffer.

4.6 Sub-GHz radio data buffer

The sub-GHz radio uses a 256-byte RAM data buffer that is accessible by the CPU through the SUBGHZSPI interface in all sub-GHz radio operating modes except Sleep and Deep-Sleep. The RAM data buffer is cleared in Deep-Sleep mode, optionally retained in Sleep mode and always retained in all other modes. In Sleep and Deep-Sleep modes, the TxBaseAddr and RxBaseAddr values are lost. In order to retrieve data after Sleep mode retention, the default values must be used ( TxBaseAddr = 0x80 and RxBaseAddr = 0x00 ), or RxPayloadLength and RxBufferPointer must be stored in the CPU memory.

On die revision Y and later, the PayloadLength can be updated during transmission. This capability allows the support of long packets.

On previous die revisions, the PayloadLength is fixed (latched in the radio) after a SetTx() command.

The RAM data buffers are fully configurable. They allow access to the transmit data buffer and the last receive data buffer. The RAM data buffer organization is depicted in the figure below.

Figure 10. Sub-GHz RAM data buffer operation

Diagram of Sub-GHz RAM data buffer operation showing CPU and radio side interactions.
  graph TD
    subgraph CPU_Side [CPU side]
      direction TB
      A1[TxBaseAddr + RTxPayloadLength] --> B1
      B2[Write_Buffer] -- arrow --> B1
      C1[TxBaseAddr] --> B1
      D1[Read_Buffer] -- arrow --> E1
      F1[RxBaseAddr] --> E1
    end

    subgraph RAM_Buffer [RAM data buffer]
      direction TB
      Top[address 0xFF] --- G[RAM data buffer]
      G --- H[Transmit data buffer]
      H --- I[Receive data buffer]
      I --- J[Last received payload]
      J --- Bottom[address 0x00]
    end

    subgraph Radio_Side [Sub-GHz radio side]
      direction TB
      K1[TxBufferPointer] --> H
      L1[RxBufferPointer + RTxPayloadLength] --> I
      M1[RxBufferPointer] --> J
    end
  

The diagram illustrates the organization of the RAM data buffer (0x00 to 0xFF). On the CPU side, Write_Buffer() interacts with the Transmit data buffer (bounded by TxBaseAddr ), and Read_Buffer() interacts with the Last received payload (starting at RxBaseAddr ). On the Radio side, TxBufferPointer points into the Transmit buffer, while RxBufferPointer and RxBufferPointer + RTxPayloadLength define the boundaries of the received data.

Diagram of Sub-GHz RAM data buffer operation showing CPU and radio side interactions.

The RAM data buffer is accessed by Write_Buffer() and Read_Buffer() commands. The offset parameter defines the address in the SRAM data buffer. To read the first byte

from the receive data buffer, the offset must be set to the RxBufferPointer value. To write to the first byte in the transmit data buffer, the offset must be set to the TxBaseAddr value.

The RAM data buffer has a circular nature: any address increment exceeding 0xFF wraps around to address 0x00.

4.6.1 Receive data buffer operation

In receive mode, RxBaseAddr, configured through Set_BufferBaseAddress() , determines the receive buffer offset in the sub-GHz radio RAM. RxBaseAddr can be set anywhere within the RAM data buffer. If needed, the whole 256-byte RAM data buffer can be used.

For the first received packet, RxBufferPointer is set to RxBaseAddr. The first byte of the first received packet payload data is written at the RxBufferPointer address. The last byte of the received packet payload data is written at the address determined by RxBufferPointer + RxPayloadLength. RxBufferPointer and RxPayloadLength can be read by Get_RxBufferStatus() command.

In single receive and listening modes, RxBufferPointer is automatically initialized to RxBaseAddr for each new reception when the sub-GHz radio enters RX mode.

In continuous receive mode, RxBufferPointer is continuously incremented from the position at which it was left by the previous received packet. In this mode, subsequent received packets are stored continuous in the RAM data buffer.

Caution: If the amount of received data exceeds the defined receive buffer size, other data in the RAM are overwritten.

Receive data are written to the receive data buffer regardless of the received CRC status. When the received CRC fails, post processing on the incorrectly received data can still be performed by the CPU.

Caution: When the received packet length exceeds the area allocated to the receive data buffer, it may overwrite the transmit data buffer area in the RAM data buffer.

4.6.2 Transmit data buffer operation

In transmit mode, TxBaseAddr determines the transmit buffer offset in the sub-GHz radio RAM. For each transmission, when the sub-GHz radio enters TX mode, TxBufferPointer is automatically initialized to TxBaseAddr. Each time a payload byte is transmitted, TxBufferPointer is incremented until all bytes, according to the PayloadLength set by the Set_PacketParams() command, are transmitted.

4.7 Sub-GHz radio operating modes

After a sub-GHz radio reset, a startup phase is initiated. As BUSY is active during this phase, commands cannot be accepted. When supply and clock are available to the sub-GHz radio, BUSY is deactivated and the CPU can take control.

The sub-GHz radio provides the following operating modes:

The sub-GHz radio operating modes are shown in the figure below.

Figure 11. Sub-GHz radio operating modes

Flowchart of Sub-GHz radio operating modes showing transitions between Startup, Sleep, Calibration, Standby, and Active (FS, TX, RX) states with various control functions.
    graph TD
      POR[POR and reset] --> Startup((Startup))
      Startup --> Sleep((Sleep))
      Sleep -- "Set_Sleep()" --> Sleep
      Sleep -- "NSS or RF-RTC (cold)" --> Calibration((Calibration))
      Calibration -- "Calibration done" --> Standby((Standby))
      Standby -- "NSS or RF-RTC (warm)" --> Sleep
      Standby -- "TxTimeout, TxDone" --> Standby
      Standby -- "RxTimeout, RxDone, Set_Standby()" --> Standby
      Standby -- "Set_Standby()" --> Standby
      Standby -- "Set_Fs()" --> FS((FS))
      Standby -- "Set_Tx()" --> TX((TX))
      Standby -- "Set_Rx()" --> RX((RX))
      
      subgraph Active
        FS
        TX
        RX
      end
      
      FS -- "Set_Fs()" --> FS
      FS -- "Set_Tx()" --> TX
      FS -- "Set_Rx()" --> RX
      
      TX -- "Set_Tx()" --> TX
      TX -- "Set_Rx()" --> RX
      TX -- "Set_Fs()" --> FS
      
      RX -- "Set_Rx()" --> RX
      RX -- "Set_Tx()" --> TX
      RX -- "Set_Fs()" --> FS
  

The diagram illustrates the operating modes of the sub-GHz radio. It starts with 'POR and reset' leading to 'Startup', which then transitions to 'Sleep'. From 'Sleep', the radio can return to 'Sleep' via 'Set_Sleep()' or move to 'Calibration' if 'NSS or RF-RTC (cold)' is triggered. 'Calibration' leads to 'Standby' upon completion. From 'Standby', the radio can return to 'Sleep' via 'NSS or RF-RTC (warm)', stay in 'Standby' due to 'TxTimeout, TxDone' or 'RxTimeout, RxDone, Set_Standby()', or enter 'Active' mode via 'Set_Standby()'. 'Active' mode includes 'FS' (Frequency Synthesis), 'TX' (Transmit), and 'RX' (Receive) states. Transitions between these active states are controlled by 'Set_Fs()', 'Set_Tx()', and 'Set_Rx()' functions. The diagram is labeled 'MSV62622V2' in the bottom right corner.

Flowchart of Sub-GHz radio operating modes showing transitions between Startup, Sleep, Calibration, Standby, and Active (FS, TX, RX) states with various control functions.

4.7.1 Startup mode

At POR or after a sub-GHz radio reset, the Startup mode is entered. BUSY is set. When internal supply and clocks become available, the sub-GHz radio enters Sleep mode.

4.7.2 Sleep mode

In Sleep mode, only the sub-GHz radio startup and Sleep control is operational and the configuration is lost. BUSY is set. Optionally, configuration registers and memories may be kept in retention. The RC 64 kHz and sub-GHz RTC may be kept running.

The Sleep mode provides the following sub-mode and options:

Following a POR sub-GHz radio reset, the Deep-Sleep mode is entered from Startup mode. Sleep mode can be entered from Standby mode by Set_Sleep() command.

Caution: After Set_Sleep() command, the sub-GHz radio cannot receive any SPI commands. The user must guarantee that the sub-GHz radio SPI NSS is not set low during 500 µs.

Exit Sleep mode can be done:

When the sub-GHz radio configuration registers are retained, a warm start is performed when exiting Sleep mode. During a warm start, the configuration registers are restored with their retained value and the Calibration state is skipped.

4.7.3 Calibration mode

On a cold start, when transitioning from Deep-Sleep or Sleep mode to Standby mode, the intermediate Calibration mode is entered. In Calibration mode, BUSY is set to indicate that the sub-GHz radio is busy and cannot accept any SPI command.

The calibration phase consists of the following operations:

The total calibration time is 1.6 ms. All calibration results are stored in data RAM.

When the data RAM is retained in Sleep mode, the sub-GHz radio retrieves the calibration data and then transitions to Standby mode without repeating the calibration phase.

Once the calibration is finished, BUSY is deactivated and the sub-GHz radio enters Standby with RC 13 MHz mode.

When in Standby mode, the calibration of different blocks can be requested by Calibrate() command.

Image calibration for specific frequency bands

The image calibration is performed as part of the calibration process, by default in the band 902 - 928 MHz. The image calibration can furthermore be requested in any band by CalibrateImage() command.

Image calibration must be redone when the RF frequency is changed significantly and when the temperature changes more than 20 °C.

4.7.4 Standby mode

The Standby mode is entered from the Calibration mode and can furthermore be entered by Set_Standby() command.

In Standby mode, BUSY is cleared. The software must configure the sub-GHz radio for FS, TX, RX or Sleep mode. By default, in Standby mode, the sub-GHz radio is clocked by the sub-GHz RC 13 MHz. For time critical applications, HSE32 can be turned on. The use of RC 13 MHz or HSE32 is selected by Set_Standby() command.

If the SMPS is used during the sub-GHz transmission or reception, SMPS must be enabled in the Standby with RC 13 MHz mode. The SMPS is selected by Set_RegulatorMode() command. When selected, the SMPS is enabled automatically when entering the Standby with HSE32 mode. If the SMPS has been enabled by the CPU with PWR_CR5.SMPSSEN , the SMPS remains enabled in all sub-GHz radio operating modes including transmission and reception.

4.7.5 Frequency synthesis mode (FS)

When entering FS mode, BUSY is set. In FS mode, the RF-PLL is activated. Once RF-PLL is locked, BUSY goes low. The sub-GHz radio may be requested to enter this mode by Set_Fs() .

Due to the low-IF architecture, the transmit and receive RF-PLL frequencies are different. The receive RF-PLL frequency is equal to the transmit frequency minus the intermediate frequency offset.

4.7.6 Transmit mode (TX)

The TX mode can be requested to be entered from Standby mode. In this case, the sub-GHz radio enters first FS mode to lock the RF-PLL, and subsequently TX mode.

In TX mode after ramping-up the power amplifier (PA), data from the data buffer is transmitted. The sub-GHz radio operates in one of the following transmit modes:

The sub-GHz radio returns automatically to Standby mode after the last data bit of the packet is transmitted or after the timeout expires.

TX mode entry is requested by Set_Tx() command.

When entering TX mode, BUSY is set. In TX mode, BUSY is cleared when the PA ramped up and preamble transmission starts.

PA ramping

The PA ramping time can be selected while setting the output power, by Set_TxParams() .

4.7.7 Receive mode (RX)

The RX mode can be requested to be entered from Standby mode. In this case, the sub-GHz radio enters first FS mode to lock the RF-PLL, and subsequently RX mode.

In RX mode, LNA, RF-PLL and selected modem are enabled. The receive mode provides the following operating modes:

RX mode entry is requested by Set_Rx() command.

When entering RX mode, BUSY is set. In RX mode, BUSY is cleared when the receiver is ready to receive data.

The receiver provides a power-saving mode at the expense of reduced sensitivity. The receiver power-saving mode is controlled by the SUBGHZ_RXGAINR register.

4.7.8 Active mode switching time

At each transaction with the sub-GHz radio (register read/write operation or mode switching), BUSY is set during the transaction and while the sub-GHz radio is processing the command. BUSY is cleared once the command processing is finished or reached a stable operating mode, and the sub-GHz radio is ready to receive a new command.

All write commands activate BUSY. For read commands, BUSY remains low.

Switching time ( \( t_{SWMODE} \) ) is defined as the time to process the command or reach a stable operating mode, starting from the sub-GHz radio SPI NSS rising edge, ending the SPI command transaction, until BUSY goes inactive. There is a small delay ( \( t_{SW} \) ) between the sub-GHz radio SPI NSS rising edge, ending the SPI command transaction, and when BUSY is set. The maximum time for \( t_{SW} \) is 600 ns.

BUSY timing is shown in the figure below.

Figure 12. Sub-GHz radio BUSY timing

Timing diagram for Sub-GHz radio BUSY timing. It shows three signals: BUSY, NSS, and SPI. The SPI signal shows a 'Write command' consisting of an 'Opcode' followed by parameters 'Param 1' through 'Param n'. The BUSY signal is high during the write command and goes low after the command is received. The NSS signal is low during the write command and goes high after the command is received. The time interval between the start of the write command and the falling edge of the BUSY signal is labeled tsw. The time interval between the falling edge of the BUSY signal and the rising edge of the NSS signal is labeled tswMODE. The diagram is labeled MSV64330V1.
Timing diagram for Sub-GHz radio BUSY timing. It shows three signals: BUSY, NSS, and SPI. The SPI signal shows a 'Write command' consisting of an 'Opcode' followed by parameters 'Param 1' through 'Param n'. The BUSY signal is high during the write command and goes low after the command is received. The NSS signal is low during the write command and goes high after the command is received. The time interval between the start of the write command and the falling edge of the BUSY signal is labeled tsw. The time interval between the falling edge of the BUSY signal and the rising edge of the NSS signal is labeled tswMODE. The diagram is labeled MSV64330V1.

For the different mode transitions, typical busy timing values are given in the table below.

Table 25. Operation mode transition BUSY switching time

Mode transitionSPI command (sub-GHz radio event)t swMODE typical (μs)
Sleep-to-Standby (no data retention)SPI NSS low 20 μs3500
Sleep-to-Standby (with data retention)SPI NSS low 20 μs (RTC end-of-count)340
Standby-to-Standby with HSE32Set_Standby()31
Standby (HSE32 off)-to-FS (1)Set_Fs()50
Standby (HSE32 off)-to-TX (2)all Set_Tx()126
Standby (HSE32 off)-to-RX (3)Set_Rx(), Set_Cad()83
Standby (HSE32 on)-to-FS (1)Set_Fs()40
Standby (HSE32 on)-to-TX (2)all Set_Tx()105
Standby (HSE32 on)-to-RX (3)Set_Rx(), Set_Cad()62
FS-to-TX (2)all Set_Tx()76
FS-to-RX (3)Set_Rx(), Set_Cad()41
  1. 1. When entering FS mode, BUSY is cleared to 0 when RF-PLL is locked.
  2. 2. When entering TX mode, BUSY is cleared to 0 when the PA ramps up and the transmission of preamble starts.
  3. 3. When entering RX mode, BUSY is cleared to 0 when the receiver is ready to receive data.

4.8 Sub-GHz radio SPI interface

The sub-GHz radio SPI slave interface gives access to the sub-GHz radio configuration, registers and buffer memory, through SPI commands. It is connected to the SUBGHZSPI master interface peripheral on the CPU bus matrix.

For a write access, an opcode byte is sent followed by sending the command parameter bytes.

For a read access, an opcode byte is sent followed by receiving data bytes.

For each access, the sub-GHz radio SPI NSS goes low at the start of the transfer and is set high at the end, after all bytes have been transferred.

The following transaction types are supported:

BUSY is used to indicate the status of the sub-GHz radio and its ability (or not) to receive a SPI transaction. Prior to issuing a new SPI transaction, the CPU must check the BUSY status to make sure a new transaction can be received by the sub-GHz radio.

4.8.1 Sub-GHz radio command structure

The SPI command structure consists of an opcode and parameters when writing data to the sub-GHz radio, and consists of a status when reading data.

In case of a write command that does not require any parameters, the CPU sent only an opcode over the sub-GHz radio SPI interface.

In case of a write command that requires parameters, the opcode is followed immediately by the parameter bytes. All parameters must be sent before the sub-GHz radio SPI NSS rising edge, that terminates the command.

In case of a read command, the opcode is followed immediately by the status bytes. All status must be received before the sub-GHz radio SPI NSS rising edge, that terminates the command.

Command structure values are given in the table below.

Table 26. Command structure

Command typeByte 0Byte 1:n
Write command without parameterOpcodeNot applicable
Write command with parametersOpcodeParameters
Read commandOpcodedata

4.8.2 Register and buffer access commands

Write_Register() command

Write_Register(Addr, Data0, Data1, to Datan) allows a block of bytes to be written in a contiguous memory area, starting from the specified address. The address is auto incremented after each byte.

0123...n+3
OpcodeAddr[15:0]Data0[7:0]...Datan[7:0]
wwwww

byte 0 bits 7:0 Opcode: 0x0D

bytes 2:1 bits 15:0 Addr[15:0]: first write address

byte 3 bits 7:0 Data0[7:0] : data to write to first address

...     ..

byte n+3 bits 7:0 Datan[7:0] : data to write to address + n (n = number of bytes to write)

Read_Register() command

Read_Register(Addr, Status, Data0, Data1, to Datan) allows a block of bytes to be read in a contiguous memory area starting from the specified address. The address is auto incremented after each byte.

01234...n+4
OpcodeAddr[15:0]Status[7:0]Data0[7:0]...Datan[7:0]
wwwrrrr

byte 0 bits 7:0 Opcode : 0x1D

bytes 2:1 bits 15:0 Addr[15:0] : first read address

byte 3 bits 7:0 Status[7:0] : see Get_Status() command

byte 4 bits 7:0 Data0[7:0] : data read from first address

...     ..

byte n+4 bits 7:0 Datan[7:0] : data read from address + n (n = number of bytes to read)

Write_Buffer() command

Write_Buffer(Offset, Data0, Data1, to Datan) allows transmit packet payload data to be written to a contiguous data memory area, starting from the specified offset. The offset is auto incremented after each byte. When the offset exceeds the value 255, it is wrapped around to 0 (providing a 256-byte circular buffer).

012...n+2
OpcodeOffset[7:0]Data0[7:0]...Datan[7:0]
wwwww

byte 0 bits 7:0 Opcode : 0x0E

byte 1 bits 7:0 Offset[7:0] : first write address offset

byte 2 bits 7:0 Data0[7:0] : data to write to offset address

...     ..

byte n+2 bits 7:0 Datan[7:0] : data to write to offset address + n (n = number of bytes to write)

Read_Buffer() command

Read_Buffer(Offset, Status, Data0, Data1, to Datan) allows receive packet payload data to be read from a contiguous data memory area, starting from the specified

offset. The offset is auto incremented after each byte. When the offset exceeds the value 255, it is wrapped around to 0 (providing a 256 byte circular buffer).

0123...n+3
OpcodeOffset[7:0]Status[7:0]Data0[7:0]...Datan[7:0]
wwrrrr

byte 0 bits 7:0 Opcode: 0x1E

byte 1 bits 7:0 Offset[7:0]: first read address offset

byte 2 bits 7:0 Status[7:0]: see Get_Status() command

byte 3 bits 7:0 Data0[7:0]: data read from offset address

...

byte n+3 bits 7:0 Datan[7:0]: data read from offset address + n (n = number of bytes to read)

4.8.3 Operating mode commands

Set_Sleep() command

Set_Sleep(SleepCfg) is used to set the sub-GHz radio in Sleep mode. This command is only accepted in Standby mode. The SleepCfg parameter allows some optional functions to be maintained in Sleep mode.

01
OpcodeSleepCfg
ww

byte 0 bits 7:0 Opcode: 0x84

byte 1 bits 7:3 Reserved, must be kept at reset value.

bit 2 SleepCfg_Start: Sub-GHz radio startup selection

0: cold startup when exiting Sleep mode, configuration registers reset

1: warm startup when exiting Sleep mode, configuration registers kept in retention

Note: Only the configuration of the activated modem, before going to Sleep mode, is retained. The configuration of the other modes is lost and must be re-configured when exiting Sleep mode.

bit 1 Reserved, must be kept at reset value.

bit 0 SleepCfg_RTCEn: Sub-GHz radio RTC wake-up enable

0: Sub-GHz radio RTC wake-up disabled

1: Sub-GHz radio RTC wake-up enabled

Set_Standby() command

Set_Standby(StandbyCfg) is used to set the sub-GHz radio in Standby mode. The StandbyCfg parameter allows some optional functions to be selected in Standby mode.

01
OpcodeStandbyCfg
ww

byte 0 bits 7:0 Opcode: 0x80

byte 1 bits 7:1 Reserved, must be kept at reset value.

bit 0 StandbyCfg_StandbyClk: set clock in Standby mode

0: RC 13 MHz used in Standby mode

1: HSE32 used in Standby mode (Standby with HSE32)

Set_Fs() command

Set_Fs() is used to set the sub-GHz radio in FS mode. This command allows the RF-PLL test.

0
Opcode
w

byte 0 bits 7:0 Opcode: 0xC1

The RF-PLL frequency must be set by Set_RfFrequency() command prior sending Set_Fs() .

Set_Tx() command

Set_Tx(Timeout) is used to set the sub-GHz radio in TX mode.

0123
OpcodeTimeout[23:0]
wwww

byte 0 bits 7:0 Opcode: 0x83

bytes 3:1 bits 23:0 Timeout[23:0]: Transmit packet timeout

0x000000: Timeout disabled

0x000001 - 0xFFFFFF: Timeout enabled, resolution 15.625 µs

Time-out duration is computed as follows:

Time-out duration = Timeout x 15.625 µs (maximum time-out duration = 262.14 s)

When Set_Tx(Timeout) is sent in Standby or Receive mode, the sub-GHz radio passes through the FS mode (no need to send Set_Fs() ). In this case, the RF-PLL frequency must be set by Set_RfFrequency() prior sending Set_Tx(Timeout) .

Set_Rx() command

Set_Rx(Timeout) is used to set the sub-GHz radio in Receive mode.

0123
OpcodeTimeout[23:0]
wwww

byte 0 bits 7:0 Opcode: 0x82

bytes 3:1 bits 23:0 Timeout[23:0]: Transmit packet timeout

0x000000: timeout disabled

0x000001 - 0xFFFFFE: timeout enabled, single packet receive mode, resolution 15.625 µs

0xFFFFFFFF: timeout disabled, continuous receive mode

Time-out duration is computed by the following formula:

\[ \text{Time-out duration} = \text{Timeout} \times 15.625 \text{ µs (maximum Time-out duration} = 262.14 \text{ s)} \]

When Set_Rx(Timeout) is sent in Standby mode or Transmit mode, the sub-GHz radio passes through the FS mode (no need to send Set_Fs() ). In this case, the RF-PLL frequency must be set by Set_RfFrequency() prior sending Set_Rx(Timeout) .

Set_StopRxTimerOnPreamble() command

Set_StopRxTimerOnPreamble(RxTimeoutStop) allows the selection of the receiver event on which the receiver timeout timer (in Set_Rx() ), is stopped.

01
OpcodeRxTimeoutStop
ww

byte 0 bits 7:0 Opcode: 0x9F

byte 1 bits 7:1 Reserved, must be kept at reset value.

bit 0 RxTimeoutStop: receiver timeout timer stop event selection

0: receive timeout stopped on synchronization word detection in generic packet mode or header detection in LoRa packet mode

1: receive timeout stopped on preamble detection

Caution: When the receiver timeout is selected to be stopped on preamble detection, the sub-GHz radio remains in Receive mode until a packet is received. A false preamble detection may cause the sub-GHz radio to remain in Receive mode for an unexpected long period, until stopped by a mode configuration command.

Set_RxDutyCycle() command

Set_RxDutyCycle(RxPeriod, SleepPeriod) is used to set the sub-GHz radio receiver in listening mode, regularly looking for new packets. This command must be sent in Standby mode. This command is only functional with FSK and LoRa packet type.

The following steps are performed:

  1. 1. Save sub-GHz radio configuration.
  2. 2. Enter Receive mode and listen for a preamble for the specified RxPeriod period.
  3. 3. Upon the detection of a preamble, the RxPeriod timeout is stopped and restarted with the value \( 2 \times \text{RxPeriod} + \text{SleepPeriod} \) . During this new period, the sub-GHz radio looks for the detection of a synchronization word when in (G)FSK modulation mode, or a header when in LoRa modulation mode.
  4. 4. If no packet is received during the listen period defined by \( 2 \times \text{RxPeriod} + \text{SleepPeriod} \) , the Sleep mode is entered for a duration of SleepPeriod. At the end of the receive period, the sub-GHz radio takes some time to save the context before starting the sleep period.
  5. 5. After the sleep period, a new listening period is automatically started. The sub-GHz radio restores the sub-GHz radio configuration and continuous with step 2.

The listening mode is terminated in one of the following cases:

0123456
OpcodeRxPeriod[23:0]SleepPeriod[23:0]
wwwwwww

byte 0 bits 7:0 Opcode: 0x94

bytes 3:1 bits 23:0 RxPeriod[23:0]: Receive duration

0x000000: Receiver duration disabled, receiver remaining active until a packet is detected

0x000001 - 0xFFFFF: Receive duration, resolution 15.625 \( \mu \) s

bytes 6:4 bits 23:0 SleepPeriod[23:0]: Sleep duration, resolution 15.625 \( \mu \) s

Receive period duration is computed as follows:

\( \text{Receive period duration} = \text{RxPeriod} \times 15.625 \mu\text{s} \) (max receiver duration = 262.14 s)

Sleep period duration is computed by the following formula:

\( \text{Sleep period duration} = \text{SleepPeriod} \times 15.625 \mu\text{s} \) (max sleep duration = 262.14 s)

For correct operation, the following must be respected:

Figure 13. Receiver listening mode timing

Timing diagram for receiver listening mode. The diagram shows the Sub-GHz radio mode over time. It starts with 'Sleep', followed by 'Standby and SF'. Then, 'RX' mode begins, which includes 'Preamble detection'. The 'RX' mode duration is divided into two parts: 'RxPeriod' and '2 x RxPeriod + SleepPeriod'. After the 'RX' mode, the radio enters 'Save context' and then 'Sleep' again. The diagram is labeled MSV62623V1.

The diagram illustrates the timing sequence for the receiver listening mode. The horizontal axis represents time, and the vertical axis represents the Sub-GHz radio mode. The sequence starts with 'Sleep', followed by 'Standby and SF'. When 'RX' mode is entered, a 'Preamble detection' occurs. The 'RX' mode duration is defined by 'RxPeriod' and '2 x RxPeriod + SleepPeriod'. After the 'RX' mode, the radio enters 'Save context' and then 'Sleep' again.

Timing diagram for receiver listening mode. The diagram shows the Sub-GHz radio mode over time. It starts with 'Sleep', followed by 'Standby and SF'. Then, 'RX' mode begins, which includes 'Preamble detection'. The 'RX' mode duration is divided into two parts: 'RxPeriod' and '2 x RxPeriod + SleepPeriod'. After the 'RX' mode, the radio enters 'Save context' and then 'Sleep' again. The diagram is labeled MSV62623V1.

Set_Cad() command

Set_Cad() is used to detect the channel activity and can only be used with LoRa packet types. The channel activity detection (CAD) is a specific LoRa operation mode, where the sub-GHz radio searches for a LoRa radio signal. After the search is completed, the Standby mode is automatically entered, CAD is done and IRQ is generated. When a LoRa radio signal is detected, the CAD detected IRQ is also generated.

0
Opcode
w

byte 0 bits 7:0 Opcode: 0xC5

The length of the search must be configured with Set_CadParams() prior sending Set_Cad() .

Set_TxContinuousWave() command

Set_TxContinuousWave() is a test command to generate a continuous transmit tone at the RF-PLL frequency. The sub-GHz radio remains in continuous transmit tone mode until a mode configuration command is received.

0
Opcode
w

byte 0 bits 7:0 Opcode: 0xD1

Set_TxContinuousPreamble() command

Set_TxContinuousPreamble() is a test command to generate an infinite preamble at the RF-PLL frequency.

The preamble is an alternating 0s and 1s sequence in generic (G)FSK and (G)MSK modulations. The preamble is symbol 0 in LoRa modulation.

The sub-GHz radio remains in infinite preamble mode until a mode configuration command is received.

0
Opcode
w

byte 0 bits 7:0 Opcode: 0xD2

4.8.4 Sub-GHz radio configuration commands

Set_PacketType() command

Set_PacketType(PktType) allows the selection of packet frame format. This command must be the first command of a sub-GHz radio configuration sequence.

Changing from one sub-GHz radio configuration to another is done using Set_PacketType() . The parameters from the previous sub-GHz radio configuration are lost. The switch from one configuration mode to another is only accepted in Standby mode.

01
OpcodePktType
ww

byte 0 bits 7:0 Opcode: 0x8A.

byte 1 bits 7:2 Reserved, must be kept at reset value.

bits 1:0 PktType[1:0]: Packet type definition

Get_PacketType() command

Get_PacketType(Status, PktType) returns information on the selected packet frame format.

Changing from one sub-GHz radio configuration to another is done using Set_PacketType() . The parameters from the previous sub-GHz radio configuration are lost. The switch from one configuration mode to another is only accepted in Standby mode.

012
OpcodeStatus[7:0]PktType
wrr

byte 0 bits 7:0 Opcode: 0x11

byte 1 bits 7:0 Status[7:0]: see Get_Status() command

byte 2 bits 7:2 Reserved, must be kept at reset value.

bits 1:0 PktType[1:0]: Packet type definition

Set_RfFrequency() command

Set_RfFrequency(RfFreq) is used to lock the RF-PLL frequency to the transmit and receive frequency.

01234
OpcodeRfFreq[31:0]
wwwww

byte 0 bits 7:0 Opcode: 0x86

bytes 4:1 bits 31:0 RfFreq[31:0]: RF frequency

\[ \text{RF-PLL frequency} = 32 \cdot 10^6 \times \text{RFfreq} / 2^{25} \]

Set_TxParams() command

Set_TxParams(Power, RampTime) is used to set the transmit output power and the PA ramp-up time.

012
OpcodePower[7:0]RampTime[7:0]
www

byte 0 bits 7:0 Opcode: 0x8E

byte 1 bits 7:0 Power[7:0]: Output power setting

LP PA selected in Set_PaConfig()

0x0E: + 14 dB

...

0x00: 0 dB

...

0xEF: - 17 dB

Others: reserved

HP PA selected in Set_PaConfig()

0x16: + 22 dB

...

0x00: 0 dB

...

0xF7: - 9 dB

Others: reserved

byte 2 bits 7:0 RampTime[7:0] : PA ramp time for FSK, MSK and LoRa modulation

0x00: 10 µs
0x01: 20 µs
0x02: 40 µs
0x03: 80 µs
0x04: 200 µs
0x05: 800 µs
0x06: 1700 µs
0x07: 3400 µs
Others: reserved

Note: In BPSK mode, the ramping time is specific and RampTime[7:0] is not used.

Set_PaConfig() command

Set_PaConfig(PaDutyCycle, HpMax, PaSel, 0x01) is used to customize the maximum output power and PA efficiency.

01234
OpcodePaDutyCycle[2:0]HpMax[2:0]PaSel0x01
wwwww

byte 0 bits 7:0 Opcode : 0x95

byte 1 bits 7:3 Reserved, must be kept at reset value.

bits 2:0 PaDutyCycle[2:0] : PA duty cycle (conduit angle) control

Duty cycle = \( 0.2 + 0.04 \times \text{PaDutyCycle}[2:0] \) (see Table 27 for settings)

Caution: The following restrictions must be observed to avoid over-stress on the PA:

byte 2 bits 2:0 HpMax[2:0] : HP PA output power (see Table 27 for settings)

bits 7:3 Reserved, must be kept at reset value.

byte 3 bits 7:1 Reserved, must be kept at reset value.

bit 0 PaSel : PA selection.

0: HP PA selected
1: LP PA selected (default)

byte 4 bits 7:0 0x01

PA optimal settings given in the table below must be used to maximize the PA efficiency for the maximum targeted output power. Matching network determination must be done using these settings (see the application note AN5457 for more details).

Table 27. PA optimal setting and operating modes

Output power (dBm)PA modeSet_PaConfig()Set_TxParams()
PaDutyCycle [2:0]HpMax[2:0]PaSelPower
+ 15LP0x70x010x0E
+ 140x40x010x0E
+ 100x10x010x0D
+ 22HP0x40x700x16
+ 200x30x500x16
+ 170x20x300x16
+ 140x20x200x16

Set_TxRxFallbackMode() command

Set_TxRxFallbackMode(FallbackMode) defines the operating mode to enter after a successful packet transmission or packet reception.

01
OpcodeFallbackMode[7:0]
ww

byte 0 bits 7:0 Opcode : 0x93

byte 1 bits 7:0 FallbackMode[7:0] : Fall-back mode after successful packet transmission or packet reception

0x20: Standby mode entry (default)
0x30: Standby with HSE32 enabled mode entry
0x40: FS mode entry
Others: reserved

Set_CadParams() command

Set_CadParams(NbCadSymbol, CadDetPeak, CadDetMin, CadExitMode, Timeout) allows the CAD configuration for LoRa packet types.

01234567
OpcodeNbCadSymbol[2:0]CadDetPeak[7:0]CadDetMin[7:0]CadExitModeTimeout[23:0]
wwwwwwww

The correct values selected in the table below must be carefully tested to ensure a good detection at sensitivity level and to limit the number of false detections.

Table 28. Recommended CAD configuration settings

Spreading factorcadDetMincadDetPeakcadSymbolNum
SF710222 symbols
SF8
SF9234 symbols
SF1024
SF1125
SF1228

Set_BufferBaseAddress() command

Set_BufferBaseAddress(TxBaseAddr, RxBaseAddr) sets the data buffer base address for the packet handling in TX and RX.

012
OpcodeTxBaseAddr[7:0]RxBaseAddr[7:0]
www

byte 0 bits 7:0 Opcode: 0x8F

byte 1 bits 7:0 TxBaseAddr[7:0]: Tx base address offset relative to the sub-GHz RAM base address

byte 2 bits 7:0 RxBaseAddr[7:0]: Rx base address offset relative to the sub-GHz RAM base address

(G)FSK Set_ModulationParams() command

Set_ModulationParams(Br, PulseShape, Bw, Fdev) is used to configure the (G)FSK modulation parameters for the sub-GHz radio. Depending on the selected packet type in Set_PacketType() sent prior to this function, the parameters for generic packets are interpreted as follows:

012345678
OpcodeBr[23:0]PulseShape[7:0]Bw[7:0]Fdev[23:0]
wwwww

byte 0 bits 7:0 Opcode: 0x8B

bytes 3:1 bits 23:0 Br[23:0]: Bit rate

0x000000: reserved

0x000001 - 0xFFFFF: Br = 32 x 32 MHz / bit rate

byte 4 bits 7:0 PulseShape[7:0]: Pulse shape

0x00: no filter applied

0x08: Gaussian BT 0.3

0x09: Gaussian BT 0.5

0x0A: Gaussian BT 0.7

0x0B: Gaussian BT 1.0

Others: no filter applied

bytes 5 bit 7:0 Bw[7:0] : Bandwidth

0x1F: BW4 4.8 kHz DSB
0x17: BW5 5.8 kHz DSB
0x0F: BW7 7.3 kHz DSB
0x1E: BW9 9.7 kHz DSB
0x16: BW11 11.7 kHz DSB
0x0E: BW14 14.6 kHz DSB
0x1D: BW19 19.5 kHz DSB
0x15: BW23 23.4 kHz DSB
0x0D: BW29 29.3 kHz DSB
0x1C: BW39 39.0 kHz DSB
0x14: BW46 46.9 kHz DSB
0x0C: BW58 58.6 kHz DSB
0x1B: BW78 78.2 kHz DSB
0x13: BW93 93.8 kHz DSB
0x0B: BW117 117.3 kHz DSB
0x1A: BW156 156.2 kHz DSB
0x12: BW187 187.2 kHz DSB
0x0A: BW234 234.3 kHz DSB
0x19: BW312 312.0 kHz DSB
0x11: BW373 373.6 kHz DSB
0x09: BW467 467.0 kHz DSB
Others: reserved

bytes 8:6 bit 23:0 Fdev[23:0] : Frequency deviation 0x000000 - 0xFFFFFF: Fdev = Frequency deviation \( \times 2^{25} / 32 \text{ MHz} \)

LoRa Set_ModulationParams() command

Set_ModulationParams(Sf, Bw, Cr, Ldro) is used to configure the LoRa modulation parameters for the sub-GHz radio. Depending on the selected packet type in Set_PacketType() sent prior to this function, the parameters for LoRa are interpreted as below.

01234
OpcodeSf[3:0]Bw[7:0]Cr[2:0]Ldro
wwwww
byte 0 bits 7:0 Opcode : 0x8B

byte 1 bits 7:4 Reserved, must be kept at reset value.

bits 3:0 Sf[3:0] : Spreading factor
0x5: Spreading factor 5
0x6: Spreading factor 6
0x7: Spreading factor 7
0x8: Spreading factor 8
0x9: Spreading factor 9
0xA: Spreading factor 10
0xB: Spreading factor 11
0xC: Spreading factor 12
Others: reserved

  1. byte 2 bits 7:0 Bw[7:0] : Bandwidth
    • 0x00: bandwidth 7 (7.81 kHz)
    • 0x08: bandwidth 10 (10.42 kHz)
    • 0x01: bandwidth 15 (15.63 kHz)
    • 0x09: bandwidth 20 (20.83 kHz)
    • 0x02: bandwidth 31 (31.25 kHz)
    • 0x0A: bandwidth 41 (41.67 kHz)
    • 0x03: bandwidth 62 (62.50 kHz)
    • 0x04: bandwidth 125 (125 kHz)
    • 0x05: bandwidth 250 (250 kHz)
    • 0x06: bandwidth 500 (500 kHz)
    • Others: reserved
  2. byte 3 bits 7:3 Reserved, must be kept at reset value.
  3. bits 2:0 Cr[2:0] : Forward error correction coding rate
    • 0x0: no forward error correction coding rate 4/4
    • 0x1: forward error correction coding rate 4/5
    • 0x2: forward error correction coding rate 4/6
    • 0x3: forward error correction coding rate 4/7
    • 0x4: forward error correction coding rate 4/8
    • Others: reserved
  4. byte 4 bits 7:1 Reserved, must be kept at reset value.
  5. bit 0 Ldro : low data rate optimization enable
    • 0: low data rate optimization disabled
    • 1: low data rate optimization enabled

BPSK Set_ModulationParams() command

Set_ModulationParams(Br, PulseShape) is used to configure the BPSK modulation parameters for the sub-GHz radio. Depending on the selected packet type in Set_PacketType() sent prior to this function, the parameters for BPSK packets are interpreted as follows:

01234
OpcodeBr[23:0]PulseShape[7:0]
wwwww
  1. byte 0 bits 7:0 Opcode : 0x8B
  2. bytes 3:1 bits 23:0 Br[23:0] : bit rate
    • 0x000000: reserved
    • 0x000001 - 0xFFFFFFFF: \( Br = 32 \times 32 \text{ MHz} / \text{bit rate} \)
    • 0x1A0AAA: 600 bit/s
    • 0x9C4000: 100 bit/s
  3. byte 4 bits 7:0 PulseShape[7:0] : Pulse shape
    • 0x16: Gaussian BT 0.5
    • Others: reserved

Generic Set_PacketParams() command

Set_PacketParams(PbLength, PbDetLength, SynchWordLength, AddrComp, PktType, PayloadLength, CrcType, Whitening) is used to configure the packet handling for the sub-GHz radio. When the generic packet is selected with packet type in Set_PacketType() sent prior to this function, the parameters are interpreted as below.

0123456789
OpcodePbLength[15:0]PbDetLength[2:0]SyncWordLength[6:0]AddrComp[1:0]PktTypePayloadLength[7:0]CrcType[2:0]Whitening
wwwwwwwwww

byte 0 bits 7:0 Opcode : 0x8C.

bytes 2:1 bits 15:0 PbLength[15:0] : Preamble length in number of symbols

byte 3 bits 7:3 Reserved, must be kept at reset value.

bits 2:0 PbDetLength[2:0] : Preamble detection length in number of bit symbols

byte 4 bit 7 Reserved, must be kept at reset value.

bits 6:0 SyncWordLength[6:0] : Synchronization word length in number of bit symbols

byte 5 bits 7:2 Reserved, must be kept at reset value.

bits 1:0 AddrComp[1:0] : Address comparison/filtering

byte 6 bits 7:1 Reserved, must be kept at reset value.

bit 0 PktType : Packet type definition

byte 7 bits 7:0 PayloadLength[7:0] : Payload length in number of bytes

byte 8 bits 7:3 Reserved, must be kept at reset value.

bits 2:0 CrcType[2:0] : CRC type definition

The CRC initialization value is provided in SUBGHZ_GCRCINIRL and SUBGHZ_GCRCINIRH. The polynomial is defined in SUBGHZ_GCRCPOLRL and SUBGHZ_GCRCPOLRH.

0x0: 1-byte CRC

0x1: no CRC

0x2: 2-byte CRC

0x4: 1-byte inverted CRC

0x6: 2-byte inverted CRC

Others: reserved

byte 9 bits 7:1 Reserved, must be kept at reset value.

bit 0 Whitening : Whitening enable

The whitening initial value is provided in WHITEINI[8:0].

0: Whitening disabled

1: Whitening enabled

LoRa Set_PacketParams() command

Set_PacketParams(PbLength, HeaderType, PayloadLength, CrcType, InvertIQ) is used to configure the packet handling for the sub-GHz radio. Depending on the selected packet type in Set_PacketType() sent prior to this function, the parameters are interpreted as below.

0123456
OpcodePbLength[15:0]HeaderTypePayloadLength[7:0]CrcTypeInvertIQ
wwwwww

byte 0 bits 7:0 Opcode : 0x8C.

bytes 2:1 bits 15:0 PbLength[15:0] : Preamble length in number of symbols

0x0000: reserved

0x0001 - 0xFFFF: 1 to 65535 symbols

byte 3 bits 7:1 Reserved, must be kept at reset value.

bit 0 HeaderType : Header type definition

0: explicit header for variable length payload

1: implicit header for fixed length payload

byte 4 bits 7:0 PayloadLength[7:0] : Payload length in number of bytes

0x00- 0xFF: 0 to 255 bytes

byte 5 bits 7:1 Reserved, must be kept at reset value.

bit 0 CrcType CRC enable

0: CRC disabled

1: CRC enabled

byte 6 bits 7:1 Reserved, must be kept at reset value.

bit 0 InvertIQ : IQ setup

0: standard IQ setup

1: inverted IQ setup

BPSK Set_PacketParams() command

Set_PacketParams(PayloadLength) is used to configure the packet handling for the sub-GHz radio. When the BPSK packet is selected with packet type in Set_PacketType() sent prior to this function, the parameters are interpreted as below.

01
OpcodePayloadLength[7:0]
ww

byte 0 bits 7:0 Opcode : 0x8C.

byte 1 bits 7:0 PayloadLength[7:0] : BPSK packet (payload) length, including preamble, synch word, device id and CRC, in number of bytes

0x00- 0xFF: 0 to 255 bytes

LoRa Set_LoRaSymbTimeout() command

Set_LoRaSymbTimeout(SymbNum) is used to configure the number of LoRa symbols to be received before starting the reception of a LoRa packet.

01
OpcodeSymbNum[7:0]
ww

byte 0 bits 7:0 Opcode : 0xA0.

byte 1 bits 7:0 SymbNum[7:0] : Number of LoRa symbols before timeout IRQ is generated if end of preamble has not been detected

0x0: No detection of end of preamble

Others: When setting SymbNum to a value \( \neq 0 \) , the modem counts the number of received chirp after the first LoRa chirp is detected. The modem checks that the end of preamble is detected before the SymbNum number of LoRa symbol is obtained after the first chirp is detected. If this is not the case, a timeout is generated.

Note: In LoRa packet type, when entering the Receive mode and SymbNum[7:0] = 0x0, the modem locks as soon as a single LoRa symbol is detected. This may lead to a false detection. To avoid false detections, the number of LoRa symbols to be detected can be increased.

4.8.5 Communication status information commands

Get_Status() command

Get_Status(Status) can be issued at any time.

01
OpcodeStatus[7:0]
wr

byte 0 bits 7:0 Opcode: 0xC0

byte 1 bit 7 Reserved, must be kept at reset value.

bits 6:4 Status_Mode[2:0] sub-GHz radio operating mode

0x2: Standby mode with RC 13 MHz

0x3: Standby mode with HSE32

0x4: FS mode

0x5: RX mode

0x6: TX mode

Others: reserved

bits 3:1 Status_CmdStatus[2:0] : Command status

0x2: data available to host (packet received successfully and data can be retrieved)

0x3: command time out (command took too long to complete triggering a sub-GHz radio watchdog timeout)

0x4: command processing error (invalid opcode or incorrect number of parameters)

0x5: command execution failure (command successfully received but cannot be executed at this time, requested operating mode cannot be entered or requested data cannot be sent)

0x6: transmit command completed (current packet transmission completed)

Others: reserved

bit 0 Reserved, must be kept at reset value.

Get_RxBufferStatus() command

Get_RxBufferStatus(Status, RxPayloadLength, RxBufferPointer) returns the sub-GHz radio status, the length of the last received packet (RxPayloadLength) and the buffer address of the first received payload byte (RxBufferPointer).

0123
OpcodeStatus[7:0]RxPayloadLength[7:0]RxBufferPointer[7:0]
wrrr

byte 0 bits 7:0 Opcode: 0x13.

byte 1 bits 7:0 Status[7:0] : see Get_Status() command .

byte 2 bits 7:0 RxPayloadLength[7:0] : indicate the number of bytes received in the last received packet

byte 3 bits 7:0 RxBufferPointer[7:0] : indicates the offset in the RAM data buffer where the first byte of the last received packet is stored

(G)FSK Get_PacketStatus() command

Get_PacketStatus(Status, RxStatus, RssiSync, RssiAvg) returns information on the last received packet. Depending on the selected packet type in Set_PacketType() sent prior to this function, the parameters for generic packets are interpreted as below.

01234
OpcodeStatus[7:0]RxStatus[7:0]RssiSync[7:0]RssiAvg[7:0]
wrrrr

byte 0 bits 7:0 Opcode : 0x14

byte 1 bits 7:0 Status[7:0] : see Get_Status() command

byte 2

byte 3 bits 7:0 RssiSync[7:0] : RSSI level when the synchronization address is detected
Signal power = \( -RssiSync / 2 \) (in dBm)

byte 4 bits 7:0 RssiAvg[7:0] : Average RSSI level over the received packet
Signal power = \( -RssiAvg / 2 \) (in dBm)

LoRa Get_PacketStatus() command

Get_PacketStatus(Status, RssiPkt, SnrPkt, SignalRssiPkt) returns information on the last received packet. Depending on the selected packet type in Set_PacketType() sent prior to this function, the parameters for LoRa packets are interpreted as below.

01234
OpcodeStatus[7:0]RssiPkt[7:0]SnrPkt[7:0]SignalRssiPkt
wrrrr

byte 0 bits 7:0 Opcode : 0x14

byte 1 bits 7:0 Status[7:0] : see Get_Status() command

byte 2 bits 7:0 RssiPkt[7:0] : Average RSSI level over the received packet
Signal power = \( - RssiPkt / 2 \) (in dBm)

byte 3 bits 7:0 SnrPkt[7:0] : Estimation of SNR over the received packet
SNR = \( SnrPkt / 4 \) (in dB)

byte 4 bits 7:0 SignalRssiPkt[7:0] : Estimation of RSSI level of the LoRa signal after despreading
Signal power = \( - SignalRssiPkt / 2 \) (in dBm)

Get_RssiInst() command

Get_RssiInst(Status, RssiInst) returns the instantaneous signal strength while in RX mode.

012
OpcodeStatus[7:0]RssiInst[7:0]
wrr

byte 0 bits 7:0 Opcode: 0x15

byte 1 bits 7:0 Status[7:0]: see Get_Status() command

byte 2 bits 7:0 RssiInst[7:0]: instantaneous RSSI level at the reception time

Signal power = \( -\text{RssiInst} / 2 \) (in dBm)

(G)FSK Get_Stats() command

Get_Stats(Status, NbPktReceived, NbPktCrcError, NbPktLengthError) returns statistics information on the last received packet. Depending on the selected packet type in Set_PacketType() sent prior to this function, the parameters for generic packets are interpreted as below.

01234567
OpcodeStatus[7:0]NbPktReceived[15:0]NbPktCrcError[15:0]NbPktLengthError[15:0]
wrrrrrrr

byte 0 bits 7:0 Opcode: 0x10

byte 1 bits 7:0 Status[7:0]: see Get_Status() command

bytes 3:2 bits 15:0 NbPktReceived[15:0]: Number of packets received

bytes 5:4 bits 15:0 NbPktCrcError[15:0]: Number of packets received with a payload CRC error

bytes 7:6 bits 15:0 NbPktLengthError[15:0]: Number of packets received with a payload length error

LoRa Get_Stats() command

Get_Stats(Status, NbPktReceived, NbPktCrcError, NbPktHeaderError) returns statistics information on the last received packet. Depending on the selected packet type in Set_PacketType() sent prior to this function, the parameters for LoRa packets are interpreted as below.

01234567
OpcodeStatus[7:0]NbPktReceived[15:0]NbPktCrcError[15:0]NbPktHeaderError[15:0]
wrrrrrrr

byte 0 bits 7:0 Opcode: 0x10

byte 1 bits 7:0 Status[7:0]: see Get_Status() command

bytes 3:2 bits 15:0 NbPktReceived[15:0]: Number of packets received

bytes 5:4 bits 15:0 NbPktCrcError[15:0]: Number of packets received with a payload CRC error.

bytes 7:6 bits 15:0 NbPktHeaderError[15:0] : Number of packets received with a header CRC error

Reset_Stats() command

Reset_Stats(0x00, 0x00, 0x00, 0x00, 0x00, 0x00) resets the received packet statistics as reported in Get_Stats() (NbPktReceived, NbPktCrcError, NbPktlengthError and NbPktHeaderError).

0123456
Opcode0x000x000x000x000x000x00
wwwwwww

byte 0 bits 7:0 Opcode : 0x0

byte 1 bits 7:0 0x0

byte 2 bits 7:0 0x0

byte 3 bits 7:0 0x0

byte 4 bits 7:0 0x0

byte 5 bits 7:0 0x0

byte 6 bits 7:0 0x0

4.8.6 IRQ interrupt commands

There are three IRQ interrupts that can be mapped to several sub-GHz radio interrupt sources. The source of an interrupt is determined by reading the device status. Interrupts are cleared using Clr_IrqStatus().

There are 10 possible interrupt sources used depending on the packet type and operating mode. Each of these interrupt sources can be enabled or masked and mapped on any of the IRQ interrupts.

A set of commands is used to configure and control the IRQ sources and interrupt generation

Table 29. IRQ bit mapping and definition

BitSourceDescriptionPacket typeOperation
0TxDonePacket transmission finishedLoRa and GFSKTx
1RxDonePacket reception finishedLoRa and GFSKRx
2PreambleDetectedPreamble detectedLoRa and GFSKRx
3SyncDetectedSynchronization word validGFSKRx
4HeaderValidHeader validLoRaRx
5HeaderErrHeader CRC errorLoRaRx
6Errpreamble, syncword, address, CRC or length errorGFSKRx
CrcErrCRC errorLoRaRx

Table 29. IRQ bit mapping and definition (continued)

BitSourceDescriptionPacket typeOperation
7CadDoneChannel activity detection finishedLoRaCad
8CadDetectedChannel activity detectedLoRaCad
9TimeoutRX or TX timeoutLoRa and GFSKRx and Tx
15:10Not applicableReservedNot applicable

Cfg_DioIrq() command

Cfg_DioIrq(IrqMask, Irq1Mask, Irq2Mask, Irq3Mask) allows interrupts to be masked and mapped on the IRQ lines.

012345678
OpcodeIrqMask[15:0]Irq1Mask[15:0]Irq2Mask[15:0]Irq3Mask[15:0]
wwwwwwwww

byte 0 bits 7:0 Opcode : 0x08

bytes 2:1 bits 15:0 IrqMask[15:0] : Global interrupt enable

See Table 29 for interrupt bit map definition. For each bit:

0: IRQ disabled

1: IRQ enabled

bytes 4:3 bits 15:0 Irq1Mask[15:0] : IRQ1 line Interrupt enable

0: interrupt on IRQ1 line disable

1: interrupt on IRQ1 line enabled

bytes 6:5 bits 15:0 Irq2Mask[15:0] : IRQ2 line Interrupt enable

0: interrupt on IRQ2 line disable

1: interrupt on IRQ2 line enabled

bytes 8:7 bits 15:0 Irq3Mask[15:0] : IRQ3 line Interrupt enable

0: interrupt on IRQ3 line disable

1: interrupt on IRQ3 line enabled

Get_IrqStatus() command

Get_IrqStatus(Status, IrqStatus) returns the IRQ status.

0123
OpcodeStatus[7:0]IrqStatus[15:0]
wrrr

byte 0 bits 7:0 Opcode : 0x12

byte 1 bits 7:0 Status[7:0] : see Get_Status() command

bytes 3:2 bits 15:0 IrqStatus[15:0] : interrupt pending status information

See Table 29 for interrupt bit map definition. For each bit:

0: IRQ not pending

1: IRQ pending

Clr_IrqStatus() command

Clr_IrqStatus(ClrIrq) clears the IRQ status flags (IrqStatus[15:0]).

012
OpcodeClrIrq[15:0]
www

byte 0 bits 7:0 Opcode: 0x02

bytes 2:1 bits 15:0 ClrIrq[15:0]: Clear interrupt status

See Table 29 for interrupt bit map definition. For each bit:

0: no action

1: IRQ pending status flag cleared

4.8.7 Miscellaneous commands

Calibrate() command

Calibrate(CalibCfg) allows one or several blocks to be calibrated at any time when in Standby mode. The blocks to calibrate are defined by CalibCfg parameter. When the calibration is ongoing, BUSY is set. A falling edge on BUSY indicates the end of all enabled calibrations.

01
OpcodeCalibCfg[7:0]
ww

byte 0 bits 7:0 Opcode: 0x89

  1. byte 1
    • bit 7 Reserved, must be kept at reset value.
    • bit 6 CalibCfg_Image : Image calibration
      • 0: Image calibration disabled
      • 1: Image calibration enabled
    • bit 5 CalibCfg_AdcBulkP : RF-ADC bulk P calibration
      • 0: RF-ADC bulk P calibration disabled
      • 1: RF-ADC bulk P calibration enabled
    • bit 4 CalibCfg_AdcBulkN : RF-ADC bulk N calibration
      • 0: RF-ADC bulk N calibration disabled
      • 1: RF-ADC bulk N calibration enabled
    • bit 3 CalibCfg_AdcPulse : RF-ADC pulse calibration
      • 0: RF-ADC pulse calibration disabled
      • 1: RF-ADC pulse calibration enabled
    • bit 2 CalibCfg_Pll : RF-PLL calibration
      • 0: RF-PLL calibration disabled
      • 1: RF-PLL calibration enabled
    • bit 1 CalibCfg_RC13M : Sub-GHz radio RC 13 MHz calibration
      • 0: Sub-GHz radio RC 13 MHz calibration disabled
      • 1: Sub-GHz radio RC 13 MHz calibration enabled
    • bit 0 CalibCfg_RC64K : Sub-GHz radio RC 64 kHz calibration
      • 0: Sub-GHz radio RC 64 kHz calibration disabled
      • 1: Sub-GHz radio RC 64 kHz calibration enabled

CalibrateImage() command

CalibrateImage(CalFreq1, CalFreq2) allows the image to be calibrated at given frequencies, at any time when in Standby mode. The calibration frequencies are defined by CalFreq1 and CalFreq2. When the calibration is ongoing, BUSY is set. A falling edge on BUSY indicates the end of calibration. Once performed, the calibration is valid for all frequencies between the two selected calibration frequencies. Any ISM band can be covered by selecting the applicable frequency for CalFreq1 and CalFreq2

Table 30. Image calibration for ISM bands

ISM band [MHz]CalIFreq1CalIFreq2
430 - 4400x6B0x6F
470 - 5100x750x81
779 - 7870xC10xC5
863 - 8700xD70xDB
902 - 9280xE1 (default)0xE9 (default)

By default, the image calibration is made in the band 902 - 928 MHz. Nevertheless it is possible to request a new calibration at other frequencies.

012
OpcodeCalFreq1[7:0]CalFreq2[7:0]
www

byte 0 bits 7:0 Opcode: 0x98

byte 1 bits 7:0 CalFreq1[7:0]: Lower frequency of the band to calibrate (see Table 30 )

byte 2 bits 7:0 CalFreq2[7:0]: Higher frequency of the band to calibrate (see Table 30 )

The calibration frequencies are computed as follows:

\[ \text{Calibration}_{\text{freq}} = \text{CalFreq} * 4 \text{ MHz where } \text{CalFreq1} \leq \text{CalFreq2} \]

Example: 0x6B = 428 MHz.

When \( \text{CalFreq1} = \text{CalFreq2} \) , the image calibration is done at a single frequency.

For frequencies between \( \text{CalFreq1} \) and \( \text{CalFreq2} \) , the calibration coefficient is linearly interpolated from the values obtained during the image calibration at \( \text{CalFreq1} \) and \( \text{CalFreq2} \) .

For frequencies \( \leq \text{CalFreq1} \) , the coefficient obtained during the image calibration at \( \text{CalFreq1} \) is used.

For frequencies \( \geq \text{CalFreq2} \) , the coefficient obtained during the image calibration at \( \text{CalFreq2} \) is used.

Set_RegulatorMode() command

Set_RegulatorMode(RegMode) allows the sub-GHz radio supply operation mode selection, between LDO mode (default) and SMPS mode, when in Standby with HSE32 and Active modes.

01
OpcodeRegMode
ww

byte 0 bits 7:0 Opcode: 0x96

byte 1 bits 7:1 Reserved, must be kept at reset value.

bit 0 RegMode: Regulator mode selection when sub-GHz radio is active

Note: For the different CPU operating modes, the LDO or SMPS mode is controlled by the SMPSEN bit in PWR control register 5 (PWR_CR5) . When the sub-GHz radio or CPU selects the SMPS mode, the LDO mode selection is discarded.

Get_Error() command

Get_Error(Status, OpError) returns the sub-GHz radio operational errors.

0123
OpcodeStatus[7:0]OpError[15:0]
wrrr

byte 0 bits 7:0 Opcode : 0x17

byte 1 bits 7:0 Status[7:0] : see Get_Status() command

bytes 3:2 bits 15:9 Reserved, must be kept at reset value.

bit 8 OpError_PaRampError : PA ramping failed

bit 7 Reserved, must be kept at reset value.

bit 6 OpError_PllLockError : RF-PLL locking failed

bit 5 OpError_XoscStartError : HSE32 clock startup failed

bit 4 OpError_ImageCalibrationError : Image calibration failed

bit 3 OpError_AdcCalibrationError : RF-ADC calibration failed

bit 2 OpError_PllCalibrationError : RF-PLL calibration failed

bit 1 OpError_RC13MCalibrationError : Sub-GHz radio RC 13 MHz oscillator calibration failed

bit 0 OpError_RC64KCalibrationError : Sub-GHz radio RC 64 kHz oscillator calibration failed

Clr_Error() command

Clr_Error(0x00) clears all recorded sub-GHz radio errors, as reported in Get_Error() (RC64KCalibrationError, RC13MCalibrationError, PllCalibrationError, AdcCalibrationError, ImageCalibrationError, XscoStartError, PllLockError and PaRampError).

01
Opcode0x00
ww

byte 0 bits 7:0 Opcode : 0x07

byte 1 bits 7:0 0x00

4.8.8 Set_TcxoMode command

Set_TcxoMode(RegTcxoTrim, Timeout) is used to configure the TCXO and HSE32 ready timeout.

Table 31. Command format Set_TcxoMode()

Byte 0Byte 1Byte 2-4
Opcode = 0x97RegTcxoTrim[2:0]Timeout[23:0]

The definition of RegTcxoTrim and Timeout bytes is given in the table below.

Table 32. RegTcxoTrim and Timeout bytes definition

Byte 1 [7:3]Byte 1 RegTcxoTrim[2:0 (1) ] (V)Byte 2-4 [23:0] timeout
Reserved0x0 = 1.60x000000 = timeout disabled
0x1 = 1.7Other = timeout enabled (2)
0x2 = 1.8-
0x3 = 2.2-
0x4 = 2.4-
0x5 = 2.7-
0x6 = 3.0-
0x7 = 3.3-
  1. 1. To use V DDTCXO , the V DDRF supply must be at least + 200 mV higher than the selected RegTcxoTrim voltage level.
  2. 2. Maximum time the system waits for the HSE32 clock to be ready, before HSEStartErr is set.

The time-out duration is computed by the following formula:

\[ \text{Time-out duration} = \text{Timeout} \times 15.625 \mu\text{s} \text{ (maximum time-out duration} = 262.14 \text{ s)} \]

4.8.9 Sub-GHz radio commands overview

The sub-GHz radio commands are mapped as 8-bit addressable SPI commands, as described in the table below:

Table 33. Sub-GHz radio SPI commands overview

CommandOpcodeParameters
CalibratImage()0x98CalFreq1, CalFreq2
Calibrate()0x89CalibCfg
Cfg_DioIrq()0x08IrqMask, Irq1Mask, Irq2Mask, Irq3Mask
Clr_Error()0x070x00
Clr_IrqStatus()0x02ClrIrq
Get_Error()0x17Status, OpError
Get_IrqStatus()0x12Status, IrqStatus
Get_PacketStatus()FSKStatus, RxStatus, RssiSync, RssiAvg
LoRaStatus, RssiPkt, SnrPkt, SignalRssiPkt
Get_PacketType()0x11Status, PktType
Get_RssiInst()0x15Status, RssiInst
Get_RxBufferStatus()0x13Status, RxPayloadLength, RxBufferPointer
Get_Stats()FSKStatus, NbPktReceived, NbPktCrcError, NbPktLengthError
LoRaStatus, NbPktReceived, NbPktCrcError, NbPktHeaderError

Table 33. Sub-GHz radio SPI commands overview (continued)

CommandOpcodeParameters
Get_Status()0xC0Status
Read_Buffer()0x1EOffset, Status, Data0, Data1, ..., Datan
Read_Register()0x1DAddr, Status, Data0, Data1, ..., Datan
Reset_Stats()0x000x00, 0x00, 0x00, 0x00, 0x00, 0x00
Set_BufferBaseAddress()0x8FTxBaseAddr, RxBaseAddr
Set_Cad()0xC5-
Set_CadParams()0x88NbCadSymbol, CadDetPeak, CadDetMin, CadExitMode, Timeout
Set_Fs()0xC1-
Set_LoRaSymbTimeout()0xA0SymbNum
Set_ModulationParams()FSK0x8BBr, PulseShape, Bw, Fdev
LoRaSf, Bw, Cr, Ldro
BPSKBr, PulseShape
Set_PaConfig()0x95PaDutyCycle, HpMax, HpSel, 0x01
Set_PacketParams()Generic0x8CPbLength, PdDetLength, SyncWordLength, AddrComp, PktType, PayloadLength, CrcType, Whitening
LoRaPbLength, HeaderType, PayloadLength, CrcType, InvertIQ
BPSKPayloadLength
Set_PacketType()0x8APktType
Set_RegulatorMode()0x96RegMode
Set_RfFrequency()0x86RfFreq
Set_Rx()0x82Timeout
Set_RxDutyCycle()0x94RxPeriod, SleepPeriod
Set_TxRxFallbackMode()0x93FallbackMode
Set_Sleep()0x84SleepCfg
Set_Standby()0x80StandbyCfg
Set_StopRxTimerOnPreamble()0x9FRxTimeoutStop
Set_TcxoMode()0x97RegTcxoTrim, Timeout
Set_Tx()0x83Timeout
Set_TxContinuousWave()0xD1-
Set_TxContinuousPreamble()0xD2-
Set_TxParams()0x8EPower, RampTime
Write_Buffer()0x0EOffset, Data0, Data1, ..., Datan
Write_Register()0x0DAddr, Data0, Data1, ..., Datan

4.9 Sub-GHz radio application configuration

The sub-GHz radio is controlled via the SPI command interface. The following sections describe the basic sequence for some sub-GHz radio operations.

After releasing the sub-GHz radio reset and waking it up with sub-GHz radio SPI NSS, the sub-GHz radio automatically performs a calibration and enters Standby mode. When the sub-GHz radio is already active, the Standby mode can be requested by Set_Standby() . Once BUSY goes low, the sub-GHz radio can be set in Active mode.

4.9.1 Basic sequence for LoRa, (G)MSK and (G)FSK transmit operation

The sub-GHz radio can be set in LoRa, (G)MSK or (G)FSK transmit operation mode with the following steps:

  1. 1. Define the location of the transmit payload data in the data buffer, with Set_BufferBaseAddress() .
  2. 2. Write the payload data to the transmit data buffer with Write_Buffer() .
  3. 3. Select the packet type (generic or LoRa) with Set_PacketType() .
  4. 4. Define the frame format with Set_PacketParams() .
  5. 5. Define synchronization word in the associated packet type SUBGHZ_xSYNCR(n) with Write_Register() .
  6. 6. Define the RF frequency with Set_RfFrequency() .
  7. 7. Define the PA configuration with Set_PaConfig() .
  8. 8. Define the PA output power and ramping with Set_TxParams() .
  9. 9. Define the modulation parameters with Set_ModulationParams() .
  10. 10. Enable TxDone and timeout interrupts by configuring IRQ with Cfg_DioIrq() .
  11. 11. Start the transmission by setting the sub-GHz radio in TX mode with Set_Tx() . After the transmission is finished, the sub-GHz radio enters automatically the Standby mode.
  12. 12. Wait for sub-GHz radio IRQ interrupt and read interrupt status with Get_IrqStatus() :
    1. a) On a TxDone interrupt, the packet is successfully sent
    2. b) On a timeout interrupt, the transmission is timeout.
  13. 13. Clear interrupt with Clr_IrqStatus() .
  14. 14. Optionally, send a Set_Sleep() command to force the sub-GHz radio in Sleep mode.

4.9.2 Basic sequence for LoRa and (G)FSK receive operation

The sub-GHz radio can be set in LoRa or (G)FSK receive operation mode with the following steps:

  1. 1. Define the location where the received payload data must be stored in the data buffer, with Set_BufferBaseAddress() .
  2. 2. Select the packet type (generic or LoRa) with Set_PacketType() .
  3. 3. Define the frame format with Set_PacketParams() .
  4. 4. Define synchronization word in the associated packet type SUBGHZ_xSYNCR(n) with Write_Register() .
  5. 5. Define the RF frequency with Set_RfFrequency() .
  6. 6. Define the modulation parameters with Set_ModulationParams() .
  7. 7. Enable RxDone and timeout interrupts by configuring IRQ with Cfg_DioIrq() .
  8. 8. Start the receiver by setting the sub-GHz radio in RX mode with Set_Rx() :
    • – When in continuous receiver mode, the sub-GHz radio remains in RX mode to look for packets until stopped with Set_Standby() .
    • – In single mode (with or without timeout), when the reception is finished, the sub-GHz radio enters automatically the Standby mode.
    • – In listening mode, the sub-GHz radio repeatedly switches between RX single with timeout mode and Sleep mode.
  9. 9. Wait for sub-GHz radio IRQ interrupt and read the interrupt status with Get_IrqStatus() :
    1. a) On a RxDone interrupt, a packet is received:
      • – Check received packet error status (header error, crc error) with Get_IrqStatus() .
      • – When a valid packet is received, read the receive start buffer pointer and received payload length with Get_RxBufferStatus() .
      • – Read the received payload data from the receive data buffer with Read_Buffer() .
    2. b) On a timeout interrupt, the reception is timed out.
  10. 10. Clear interrupts with Clr_IrqStatus() .
  11. 11. Optionally, send a Set_Sleep() command to force the sub-GHz radio in Sleep mode.

4.9.3 Basic sequence for BPSK transmit operation

The sub-GHz radio can be set in BPSK transmit operation mode by the following steps:

  1. 1. Define the location of the transmit payload data in the data buffer, with Set_BufferBaseAddress()
  2. 2. Write the packet data (synchronization word, payload data) to the transmit data buffer with Write_Buffer() .
  3. 3. Select the packet type (BPSK) with Set_PacketType() .
  4. 4. Define the frame format with Set_PacketParams() .
  5. 5. Define the RF frequency with Set_RfFrequency() .
  6. 6. Define the PA configuration with Set_PaConfig() .
  7. 7. Define the PA output power and ramping with Set_TxParams() .
  8. 8. Define the modulation parameters with Set_ModulationParams() .
  9. 9. Enable TxDone and Timeout interrupts by configuring IRQ with Cfg_DioIrq() .
  10. 10. Start the transmission by setting the sub-GHz radio in TX mode with Set_Tx() . After the transmission is finished, the sub-GHz radio enters automatically the Standby mode.
  11. 11. Wait for sub-GHz radio IRQ interrupt and read interrupt status with Get_IrqStatus() :
    1. a) On a TxDone interrupt, the packet is successfully sent.
    2. b) On a timeout interrupt, the transmission is timed out.
  12. 12. Clear interrupt with Clr_IrqStatus() .
  13. 13. Optionally, send a Set_Sleep() command to force the sub-GHz radio in Sleep mode.

4.10 Sub-GHz radio registers

The sub-GHz radio peripheral registers can be accessed by sub-GHz radio command Write_Register() and Read_Register() .

4.10.1 Sub-GHz radio ramp-up MSB register (SUBGHZ_RAM_RAMPUPH)

Address offset: 0x0F0

Reset value: 0x00

76543210
RAMPUP[15:8]
rwrwrwrwrwrwrwrw

Bits 7:0 RAMPUP[15:8] : Ramp-up MSB bits

4.10.2 Sub-GHz radio ramp-up LSB register (SUBGHZ_RAM_RAMPUPL)

Address offset: 0x0F1

Reset value: 0x00

76543210
RAMPUP[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 RAMPUP[7:0] : Ramp-up LSB bits

4.10.3 Sub-GHz radio ramp-down MSB register (SUBGHZ_RAM_RAMPDNH)

Address offset: 0x0F2

Reset value: 0x00

76543210
RAMPDN[15:8]
rwrwrwrwrwrwrwrw

Bits 7:0 RAMPDN[15:8] : Ramp-down MSB bits

4.10.4 Sub-GHz radio ramp-down LSB register (SUBGHZ_RAM_RAMPDNL)

Address offset: 0x0F3

Reset value: 0x00

76543210
RAMPDN[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 RAMPDN[7:0] : Ramp-down LSB bits

4.10.5 Sub-GHz radio frame limit MSB register (SUBGHZ_RAM_FRAMELIMH)

Address offset: 0x0F4

Reset value: 0x00

76543210
FRAMELIMH[15:8]
rwrwrwrwrwrwrwrw

Bits 7:0 FRAMELIMH[15:8] : frame limit MSB bits

4.10.6 Sub-GHz radio frame limit LSB register (SUBGHZ_RAM_FRAMELIML)

Address offset: 0x0F5

Reset value: 0x00

76543210
FRAMELIML[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 FRAMELIML[7:0] : frame limit LSB bits

4.10.7 Sub-GHz radio generic bit synchronization register (SUBGHZ_GBSYNCR)

Address offset: 0x6AC

Reset value: 0x00

This register must be cleared to 0x00 when using packet types other than LoRa.

76543210
Res.SBITSYNCENRXDINVBITSYNCDISRes.Res.Res.Res.
rwrwrw

Bit 7 Reserved, must be kept at reset value.

Bit 6 SBITSYNCEN : LoRa simple bit synchronization enable

Bit 5 RXDINV : LoRa receive data inversion

Bit 4 BITSYNCDIS : LoRa normal bit synchronization enable

Bits 3:0 Reserved, must be kept at reset value.

4.10.8 Sub-GHz radio generic CFO MSB register (SUBGHZ_GCFORH)

Address offset: 0x6B0

Reset value: 0x00

76543210
Res.Res.Res.Res.DEMOD_CFO[3:0]
rrrr

Bits 7:4 Reserved, must be kept at reset value.

Bits 3:0 DEMOD_CFO[3:0] : actual frequency error from normalized value (MSB bits)

4.10.9 Sub-GHz radio generic CFO LSB register (SUBGHZ_GCFORL)

Address offset: 0x6B1

Reset value: 0x00

76543210
DEMOD_CFO[7:0]
rrrrrrrr

Bits 7:0 DEMOD_CFO[7:0] : actual frequency error from normalized value (LSB bits)

4.10.10 Sub-GHz radio generic packet control 1 register (SUBGHZ_GPKTCTL1R)

Address offset: 0x06B4

Reset value: 0x04

This register must be cleared to 0x00 when using packet types other than LoRa.

76543210
ResResResResResPBDETONPBDETLEN[1:0]
rwrwrw

Bits 7:3 Reserved, must be kept at reset value.

Bit 2 PBDETON : Preamble detection enable

Bits 1:0 PBDETLEN : Receiver preamble detection length

0b00: 8-bit preamble detection

0b01: 16-bit preamble detection

0b10: 24-bit preamble detection

0b11: 32-bit preamble detection

4.10.11 Sub-GHz radio generic packet control 1A register (SUBGHZ_GPKTCTL1AR)

Address offset: 0x6B8

Reset value: 0x21

76543210
Res.Res.SYNCDETENCONTTXINFSEQSEL[1:0]INFSQEQENWHITEINI[8]
rwrwrwrwrwrw

Bits 7:6 Reserved, must be kept at reset value.

Bit 5 SYNCDETEN : Generic packet synchronization word detection enable

Bit 4 CONTTX : Generic packet continuous transmit enable

Bits 3:2 INFSEQSEL[1:0] : Generic packet infinite sequence selection

Bit 1 INFSQEQEN : Generic packet infinite sequence enable

Bit 0 WHITEINI[8] : Generic packet whitening initial value MSB bit [8]

4.10.12 Sub-GHz radio generic whitening LSB register (SUBGHZ_GWHITEINIRL)

Address offset: 0x6B9

Reset value: 0x00

76543210
WHITEINI[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 WHITEINI[7:0] : Generic packet whitening initial value LSB bits [7:0]

4.10.13 Sub-GHz radio generic payload length register (SUBGHZ_GRTXPLDLEN)

Address offset: 0x6BB

Reset value: 0x0F

76543210
RTXPLDLEN[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 RTXPLDLEN[7:0] : Payload length FIFO match value in Rx and Tx

4.10.14 Sub-GHz radio generic CRC initial MSB register (SUBGHZ_GCRCINIRH)

Address offset: 0x6BC

Reset value: 0x1D

76543210
CRCINI[15:8]
rwrwrwrwrwrwrwrw

Bits 7:0 CRCINI[15:8] : Generic packet CRC initial polynomial MSB bits [15:8]

These bits are used for CRC initialization.

4.10.15 Sub-GHz radio generic CRC initial LSB register (SUBGHZ_GCRCINIRL)

Address offset: 0x6BD

Reset value: 0x0F

76543210
CRCINI[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 CRCINI[7:0] : Generic packet CRC initial polynomial LSB bits [7:0]
These bits are used for CRC initialization.

4.10.16 Sub-GHz radio generic CRC polynomial MSB register (SUBGHZ_GCRCPOLRH)

Address offset: 0x6BE

Reset value: 0x10

76543210
CRCPOL[15:8]
rwrwrwrwrwrwrwrw

Bits 7:0 CRCPOL[15:8] : Generic packet CRC polynomial MSB bits [15:8]
These bits are used for CRC initialization.

4.10.17 Sub-GHz radio generic CRC polynomial LSB register (SUBGHZ_GCRCPOLRL)

Address offset: 0x6BF

Reset value: 0x21

76543210
CRCPOLI[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 CRCPOLI[7:0] : Generic packet CRC initial polynomial LSB bits [7:0]
These bits are used for CRC initialization.

4.10.18 Sub-GHz radio generic synchronization word control register 0 (SUBGHZ_GSYNCR0)

Address offset: 0x6C0

Reset value: 0x97

76543210
SYNCWORD[63:56]
rwrwrwrwrwrwrwrw

Bits 7:0 SYNCWORD[63:56] : Eight byte of generic packet synchronization word

4.10.19 Sub-GHz radio generic synchronization word control register 1 (SUBGHZ_GSYNCR1)

Address offset: 0x6C1

Reset value: 0x23

76543210
SYNCWORD[55:48]
rwrwrwrwrwrwrwrw

Bits 7:0 SYNCWORD[55:48] : Seventh byte of generic packet synchronization word

4.10.20 Sub-GHz radio generic synchronization word control register 2 (SUBGHZ_GSYNCR2)

Address offset: 0x6C2

Reset value: 0x52

76543210
SYNCWORD[47:40]
rwrwrwrwrwrwrwrw

Bits 7:0 SYNCWORD[47:40] : Sixth byte of generic packet synchronization word

4.10.21 Sub-GHz radio generic synchronization word control register 3 (SUBGHZ_GSYNCR3)

Address offset: 0x6C3

Reset value: 0x25

76543210
SYNCWORD[39:32]
rwrwrwrwrwrwrwrw

Bits 7:0 SYNCWORD[39:32] : Fifth byte of generic packet synchronization word

4.10.22 Sub-GHz radio generic synchronization word control register 4 (SUBGHZ_GSYNCR4)

Address offset: 0x6C4

Reset value: 0x56

76543210
SYNCWORD[31:24]
rwrwrwrwrwrwrwrw

Bits 7:0 SYNCWORD[31:24] : Fourth byte of generic packet synchronization word

4.10.23 Sub-GHz radio generic synchronization word control register 5 (SUBGHZ_GSYNCR5)

Address offset: 0x6C5

Reset value: 0x53

76543210
SYNCWORD[23:16]
rwrwrwrwrwrwrwrw

Bits 7:0 SYNCWORD[23:16] : Third byte of generic packet synchronization word

4.10.24 Sub-GHz radio generic synchronization word control register 6 (SUBGHZ_GSYNCR6)

Address offset: 0x6C6

Reset value: 0x65

76543210
SYNCWORD[15:8]
rwrwrwrwrwrwrwrw

Bits 7:0 SYNCWORD[15:8] : Second byte of generic packet synchronization word

4.10.25 Sub-GHz radio generic synchronization word control register 7 (SUBGHZ_GSYNCR7)

Address offset: 0x6C7

Reset value: 0x64

76543210
SYNCWORD[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 SYNCWORD[7:0] : First byte of generic packet synchronization word

4.10.26 Sub-GHz radio generic node address register (SUBGHZ_GNODEADR)

Address offset: 0x6CD

Reset value: 0x00

76543210
NODEADD[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 NODEADD[7:0] : Node address used in FSK mode register

4.10.27 Sub-GHz radio generic broadcast address register (SUBGHZ_GBCASTADDR)

Address offset: 0x6CE

Reset value: 0x00

76543210
BCASTADD[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 BCASTADD[7:0] : Broadcast address used in FSK mode register

4.10.28 Sub-GHz radio generic AFC register (SUBGHZ_GAFCR)

Address offset: 0x6D1

Reset value: 0x18

76543210
AFC[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 AFC[7:0] : Automatic frequency control register

4.10.29 Sub-GHz radio LoRa payload length register (SUBGHZ_LPLDLENR)

Address offset: 0x702

Reset value: 0x00

76543210
PLDLEN[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 PLDLEN[7:0] : Payload length in number of bytes, in case of LoRa fixed header

4.10.30 Sub-GHz radio synchro timeout register (SUBGHZ_LSYNCTIMEOUTR)

Address offset: 0x706

Reset value: 0x00

76543210
SYNCTIMEOUT[7:0]
rrrrrrrr

Bits 7:0 SYNCTIMEOUT[7:0] : TimeoutValue = synchtimeout[7:3]*2^(2*synchtimeout[2:0]+1)

If a detection has not occurred by TimeoutValue, it goes back to Standby mode, or restart synch in continuous receive mode

Bits 7:3 synchtimeout(7:3) mantissa part

Bits 2:0 synchtimeout(2:0) exponent part

4.10.31 Sub-GHz radio LoRa IQ polarity MSB register (SUBGHZ_LIQPOLR)

Address offset: 0x735

Reset value: 0x00

76543210
ResResResResResResResRes

Bits 7:0 Reserved, must be kept at reset value.

4.10.32 Sub-GHz radio LoRa IQ polarity LSB register (SUBGHZ_LIQPOLR)

Address offset: 0x736

Reset value: 0x00

76543210
ResResResResResResResRes

Bits 7:0 Reserved, must be kept at reset value.

4.10.33 Sub-GHz radio LoRa synchronization word MSB register (SUBGHZ_LSYNCRH)

Address offset: 0x740

Reset value: 0x14

76543210
SYNCWORD[15:8]
rwrwrwrwrwrwrwrw

Bits 7:0 SYNCWORD[15:8] : LoRa synchronization word MSB bits [15:8]
0x14: LoRa private network
0x34: LoRa public network
Others: reserved

4.10.34 Sub-GHz radio LoRa synchronization word LSB register (SUBGHZ_LSYNCRL)

Address offset: 0x741

Reset value: 0x24

76543210
SYNCWORD[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 SYNCWORD[7:0] : LoRa synchronization word LSB bits [7:0]
0x24: LoRa private network
0x44: LoRa public network
Others: reserved

4.10.35 Sub-GHz radio Tx address pointer register (SUBGHZ_TXADPTR)

Address offset: 0x0802

Reset value: 0x00

76543210
PTR[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 PTR[7:0] : TX buffer address pointer

4.10.36 Sub-GHz radio Rx address pointer register (SUBGHZ_RXADPTR)

Address offset: 0x0803

Reset value: 0x00

76543210
PTR[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 PTR[7:0] : RX buffer address pointer

4.10.37 Sub-GHz radio bandwidth select register (SUBGHZ_BWSELR)

Address offset: 0x807

Reset value: 0x00

76543210
ResResResCHBWMANT[1:0]CHBWEXPO[2:0]
rrrrr

Bits 7:5 Reserved, must be kept at reset value.

Bits 4:3 CHBWMANT[1:0] : Channel bandwidth mantissa

Bits 2:0 CHBWEXPO[2:0] : Channel bandwidth exponent

4.10.38 Sub-GHz radio random number register 3 (SUBGHZ_RNGR3)

Address offset: 0x819

Reset value: 0x00

76543210
RNDATA[31:24]
rrrrrrrr

Bits 7:0 RNDATA[31:24] : Random number data bits [31:24]

4.10.39 Sub-GHz radio random number register 2 (SUBGHZ_RNGR2)

Address offset: 0x81A

Reset value: 0x00

76543210
RNDATA[23:16]
rrrrrrrr

Bits 7:0 RNDATA[23:16] : Random number data bits [23:16]

4.10.40 Sub-GHz radio random number register 1 (SUBGHZ_RNGR1)

Address offset: 0x81B

Reset value: 0x00

76543210
RNDATA[15:8]
rrrrrrrr

Bits 7:0 RNDATA[15:8] : Random number data bits [15:8]

4.10.41 Sub-GHz radio random number register 0 (SUBGHZ_RNGR0)

Address offset: 0x81C

Reset value: 0x00

76543210
RNDATA[7:0]
rrrrrrrr
Bits 7:0 RNDATA[7:0] : Random number data bits [7:0] 4.10.42 Sub-GHz radio SD resolution register (SUBGHZ_SDCFG0R)

Address offset: 0x889

Reset value: 0x00

76543210
SD[7:0]
rwrwrwrwrwrwrwrw
Bits 7:0 SD[7:0] : Radio SD resolution 4.10.43 Sub-GHz radio AGC RSSI control register (SUBGHZ_AGCSSICTL0R)

Address offset: 0x89B

Reset value: 0x00

76543210
CALDATA[7:0]
rwrwrwrwrwrwrwrw
Bits 7:0 CALDATA[7:0] : AGC RSSI control 4.10.44 Sub-GHz radio receiver gain control register (SUBGHZ_RXGAINCR)

Address offset: 0x8AC

Reset value: 0x94

76543210
SENSI_ADJUST[5:0]PMODE[1:0]
rwrwrwrwrwrwrwrw

Bits 7:2 SENSI_ADJUST[5:0] : Sensitivity Floor of AGC
This bitfield must be kept at 0x25.

Bits 1:0 PMODE[1:0] : Receiver power mode selection between normal mode and power saving mode
00: power saving mode (reduced sensitivity)
01: boost mode level1 active (improves sensitivity at detriment of power consumption)
10: boost mode level2 active (improves a set further sensitivity at detriment of power consumption)
Others: boost mode (best receiver sensitivity)

4.10.45 Sub-GHz radio AGC reset configuration register (SUBGHZ_AGCFORSTCFGR)

Address offset: 0x8B8

Reset value: 0x14

76543210
EN[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 EN[7:0] : Enable the reset generation for frequency-offset estimation

4.10.46 Sub-GHz radio AGC reset power threshold register (SUBGHZ_AGCFORSTPOWTHR)

Address offset: 0x8B9

Reset value: 0x0A

76543210
PWRTHR[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 PWRTHR[7:0] : Power threshold reset for frequency-offset estimation

4.10.47 Sub-GHz radio Tx clamp register (SUBGHZ_TXCLAMPR)

Address offset: 0x8D8

Reset value: 0x00

76543210
ResResResResResResResRes

Bits 7:0 Reserved, must be kept at reset value.

4.10.48 Sub-GHz radio disable LNA register (REG_ANA_LNA)

Address offset: 0x8E2

Reset value: 0x00

76543210
ResResResResResResResRes

Bits 7:0 Reserved, must be kept at reset value.

4.10.49 Sub-GHz radio disable mixer register (REG_ANA_MIXER)

Address offset: 0x8E5

Reset value: 0x00

76543210
ResResResResResResResRes

Bits 7:0 Reserved, must be kept at reset value.

4.10.50 Sub-GHz radio PA over current protection register (SUBGHZ_PAOCPR)

Address offset: 0x8E7

Reset value: 0x18

76543210
ResResOCP[5:0]
rWrWrWrWrWrW

Bits 7:6 Reserved, must be kept at reset value.

Bits 5:0 OCP[5:0] : Power amplifier over current protection level

0x18: maximum 60 mA current for LP PA mode

0x38: maximum 140mA current for HP PA mode.

Others: reserved

4.10.51 Sub-GHz radio RTC control register (SUBGHZ_RTCCTLR)

Address offset: 0x902

Reset value: 0x00

76543210
ResResResResResResResRTCEN
rW

Bits 7:1 Reserved, must be kept at reset value.

Bit 0 RTCEN : Writing 1 restarts the radio RTC.

4.10.52 Sub-GHz radio RTC period MSB register (SUBGHZ_RTCPRDR2)

Address offset: 0x906

Reset value: 0x00

76543210
RTCPRD[31:16]
rwrwrwrwrwrwrwrw

Bits 7:0 RTCPRD[31:16] : Updates radio RTC period (MSB)

4.10.53 Sub-GHz radio RTC period mid-byte register (SUBGHZ_RTCPRDR1)

Address offset: 0x907

Reset value: 0x00

76543210
RTCPRD[15:8]
rwrwrwrwrwrwrwrw

Bits 7:0 RTCPRD[15:8] : Updates radio RTC period (mid-byte)

4.10.54 Sub-GHz radio RTC period LSB register (SUBGHZ_RTCPRDR0)

Address offset: 0x908

Reset value: 0x00

76543210
RTCPRD[7:0]
rwrwrwrwrwrwrwrw

Bits 7:0 RTCPRD[7:0] : Updates radio RTC period (LSB)

4.10.55 Sub-GHz radio HSE32 OSC_IN capacitor trim register (SUBGHZ_HSEINTRIMR)

Address offset: 0x911

Reset value: 0x12

This register is retained in Sleep mode, but lost in Deep-Sleep mode.

76543210
Res.Res.TRIM[5:0]
rwrwrwrwrwrw

Bits 7:6 Reserved, must be kept at reset value.

Bits 5:0 TRIM[5:0] : HSE32 XTAL mode OSC_IN load capacitor trimming

Load capacitor trimming step size ~0.47 pF.

0x00: minimum value ~11.3 pF

...

0x12 value ~20.3 pF (default)

...

0x2F: maximum capacitor value ~33.4 pF

Others: reserved

4.10.56 Sub-GHz radio HSE32 OSC_OUT capacitor trim register (SUBGHZ_HSEOUTTRIMR)

Address offset: 0x912

Reset value: 0x12

This register is retained in Sleep mode, but lost in Deep-Sleep mode.

76543210
Res.Res.TRIM[5:0]
rwrwrwrwrwrw

Bits 7:6 Reserved, must be kept at reset value.

Bits 5:0 TRIM[5:0] : HSE32 XTAL mode OSC_OUT load capacitor trimming

Load capacitor trimming step size ~0.47 pF.

0x00: minimum value ~11.3 pF

...

0x12 value ~20.3 pF (default)

...

0x2F: maximum capacitor value ~33.4 pF

Others: reserved

4.10.57 Sub-GHz radio SMPS control 0 register (SUBGHZ_SMPSC0R)

Address offset: 0x916

Reset value: 0x00

76543210
Res.CLKDERes.Res.Res.Res.Res.Res.
rw

Bit 7 Reserved, must be kept at reset value.

Bit 6 CLKDE : SMPS clock detection enable

SMPS clock detection must be enabled before enabling the SMPS, if the application uses an external HSE clock source (not coming from XO or TCXO but from another device).

0: SMPS clock detection disabled

1: SMPS clock detection enabled

Bits 5:0 Reserved, must be kept at reset value.

4.10.58 Sub-GHz radio power control register (SUBGHZ_PCR)

Address offset: 0x91A

Reset value: 0x50

This register is retained in Sleep mode but lost in Deep-Sleep mode.

76543210
Res.CLECLV[1:0]Res.Res.Res.Res.
rwrwrw

Bit 7 Reserved, must be kept at reset value.

Bit 6 CLE : Power-supply current limiter enable

0: power-supply current limiter disabled (unlimited current)

1: power-supply current limiter enabled (current limited according to CLV[1:0])

Bits 5:4 CLV[1:0] : Power-supply current limiter value

When the power-supply current limiter is enabled by CLEN, these bits define the maximum current limiting level.

0x0: power-supply current limiting level 25 mA

0x1: power-supply current limiting level 50 mA (default)

0x2: power-supply current limiting level 100 mA

0x3: power-supply current limiting level 200 mA

Bits 3:0 Reserved, must be kept at reset value.

4.10.59 Sub-GHz radio regulator drive control register (SUBGHZ_REGDRVCR)

Address offset: 0x91F

Reset value: 0x08

This register is retained in Sleep mode but lost in Deep-Sleep mode.

76543210
ResResResResTRIM[2:0]EN
rwrwrwrw

Bits 7:4 Reserved, must be kept at reset value.

Bits 3:1 TRIM[2:0] : Regulator drive trimming

000: 1.22
001: 1.24
010: 1.26
011: 1.28
100: 1.30(default)
101: 1.32
110: 1.34

Bit 0 EN : Regulator drive enable

4.10.60 Sub-GHz radio SMPS control 2 register (SUBGHZ_SMPSC2R)

Address offset: 0x923

Reset value: 0x06

This register is retained in Sleep mode but lost in Deep-Sleep mode.

76543210
ResResResResResDRV[1:0]Res
rwrw

Bits 7:3 Reserved, must be kept at reset value.

Bits 2:1 DRV[1:0] : SMPS maximum drive capability.

0x0: 20 mA
0x1: 40 mA
0x2: 60 mA
0x3: 100 mA (default)

Bit 0 Reserved, must be kept at reset value.

4.10.61 Sub-GHz radio register map

Table 34. SUBGHZ register map and reset values

OffsetRegister name76543210
0x6ACSUBGHZ_GBSYNCRRes.SBITSYNCENRXDINVBITSYNCDISRes.Res.Res.Res.
Reset value000
0x6AC-
0x6B4
ReservedReserved
0x6B8SUBGHZ_GPKTCTL1ARRes.Res.SYNCDENENCONTXINFSQEQSEL[1:0]INFSSQEQENWHITEINI[8]
Reset value100001
0x6B9SUBGHZ_GWHITEINRLWHITEINI[7:0]
Reset value00000000
0x6BCSUBGHZ_GCRCINIRHCRCINI[15:8]
Reset value00011101
0x6BDSUBGHZ_GCRCINIRLCRCINI[7:0]
Reset value00001111
0x6BESUBGHZ_GCRCPOLRHCRCPOL[15:8]
Reset value00010000
0x6BFSUBGHZ_GCRCPOLRLCRCPOL[7:0]
Reset value00100001
0x6C0SUBGHZ_GSYNCR0SYNCWORD[63:56]
Reset value10010111
0x6C1SUBGHZ_GSYNCR1SYNCWORD[55:48]
Reset value00100011
0x6C2SUBGHZ_GSYNCR2SYNCWORD[47:40]
Reset value01010010
0x6C3SUBGHZ_GSYNCR3SYNCWORD[39:32]
Reset value00100101
0x6C4SUBGHZ_GSYNCR4SYNCWORD[31:24]
Reset value01010110
0x6C5SUBGHZ_GSYNCR5SYNCWORD[23:16]
Reset value01010011
0x6C6SUBGHZ_GSYNCR6SYNCWORD[15:8]
Reset value01100101
0x6C7SUBGHZ_GSYNCR7SYNCWORD[7:0]
Reset value01100100
0x6C8-
0x73C
ReservedReserved
0x740SUBGHZ_LSYNCRHSYNCWORD[15:8]
Reset value00010100
0x741SUBGHZ_LSYNCRSYNCWORD[7:0]
Reset value00100100
0x742-
0x818
ReservedReserved

Table 34. SUBGHZ register map and reset values (continued)

OffsetRegister name76543210
0x819SUBGHZ_RNGR3RNDATA[31:24]
Reset value00000000
0x81ASUBGHZ_RNGR2RNDATA[23:16]
Reset value00000000
0x81BSUBGHZ_RNGR1RNDATA[15:8]
Reset value00000000
0x81CSUBGHZ_RNGR0RNDATA[7:0]
Reset value00000000
0x89BSUBGHZ_AGCRSSIC0RRes.MODEMCLENGTH[2:0]Res.Res.
Reset value00000
0x820-
0x8AB
ReservedReserved
0x8ACSUBGHZ_RXGAINCRSENSI_ADJUST[5:0].PMODE[1:0]
Reset value10010100
0x8B0-
0x8E6
ReservedReserved
0x8E7SUBGHZ_PAOCPRRes.Res.OCP[5:0]
Reset value011000
0x8E8 -
0x910
ReservedReserved
0x911SUBGHZ_HSEINTRIMRRes.Res.TRIM[5:0]
Reset value010010
0x912SUBGHZ_HSEOUTTRIMRRes.Res.TRIM[5:0]
Reset value010010
0x913-
0x915
ReservedReserved
0x916SUBGHZ_SMPC0RRes.CLKDERes.Res.Res.Res.Res.Res.
Reset value0
0x917-
0x919
ReservedReserved
0x91ASUBGHZ_PCRRes.CLECLV[1:0]Res.Res.Res.Res.
Reset value101
0x91B-
0x920
ReservedReserved
0x91FSUBGHZ_REGDRVSTRRes.Res.Res.Res.TRIM[2:0]EN
Reset value1000
0x923SUBGHZ_SMPC2RRes.Res.Res.Res.Res.DRV[1:0]Res.
Reset value11

Refer to Section 2.4 for the register boundary addresses.