25. Radio IP

25.1 Overview

This section describes the Radio IP embedded in the STM32WB05xZ product. The Radio controller MR_BLE manages the Bluetooth® LE protocol with hardware addon to support some new Bluetooth specification features, and controls the RF analog module.

25.1.1 Architecture overview of the MR_BLE IP

As shown in Figure 197. RRM overview , the MR_BLE IP contains:

The MR_BLE IP supports two system clock frequencies: 16 MHz and 32 MHz.

Figure 196. MR_BLE architecture overview

MR_BLE architecture overview diagram showing internal components and external connections.

The diagram illustrates the MR_BLE architecture, enclosed in a dashed red box labeled 'MR_BLE'. On the left, an 'RF2G4 (Analog)' block connects to a 'PLLCal', 'Synth (PLL) IF', 'MOD DAC', 'Sigma Delta LUT', and 'AGC'. These connect to a 'Radio FSM' and 'Radio registers'. The 'Radio FSM' connects to a 'Radio controller' which has 'Slow clock meas' and 'interrupt' outputs ('irq_mr_syst', 'irq_rf_fsm'). The 'Radio registers' connect to a 'MUX' and 'RRM' (RRM, UDRA, APB IF, Semaphore, Virtual port). The 'MUX' connects to 'IP_BLE' (Bluetooth LE controller, Sequencer, Timers, Channel inc & remap, Antenna Switching, AES, Demodulator, Modulator). The 'IP_BLE' has 'interrupt' outputs ('irq_BLE_int1', 'irq_BLE_int2'). A 'Wakeup' block (Wakeup, Time interpolator) connects to the 'MUX' and has 'interrupt' outputs ('irq_wakeup_BLE', 'irq_wakeup_CPU'). An 'APB splitter' (APB0, APB1, APB2) connects to the 'RRM' and 'IP_BLE' and to an 'AHB2APB' block. The 'AHB2APB' connects to an 'AHB interconnect', which is part of a 'SoC Bus matrix' (indicated by a large blue double-headed arrow on the right).

MR_BLE architecture overview diagram showing internal components and external connections.

25.1.2 Global scenario for Bluetooth® LE protocol usage

The Bluetooth® LE link layer always needs a trigger event to start a sequence. This trigger event has three possible timer sources (wakeup timer, Timer1, or Timer2).

Basically, a Bluetooth sequence follows the steps described below:

  1. 1. The CPU needs to prepare in RAM (through different tables) all information needed for the coming transfer:
    • – for radio programming (channel number, reception, or transmission, calibration feature, etc.)
    • – for a packet to transmit or receive (contents, ADV, or data, encryption, etc.)
    • – for interrupt mask selection
    • – to prepare the trigger event that schedules the sequence after this one
  2. 2. Then the CPU has to program the chosen timer (except if already done through a table for timer2 inside the previous sequence).
  3. 3. Once the Bluetooth® LE link layer receives the trigger event from the programmed timer, it gets all the information in the RAM table and launches the requested transfer.
  4. 4. At the end of the sequence (and not before), the Bluetooth® LE link layer writes back in RAM tables some information, updates the status/error flags and generates an interrupt towards the CPU according to the interrupt mask programming.
  5. 5. The CPU has to treat the RAM table updated information (including packet payload after a reception) to decide what is the next wanted sequence. Then a cycle restarts from step 1.

Note:

25.1.3 Miscellaneous features: RF activity monitoring

25.1.3.1 On-going Tx sequence information (to control an external power amplifier (PA))

The MR_BLE is able to control an external power amplifier (located on the board to increase the Tx power) through a signal provided to the SoC to be connected directly on an external GPIO or to be managed with an additional logical mechanism. The external PA can be useful to extend the Tx power.

The external power amplifier components have quite a long latency to establish and consume a lot of current (several mA) which could lead to unlocking the MR_BLE PLL. For this reason, the control signal is anticipated as soon as the system knows it starts a Tx sequence and stops as soon as possible (at the same time as the internal PA).

The MR_BLE outputs a signal to the SoC, which is high as soon as a Tx sequence is requested to the radio FSM up to the return to ACTIVE2 or less state. To be more precise, the information is provided as soon as the radio FSM is starting to treat a Tx request (leaving ACTIVE2 state for EN_LDO state) and goes down as soon as the system switches off the internal PA (for example, leaving Tx state at the end of the transmission or during EN_PA in case of PLL lock fail).

The information is available in two different ways in the STM32WB05xZ:

25.1.3.2 On-going Rx sequence information (to control an external low noise amplifier (LNA))

The MR_BLE is able to control an external low noise amplifier (located on the board) through a signal provided to the SoC to be connected directly on an external GPIO or to be managed with additional logical mechanism.

The MR_BLE outputs a signal to the SoC, which is high as soon as an Rx sequence is requested to the radio FSM up to the return to ACTIVE2 or less state.

The information is available in two different ways in the STM32WB05xZ:

25.1.3.3 RF activity information

An additional signal is available on the device pin to inform either an Rx or a Tx sequence is active. This pin called RADIO_RF_ACTIVITY is a logical OR between the RADIO_TX_SEQUENCE and RADIO_RX_SEQUENCE mentioned in the two previous sections.

25.1.4 Bluetooth® LE standard 5.1 additional support

The STM32WB05xZ Radio IP supports the angle of arrival (AoA) and angle of departure (AoD) feature by managing:

In transmission, the MR_BLE is able:

In reception, the MR_BLE is able:

The SW has only to provide the slot width information if the configuration is an AoA configuration as this is the only information not available in the received frame and the antenna pattern.

The CTE/antenna switching mechanism of the MR_BLE provides to the external world a 7-bit antenna identifier (ANT_ID[6:0]) indicating the antenna number to be used.

The CTE/antenna switching feature implies:

Those new features support can be disabled by SW through the StatMach.CTEDisable bit.

25.2 Interfacing with the MR_BLE IP

The MR_BLE IP interfaces with several blocks in the system:

25.2.1 Interruption lines to the CPU

The MR_BLE IP provides several interruption lines to the CPU, issued by different sub-blocks:

Table 115. Interruption summary

Line number on SoC NVICInterrupt nameDescription
18BLE_TXRX (int_BLE_irq1)Indicate that a Bluetooth sequence occurred
19BLE_AES (int_BLE_irq2)Indicate that an AES LE privacy or manual operation ended
21RADIO_CTRL (int_mr_syst)Indicate that the slow clock measurement result is ready
22MR_BLE (irq_rrm + irq_radio_fsm)Combine information related to RRM-UDRA operations and radio FSM analog feedback (PLL lock and calibration)
23CPU_WKUP (irq_wakeup_cpu)Indicate a CPU wakeup timer match
24BLE_WKUP (irq_wakeup_ble)Indicate a wakeup timer trigger occurred on the sequencer

25.2.1.1 IP_BLE interrupt lines

irq_BLE_int1 (aka BLE_TXRX):

irq_BLE_int2 (aka BLE_AES):

See Section 25.8.3: IP_BLE interrupts for details on interrupt sources.

25.2.1.2 wakeup block interrupt lines

irq_wakeup_ble (aka BLE_WKUP):

irq_wakeup_cpu:

See Section 25.9: Wakeup block for more details.

25.2.1.3 RRM interrupt line

This interrupt line is dedicated to the RRM block. It is triggered on semaphore and UDRA sub-block activities.

See Section 25.4: Radio resource manager (RRM) for more details.

25.2.1.4 Radio controller interrupt lines

irq_rf_fsm:

irq_mr_syst:

See Section 25.7: Radio controller for more details.

25.2.2 Interface with the RAM embedded in the SoC

The MR_BLE IP is an AHB master on the bus matrix as the CPU or a DMA.

Two of its internal blocks access the RAM of the system:

Both internal blocks may need to access the RAM in parallel. An arbiter is located inside the IP.

25.2.3 Interface with the power clock and reset controllers

The MR_BLE receives several clocks from the SoC:

The fast clocks (system, 16 MHz, and 32 MHz) must be accurate when the radio is used (for the transmission/reception).

The MR_BLE IP communicates with the power controller of the system to indicate when the MR_BLE IP is ok to go to low-power modes and when it requests a wakeup.

The MR_BLE IP says it is ready to sleep when:

The MR_BLE IP also proposes an embedded always-on timer that may generate a programmed wakeup for the CPU.

25.3 Warning for users

Note:

25.4 Radio resource manager (RRM)

The Radio Resource Manager (RRM) is a hardware block managing the radio access to one unique controller at a time.

It is the block that manages the requests performed by the Bluetooth® LE link layer of the IP_BLE and the CPU to access the radio resources. The requests pass through a semaphore and only one of the two can take control of the radio at a time. The arbitration behaves as follows:

The two controllers can request access to the radio resources through a dedicated port:

The Bluetooth® LE link layer does not have access to the radio resources until it requests a token to the RRM and the RRM grants it. For the CPU, only RRM commands require to get a token, the direct APB access to the Radio registers is always possible. The token is requested by software for the CPU while it is done by hardware for the Bluetooth® LE link layer each time a timer trig event starts a sequence. Nevertheless, the firmware can release the token granted by the Bluetooth® LE link layer writing inside the CMDREG APB register. Once the requester has the token, its port is granted, and it can access the radio resources.

Figure 197. RRM overview

RRM overview diagram showing internal components and external connections.

The diagram illustrates the internal architecture of the Radio Resource Manager (RRM) and its connections to external blocks. The RRM contains several key components:

External connections include:A color legend at the bottom left defines the line colors:

RRM overview diagram showing internal components and external connections.

25.4.1 Semaphore

The semaphore grants the access to the radio resources control to the radio controller or to the CPU depending on the demand.

An arbitration system is in place to manage conflicts when a token request is raised simultaneously by the IP_BLE controller and the CPU. In this case, the arbiter:

The CPU is a virtual port and must provide the token request through an APB registers bit field (see Section 25.4.4.1: RRM register list ). The Bluetooth® LE link layer controller uses hard wired signals to communicate with the RRM and the request is managed directly by the Bluetooth® LE link layer each time a timer trig event starts a Bluetooth® LE sequence.

As soon as the IP_BLE port is granted, the Radio FSM block is informed by the semaphore that the radio is about to be used. The goal is to switch off the analog as much as possible when not used and switch it on only when needed (for power consumption)

Some interruptions are linked to the semaphore block in the RRM:

See Section 25.4.4: RRM registers .

25.4.2 UDRA

The "Unified Direct Register Access" block allows the software to prepare some commands in a command link list located in the retention RAM. Those commands execute read from and write into the radio registers.

Some interruptions are linked to the UDRA block in the RRM:

See Section 25.4.4: RRM registers for more details.

The main goal of this block is to allow the Bluetooth® LE link layer to reinitialize the radio registers after a low power mode sequence to start an RF communication while the CPU is still being booted and not yet available to manage.

Note: The read command embeds some limitations. However, the radio registers can be read directly through the APB by the CPU so the read command of the UDRA is useless.

The mapping in RAM for the commands for each port is the following:

An overview of this indirect mapping is represented in Figure 198. UDRA command list mapping in RAM (example)

Figure 198. UDRA command list mapping in RAM (example)

Diagram showing UDRA command list mapping in RAM. It illustrates the layout of RAM starting from 'Start RAM' at the top to 'End RAM' at the bottom. Key pointers include 'GlobalStatMach', 'RadioConfig' pointing to '@ GlobalStatMach.RadioConfigPtr', and several '@ {port0/1 Command list X}' entries. Arrows show the mapping of these lists into specific command slots: port0 lists 0, 1, and 2 map to the first green block; port1 list 0 maps to the blue block; port0 list 1 maps to the yellow block; and port1 list 3 maps to the purple block. A note indicates 'All @ command are aligned'.
Diagram showing UDRA command list mapping in RAM. It illustrates the layout of RAM starting from 'Start RAM' at the top to 'End RAM' at the bottom. Key pointers include 'GlobalStatMach', 'RadioConfig' pointing to '@ GlobalStatMach.RadioConfigPtr', and several '@ {port0/1 Command list X}' entries. Arrows show the mapping of these lists into specific command slots: port0 lists 0, 1, and 2 map to the first green block; port1 list 0 maps to the blue block; port0 list 1 maps to the yellow block; and port1 list 3 maps to the purple block. A note indicates 'All @ command are aligned'.

The RadioConfigPtr value is loaded by the RRM-UDRA automatically when the radio IP reset is released. If the software did not initialize this RAM address supposed to point on the command_start_list address before this first automatic load, a “reload pointer” command is available by writing 1 in the UDRA_CTRL0[0] APB register (this bit is auto-cleared immediately).

Note: The RadioConfigPtr pointer value loaded and used by the RRM-UDRA block can be read in the UDRA_RADIO_CFG_PTR APB register.

The port mapping has been defined as follows:

This leads to a command start list table as presented below:

Table 116. Command start list details

Address in RAMMeaningComments
@RadioConfigPtr(value) + 0x00port0->command0 base addressCommand requested by the Bluetooth® LE link layer on wakeup timer trigger event if RadioComListEna bit = 1 in on-going StateMach.
@RadioConfigPtr(value) + 0x04port0->command1 base addressCommand requested by the Bluetooth® LE link layer on Timer1 trigger event if RadioComListEna bit = 1 in on-going StateMach.
@RadioConfigPtr(value) + 0x08port0->command2 base addressCommand requested by the Bluetooth® LE link layer on Timer2 trigger event if RadioComListEna bit = 1 in on-going StateMach.
@RadioConfigPtr(value) + 0x0Cport1->command0 base addressVP_CPU: if the software needs to use an RRM-UDRA command to access the radio register instead of a direct access through APB.
Address in RAMMeaningComments
@RadioConfigPtr(value) + 0x10port1->command1 base addressVP_CPU: if the software needs to use a second RRM-UDRA command to access the radio register instead of a direct access through APB.
@RadioConfigPtr(value) + 0x14port1->command2 base addressVP_CPU: if the software needs to use a third RRM-UDRA command to access the radio register instead of a direct access through APB.
@RadioConfigPtr(value) + 0x18port1->command3 base addressVP_CPU: if the software needs to use a fourth RRM-UDRA command to access the radio register instead of a direct access through APB.

25.4.2.2 UDRA command format in RAM

The write and read command format are described in the following table. Note that only one radio register address is entered for a write or a read. Then, if the number of data to write/read is more than one, the address is incremented automatically by 1.

Table 117. UDRA command format in RAM

Byte numberAddress in RAMByte valueDescription
1command_base_addr0x--bit7: 0=write / 1=read
bit[6:0] = number of data to write or to read.
n = number of data for the example in this table.
2command_base_addr+18-bit addressAddress of a Radio register following the 8-bit address mapping (see Section 25.5.1: Radio register list )
3command_base_addr+21 st dataIf write command: write first 8-bit data to be written. If read command: location where the first 8-bit read datum is available.
4command_base_addr+32 nd dataOptional (depends on number of data to write/read).
If write command: write second 8-bit data to be written.
If read command: location where the second 8-bit read datum is available.
...
n+2command_base_addr+(n+1)n th dataOptional (depends on number of data to write/read). If write command: write n th 8-bit data to be written.
If read command: location where the n th 8-bit read datum is available.
n+3command_base_addr+n+20x--Optional: possible to chain other commands.
bit7: 0=write / 1=readbit
[6:0] = number of data to write or to read.
n+4command_base_addr+n+38-bit addressAddress of a radio register following the 8-bit address mapping (see )
n+5command_base_addr+n+41 st dataIf write command: write first 8-bit data to be written.
If read command: location where the first 8-bit read datum is available.
...
lastcommand_base_addr+last-10x00 / 0x80MANDATORY.
The null command (command with null length) must be added at the end of the command list. This is needed by the state machines of the UDRA to be informed they reached the end of the list.

Note: If any error information is put in the RAM command list (bad command number, lack of null command, etc.), the RRM-UDRA does not return to an IDLE state and cannot accept new commands until a reset is done on the full MR_BLE IP.

Basic examples:

  1. 1) Write AAC0_DIG_ENG=0x12 and AAC1_DIG_ENG=0x34 (grouped registers) through port1.command0:
    @port1.command0_addr = 0x02; Write 2 data
    @port1.command0_addr+1 = 0x AAC0_DIG_ENG_ADDR;
@port1.command0_addr+2 = 0x12; 1st data to write in AAC0_DIG_ENG
@port1.command0_addr+3 = 0x34; 2nd data to write in AAC1_DIG_ENG
@port1.command0_addr+4 = 0x00; null command

At the end of command execution, the 2 radio registers have been modified with a new value.

25.4.3 Direct register access

The direct register access block allows the software to access the radio registers directly through an APB access. To do a direct read or write access to the radio registers, the software just has to read/write them through the APB at address mapping described in Section 25.5.1: Radio register list .

Note: The radio registers are 8-bit only so the APB register bit field [31:8] part is padded with 0. An 8-bit address mapping column is provided to be used in the RRM UDRA command list as the address of the radio register in this specific case.

An internal arbiter manages the case of concurrent accesses on radio registers by both UDRA (executing a command) and direct register access block (on a CPU read/write APB request). The arbitration is based on a round-robin priority mechanism.

Note: The software must not write any radio registers through direct APB access if they are also modified through commands in RAM (through UDRA block). In this case, there is a risk of multi drivers in parallel and loss of coherency (no way to know which requester wrote the last one).

25.4.4 RRM registers

25.4.4.1 RRM register list

The RRM registers are accessible through the APB interface.

All non-listed addresses must be considered as RESERVED.

The RRM_BLOCKBaseAddress keyword used for all the register base address information corresponds to the RRM registers base address in the SoC when integrating the IP.

RRM_BLOCKBaseAddress is 0x6000_1400 in the STM32WB05xZ product.

Table 118. RRM registers list

Address offsetNameRWResetDescription
0x10UDRA_CTRL0RW0x00000000UDRA_CTRL0 register
0x14UDRA_IRQ_ENABLERW0x00000000UDRA_IRQ_ENABLE register
0x18UDRA_IRQ_STATUSRW0x00000000UDRA_IRQ_STATUS register
0x1CUDRA_RADIO_CFG_PTRR0x00000000UDRA_RADIO_CFG_PTR register
0x20SEMA_IRQ_ENABLERW0x00000000SEMA_IRQ_ENABLE register
0x24SEMA_IRQ_STATUSR0x00000000SEMA_IRQ_STATUS register
0x28BLE_IRQ_ENABLERW0x00000000BLE_IRQ_ENABLE register
0x2CBLE_IRQ_STATUSRW0x00000000BLE_IRQ_STATUS register
0x60VP_CPU_CMD_BUSRW0x00000000VP_CPU_CMD_BUS register
0x64VP_CPU_SEMA_BUSRW0x00000000VP_CPU_SEMA_BUS register
0x68VP_CPU_IRQ_ENABLERW0x00000000VP_CPU_IRQ_ENABLE register
0x6CVP_CPU_IRQ_STATUSRW0x00000000VP_CPU_IRQ_STATUS register

Table 119. UDRA_CTRL0 register description

BitField nameResetRWDescription
0RELOAD_RDCFGPTR0x0RWReload the radio configuration pointer from RAM.
This bit is auto-cleared by hardware.
31:1RESERVED31_10x0RReserved.

Table 120. UDRA_IRQ_ENABLE register description

BitField nameResetRWDescription
0RADIO_CFG_PTR_RELOADED0x0RWUDRA interrupt enable (reload radio config pointer).
1CMD_START0x0RWUDRA interrupt enable (command start).
2CMD_END0x0RWUDRA interrupt enable (command end).
31:3RESERVED31_30x0RReserved.

Table 121. UDRA_IRQ_STATUS register description

BitField nameResetRWDescription
0RADIO_CFG_PTR_RELOADED0x0RWOn read, returns the UDRA reload radio configuration pointer interrupt status.
Write '1' to clear IRQ status bit.
1CMD_START0x0RWOn read, returns the UDRA command start interrupt status.
Note: this flag is located at global UDRA level and is raised only at the beginning of the command list execution (not raised again at start of all sub-commands chained in the command number under execution before the NULL command).
Write '1' to clear IRQ status bit.
2CMD_END0x0RWOn read, return the UDRA command end interrupt status.
Write '1' to clear IRQ status bit.
31:3RESERVED31_30x0RReserved.

Table 122. UDRA_RADIO_CFG_PTR register description

BitField nameResetRWDescription
31:0RADIO_CONFIG_ADDRESS0x0RUDRA radio configuration address.
This field contains the value contained by the RadioConfigPtr bit field in the GlobalStatMach RAM table when the MR_BLE exits the reset state.
This field is updated after a reload configuration pointer command.

Table 123. SEMA_IRQ_ENABLE register description

BitField nameResetRWDescription
0LOCK0x0RWSemaphore locked (= one port granted) interrupt enable.
1UNLOCK0x0RWSemaphore unlocked (= no port selected) interrupt enable.
31:2RESERVED31_20x0RReserved.

Table 124. SEMA_IRQ_STATUS register description

BitField nameResetRWDescription
0LOCK0x0RWOn read, returns the semaphore locked interrupt status.
Write '1' to clear this IRQ status bit.
1UNLOCK0x0RWOn read, returns the semaphore unlocked interrupt status.
Note: this flag reacts only on Bluetooth® LE link layer token release but not on VP_CPU token release (which is useless as the SW is responsible for the action by clearing the take_req bit).
Write '1' to clear this IRQ status bit.
31:2RESERVED31_20x0RReserved.

Table 125. BLE_IRQ_ENABLE register description

BitField nameResetRWDescription
0PORT_GRANT0x0RWIP_BLE port grant interrupt enable.
1PORT_RELEASE0x0RWIP_BLE port release interrupt enable.
2RESERVED20x0RWReserved
3PORT_CMD_START0x0RWIP_BLE port command start interrupt enable.
4PORT_CMD_END0x0RWIP_BLE port command end interrupt enable.
31:5RESERVED31_50x0RReserved

Table 126. BLE_IRQ_STATUS register description

BitField nameResetRWDescription
0PORT_GRANT0x0RWIP_BLE hardware port granted interrupt status.
- 0: the IP_BLE request to semaphore is not granted.
- 1: the IP_BLE request to take the semaphore is granted: the RF registers access and the radio Tx and the radio Rx data path are selected for that controller. The port stays granted as long as it requests the token and the semaphore is not preempted by another port.
Write '1' to clear this IRQ status bit.
1PORT_RELEASE0x0RWIP_BLE hardware port released interrupt status.
When read:
- 0: the IP_BLE controller has not been released (due to take_req=1'b1).
- 1: the IP_BLE controller has been released by the semaphore due to take_req=1'b0 (requested by Bluetooth® LE link layer).
Write '1' to clear this IRQ status bit.
2RESERVED_20x0RReserved
3CMD_START0x0RWIP_BLE hardware port command start interrupt status.
When read:
- 0: the IP_BLE port command requested by the Bluetooth® LE link layer is not started.
- 1: the IP_BLE port command requested by the Bluetooth® LE link layer is started.
Note: this flag is raised at the beginning of any chained sub-command inside the command number under execution (so can be raised several times if more than one command before the NULL command).
Write '1' to clear this IRQ status bit.
4CMD_END0x0RWIP_BLE hardware port command end interrupt status.
When read:
- 0: the IP_BLE port command requested by the Bluetooth® LE link layer is not completed.
- 1: the IP_BLE port command requested by the Bluetooth® LE link layer is completed.
BitField nameResetRWDescription
Note: this flag is raised only when the UDRA reaches the NULL command (not as CMD_START).
Write '1' to clear this IRQ status bit.
31:5RESERVED31_50x0RReserved

Note: The Bluetooth® LE link layer receives the previous information directly by hardware wires and manages the sequence through them. The interrupt mechanism is there in case the CPU needs to monitor the activity between the Bluetooth® LE link layer and the RRM block.

Table 127. VP_CPU_CMD_BUS register description

BitField nameResetRWDescription
2:0COMMAND0x0RWCommand number.
3COMMAND_REQ0x0RWCPU Virtual port command request:
- 0: the RRM command request is released.
- 1: request a command to the RRM-UDRA block.
This bit is cleared by hardware once the command is ended.
31:4RESERVED31_40x0RReserved.

Table 128. VP_CPU_SEMA_BUS register description

BitField nameResetRWDescription
2:0TAKE_PRIO0x0RWSemaphore priority value (between 0 and 7) of the take request.
The higher the value, the higher priority is the request.
3TAKE_REQ0x0RWSemaphore token request:
- 0: the CPU virtual port releases the semaphore or does not request to take the RRM semaphore.
- 1: the CPU virtual port requests to take or to keep the RRM semaphore.
The SW must set this bit to request the token and reset it to 0 to release the token.
Note: the VP_CPU belongs to the token only once VP_CPU_IRQ_STATUS[0] = PORT_GRANT bit is 1 (same for PORT_RELEASE bit when TAKE_REQ bit is written to 0).
31:4RESERVED31_40x0RReserved

Table 129. VP_CPU_IRQ_ENABLE register description

BitField nameResetRWDescription
0PORT_GRANT0x0RWCPU virtual port grant interrupt enable.
1PORT_RELEASE0x0RWCPU virtual port release interrupt enable.
2RESERVED20x0RWReserved
3PORT_CMD_START0x0RWCPU virtual port command start interrupt enable.
4PORT_CMD_END0x0RWCPU virtual port command end interrupt enable.
31:5RESERVED31_50x0RReserved

Table 130. VP_CPU_IRQ_STATUS register description

BitField nameResetRWDescription
0PORT_GRANT0x0RWCPU virtual port granted interrupt status.
- 0: the CPU virtual port token request is not granted.
- 1: the CPU virtual port token request is granted by the semaphore:
• the Radio registers access through a UDRA command is possible for that port (direct APB access is not concerned, always accessible),
• prevents the Bluetooth® LE link layer from having access to the Radio Tx and the Radio Rx data path.
Write '1' to clear this IRQ status bit.
1PORT_RELEASE0x0RWCPU virtual port released interrupt status.
- 0: the CPU virtual port has not been released (due to TAKE_REQ=1'b1).
- 1: the CPU virtual port has been released by the semaphore due to TAKE_REQ=1'b0 (requested by CPU virtual port).
Write '1' to clear this IRQ status bit.
2RESERVED20x0RReserved
3CMD_START0x0RWCPU virtual port command start interrupt status.
When read:
- 0: the command requested by the CPU virtual port (port1) is not started.
- 1: the command requested by the CPU virtual port (port1) is started.
Note: this flag is raised at the beginning of any chained command inside the command number under execution (so can be raised several times if more than one command before the NULL command).
Write '1' to clear this IRQ status bit.
4CMD_END0x0RWCPU virtual port command end interrupt status.
When read:
- 0: the command requested by the CPU virtual port (port1) is not completed.
- 1: the command requested by the CPU virtual port (port1) is completed.
Note: this flag is raised only when the UDRA reaches the NULL command (not as CMD_START).
Write '1' to clear this IRQ status bit.
31:5RESERVED31_50x0RReserved

25.5 Radio registers

The Radio registers are 8-bit registers mainly used to control the RF2G4 analog IP and the Radio FSM. They also allow taking control for validation/test purposes.

They can be accessed through two different mappings:

Caution: the radio registers are used to control the analog and few modulator/demodulator features. They are not supposed to be modified directly by the user. The potential modifications are provided by STMicroelectronics in the SDK boot code.

25.5.1 Radio register list

The RF_REG_BLOCKBaseAddress keyword used for all the register base address information corresponds to the Radio registers base address decided by the SoC when integrating the IP.

RF_REG_BLOCKBaseAddress is 0x6000_1500 in the STM32WB05xZ product.

Table 131. Radio register list
Address Offset
8-bit | APB
Register nameDescriptionPage link
0x000x00AA0_DIG_USRAA0_DIG_USR register0
0x010x04AA1_DIG_USRAA1_DIG_USR register0
0x020x08AA2_DIG_USRAA2_DIG_USR register0
0x030x0CAA3_DIG_USRAA3_DIG_USR register0
0x040x10DEM_MOD_DIG_USRDEM_MOD_DIG_USR register0
0x050x14RADIO_FSM_USRRADIO_FSM_USR register0
0x060x18PHYCTRL_DIG_USRPHYCTRL_DIG_USR register0
0x120x48AFC1_DIG_ENGAFC1_DIG_ENG register0
0x150x54CR0_DIG_ENGCR0_DIG_ENG register0
0x1A0x68CR0_LRCR0_LR register0
0x1B0x6CVIT_CONF_DIG_ENGVIT_CONF_DIG_ENG register0
0x210x84LR_PD_THR_DIG_ENGLR_PD_THR_DIG_ENG register0
0x220x88LR_RSSI_THR_DIG_ENGLR_RSSI_THR_DIG_ENG register0
0x230x8CLR_AAC_THR_DIG_ENGLR_AAC_THR_DIG_ENG register0
0x2A0xA8SYNTHCAL0_DIG_ENGSYNTHCAL0_DIG_ENG register0
0x3C0xF0DTB5_DIG_ENGDTB5_DIG_ENG register0
0x520x148RXADC_ANA_USRRXADC_ANA_USR register0
0x550x154LDO_ANA_ENGLDO_ANA_ENG register0
0x5D0x174CBIAS0_ANA_ENGCBIAS0_ANA_ENG register0
0x5E0x178CBIAS1_ANA_ENGCBIAS1_ANA_ENG register0
0x600x180SYNTHCAL0_DIG_OUTSYNTHCAL0_DIG_OUT register0
0x610x184SYNTHCAL1_DIG_OUTSYNTHCAL1_DIG_OUT register0
0x620x188SYNTHCAL2_DIG_OUTSYNTHCAL2_DIG_OUT register0
0x630x18CSYNTHCAL3_DIG_OUTSYNTHCAL3_DIG_OUT register0
0x640x190SYNTHCAL4_DIG_OUTSYNTHCAL4_DIG_OUT register0
0x650x194SYNTHCAL5_DIG_OUTSYNTHCAL5_DIG_OUT register0
0x660x198FSM_STATUS_DIG_OUTFSM_STATUS_DIG_OUT register0
0x690x1A4RSSI0_DIG_OUTRSSI0_DIG_OUT register0
0x6A0x1A8RSSI1_DIG_OUTRSSI1_DIG_OUT register0
0x6B0x1ACAGC_DIG_OUTAGC_DIG_OUT register0
0x6C0x1B0DEMOD_DIG_OUTDEMOD_DIG_OUT register0
0x6F0x1BCAGC2_ANA_TSTAGC2_ANA_TST register0
0x700x1C0AGC0_DIG_ENGAGC0_DIG_ENG register0
0x710x1C4AGC1_DIG_ENGAGC1_DIG_ENG register0
0x7A0x1E8AGC10_DIG_ENGAGC10_DIG_ENG register0
0x7B0x1ECAGC11_DIG_ENGAGC11_DIG_ENG register0
0x7C0x1F0AGC12_DIG_ENGAGC12_DIG_ENG register0
0x7D0x1F4AGC13_DIG_ENGAGC13_DIG_ENG register0
0x7E0x1F8AGC14_DIG_ENGAGC14_DIG_ENG register0
Address Offset
8-bit | APB
Register nameDescriptionPage link
0x7F0x1FCAGC15_DIG_ENGAGC15_DIG_ENG register0
0x800x200AGC16_DIG_ENGAGC16_DIG_ENG register0
0x810x204AGC17_DIG_ENGAGC17_DIG_ENG register0
0x820x208AGC18_DIG_ENGAGC18_DIG_ENG register0
0x830x20CAGC19_DIG_ENGAGC19_DIG_ENG register0
0x890x224RXADC_HW_TRIM_OUTRXADC HW trimming register0
0x8A0x228CBIAS0_HW_TRIM_OUTCBIAS HW trimming register0
0x8C0x230AGC_HW_TRIM_OUTAGC antenna HW trimming register0
0x900x240ANTSW_DIG0_USRAntenna switching settings register0
0x910x244ANTSW_DIG1_USRAntenna switching settings register0
0x920x248ANTSW_DIG2_USRAntenna switching settings register0
0x930x24CANTSW_DIG3_USRAntenna switching settings register0

25.5.2 Radio registers description

Table 132. AA0_DIG_USR register description

BitField nameResetRWDescription
7:0AA_7_00xD6RWLeast significant byte of the Bluetooth LE Access Address code.
This register is (over)written by the Sequencer during 2 nd INIT step with the StatMach.accaddr[7:0] bit field.
31:8RESERVED31_80x0RReserved.

Table 133. AA1_DIG_USR register description

BitField nameResetRWDescription
7:0AA_15_80xBERWNext byte of the Bluetooth LE access address code.
This register is (over)written by the Sequencer during 2 nd INIT step with the StatMach.accaddr[15:8] bit field.
31:8RESERVED31_80x0RReserved.

Table 134. AA2_DIG_USR register description

BitField nameResetRWDescription
7:0AA_23_160x89RWNext byte of the Bluetooth LE access address code.
This register is (over)written by the Sequencer during 2 nd INIT step with the StatMach.accaddr[23:16] bit field.
31:8RESERVED31_80x0RReserved.

Table 135. AA3_DIG_USR register description

BitField nameResetRWDescription
7:0AA_31_240x8ERWNext byte of the Bluetooth LE access address code.
This register is (over)written by the Sequencer during 2 nd INIT step with the StatMach.accaddr[31:24] bit field.
31:8RESERVED31_80x0RReserved.

Table 136. DEM_MOD_DIG_USR register description

BitField nameResetRWDescription
0RESERVED00x0RReserved.
7:1CHANNEL_NUM0x13RWIndex for internal lock-up table in which the synthesizer setup is contained.
Formula for programmed frequency is: \( 2402 + (\text{CHANNEL\_NUM} \times 2) \) .
Default value (0x13=19) corresponds to the Bluetooth LE RF channel 19:
\( 2402 + (19 \times 2) = 2440 \text{ MHz} \) .
This bit field is (over)written by the Sequencer during the 1 st INIT. The value copied here is the output of the channel Incr and Hopping hardware block.
Note: This bit field is used to generate the physical frequency on the antenna.
31:8RESERVED31_80x0RReserved.

Table 137. RADIO_FSM_USR register description

BitField nameResetRWDescription
0RESERVED00x0RReserved.
1EN_CALIB_CBP0x0RWCBP calibration enable bit.
This bit is (over)written by the Bluetooth LE Sequencer with the TxRxPack.CalReq bit during the 1 st INIT step.
Note: Both EN_CALIB_xx must be set or reset together (mixed configuration not recommended).
2EN_CALIB_SYNTH0x1RWSYNTH calibration enable bit.
This bit is (over)written by the Bluetooth LE Sequencer with the TxRxPack.CalReq bit during the 1 st INIT step.
7:3PA_POWER0x0RWPA power coefficient.
This bit is (over)written by the Bluetooth LE Sequencer with the StatMach.PAPower bit field during the 1 st INIT step.
31:8RESERVED31_80x0RReserved.

Table 138. PHYCTRL_DIG_USR register description

BitField nameResetRWDescription
2:0RXTXPHY0x0RWRXTXPHY selection.
This bit field is (over)written by the Bluetooth LE Sequencer during the 1 st INIT using the StatMach.RxPhy[2:0] or StatMach.TxPhy[2:0], depending on whether the transfer is a reception or a transmission.
- 000: uncoded PHY 1 Mb/s
- 001: uncoded PHY 2 Mb/s
- 100: coded PHY S=8 1 Mb/s
- 110: coded PHY S=2 1 Mb/s
31:3RESERVED31_30x0RReserved.

Table 139. AFC1_DIG_ENG register description

BitField nameResetRWDescription
3:0AFC_DELAY_AFTER0x4RWSet the decay factor of the AFC loop after Access Address detection.
7:4AFC_DELAY_BEFORE0x4RWSet the decay factor of the AFC loop before Access Address detection .
31:8RESERVED31_80x0RReserved.

Table 140. CR0_DIG_ENG register description

BitField nameResetRWDescription
3:0CR_GAIN_AFTER0x4RWSet the gain of the clock recovery loop before Access Address detection when the Coded PHY is in use
7:4CR_GAIN_BEFORE0x4RWSet the gain of the clock recovery loop after Access Address detection when the Coded PHY is in use
31:8RESERVED31_80x0RReserved.
Table 141. CR0_LR register description
BitField nameResetRWDescription
3:0CR_LR_GAIN_AFTER0x6RWSet the gain of the clock recovery loop after Access Address detection when the Coded PHY is in use
7:4CR_LR_GAIN_BEFORE0x6RWSet the gain of the clock recovery loop before Access Address detection when the Coded PHY is in use
31:8RESERVED31_80x0RReserved.
Table 142. VIT_CONF_DIG_ENG register description
BitField nameResetRWDescription
0VIT_EN0x0RWVIT_EN: Viterbi enable
0: Viterbi is disabled
1: Viterbi is enabled
1RESERVED_10x0RWReserved
7:2SPARE0x0RWSpare
31:8RESERVED31_80x0RReserved
Table 143. LR_PD_THR_DIG_ENG register description
BitField nameResetRWDescription
7:0LR_PD_THR0x50RWPreamble detect threshold value.
31:8RESERVED31_80x0RReserved.
Table 144. LR_RSSI_THR_DIG_ENG register description
BitField nameResetRWDescription
7:0LR_RSSI_THR0x1BRWRSSI or peak threshold value.
31:8RESERVED31_80x0RReserved.
Table 145. LR_AAC_THR_DIG_ENG register description
BitField nameResetRWDescription
7:0LR_AAC_THR0x38RWAddress coded correlation threshold.
31:8RESERVED31_80x0RReserved.
Table 146. SYNTHCAL0_DIG_ENG register description
Bit fieldField nameResetRWDescription
3:0SYNTHCAL_DEBUG_BUS_SEL0x0RWFor debug purposes. Program 0xC to get the PLL calibration reason in SYNTHCAL3_DIG_OUT.
5:4RESERVED5_40x0RWReserved.
7:6SYNTH_IF_FREQ_CAL0x0RWDefine the frequency applied on the PLL during calibration phase.
  • 00 (default): calibration is done between Rx and Tx frequencies (at freq_channel – 0.8MHz)
  • 01: calibration is done at Tx frequency (at freq_channel)
  • 10: calibration is done at Rx frequency (at freq_channel – 1.6 MHz)
  • 11: reserved
31:8RESERVED31_80x0RReserved.
Table 147. DTB5_DIG_ENG register description
BitField nameResetRWDescription
0RXTX_START_SEL0x0RWIt enables the possibility to control some signals by the other register bits instead of system design:
0: the Radio FSM is controlled by the signals generated by the RRM and Sequencer
1: the Radio FSM is controlled by the bits of this register.
1TX_ACTIVE0x0RWForce TX_ACTIVE signal.
2RX_ACTIVE0x0RWForce RX_ACTIVE signal.
3INITIALIZE0x0RWForce INITIALIZE signal (emulate a token request of the IP_BLE).
4PORT_SELECTED_EN0x0RWEnable port selection.
5PORT_SELECTED_00x0RWForce port_selected[0] signal.
31:6RESERVED31_60x0RReserved.
Table 148. RXADC_ANA_USR register description
BitField nameResetRWDescription
2:0RFD_RXADC_DELAYTRIM_I0x3RWADC loop delay control bits for I channel to apply when SW overload is enabled
5:3RFD_RXADC_DELAYTRIM_Q0x3RWADC loop delay control bits for Q channel to apply when SW overload is enabled
6RXADC_DELAYTRIM_I_TST_SEL0x0RWEnable the SW overload on RXADX delay trimming.
0: trimming applied on the analog block are the hardware loaded ones
1: trimming applied on the analog block are provided by the RFD_RXADC_DELAYTRIM_I[2:0] bit field (SW values)
7RXADC_DELAYTRIM_Q_TST_SEL0x0RWEnable the SW overload on RXADX delay trimming.
0: trimming applied on the analog block are the hardware loaded ones
1: trimming applied on the analog block are provided by the RFD_RXADC_DELAYTRIM_Q[2:0] bit field (SW values)
31:8RESERVED31_80x0RReserved.
Table 149. LDO_ANA_ENG register description
BitField nameResetRWDescription
0RFD_RF_REG_BYPASS0x0RWRF_REG level bypass mode:
- 0: bypass mode disabled
- 1: RF_REG in bypass mode
1RFD_LDO_TRANSFO_BYPASS0x0RWVDD level bypass mode
- 0: bypass mode disabled
- 1: LDO in bypass mode
31:2RESERVED31_20x0RReserved.
Table 150. CBIAS0_ANA_ENG register description
BitField nameResetRWDescription
3:0RFD_CBIAS_IBIAS_TRIM0x8RWIbias current trimming to apply when SW overload is enabled
7:4RFD_CBIAS_IPTAT_TRIM0x8RWIbias current trimming to apply when SW overload is enabled
31:8RESERVED31_80x0RReserved.
Table 151. CBIAS1_ANA_ENG register description
BitField nameResetRWDescription
4:0RESERVED4_00x0RReserved.
6:5SPARE0x0RReserved.
7CBIAS0_TRIM_TST_SEL0x0RWEnable the SW overload on the CBIAS IPTAT and IBIAS trimming:
- 0: trimming applied on the analog block are the hardware loaded ones
- 1: trimming applied on the analog block are provided by the CBIAS0_ANA_ENG bit fields (SW values).
31:8RESERVED31_80x0RReserved.
Table 152. SYNTHCAL0_DIG_OUT register description
BitField nameResetRWDescription
6:0VCO_CALAMP_OUT_6_00x0RVCO CALAMP value.
31:7RESERVED31_70x0RReserved.
Table 153. SYNTHCAL1_DIG_OUT register description
BitField nameResetRWDescription
3:0VCO_CALAMP_OUT_10_70x1RVCO CALAMP value.
1:4RESERVED31_40x0RReserved.
Table 154. SYNTHCAL2_DIG_OUT register description
BitField nameResetRWDescription
6:0VCO_CALFREQ_OUT0x40RVCO CALFREQ value.
31:7RESERVED31_70x0RReserved.

Table 155. SYNTHCAL3_DIG_OUT register description

BitField nameResetRWDescription
7:0SYNTHCAL_DEBUG_BUS0x0RCalibration debug bus.
Provide PLL calibration error details when SYNTHCAL0_DIG_ENG = 0xC:
- bit[7:4]: 0000
- bit3: CAL_ERROR
- bit2: CALAMP_ERROR
- bit1: CALFREQ_ERROR
- bit0: CALKVCO_ERROR
31:8RESERVED31_80x0RReserved.

Table 156. SYNTHCAL4_DIG_OUT register description

BitField nameResetRWDescription
5:0MOD_REF_DAC_WORD_OUT0x18RCalibration word.
7:6RESERVED7_60x0RReserved.
31:8RESERVED31_80x0RReserved.

Table 157. . SYNTHCAL5_DIG_OUT register description

BitField nameResetRWDescription
3:0CBP_CALIB_WORD0x7RCBP calibration word.
31:4RESERVED31_40x0RReserved.

Table 158. FSM_STATUS_DIG_OUT register description

BitField nameResetRWDescription
4:0STATUS0x0RSTATUS: RF FSM state:
- 00000: IDLE
- 00001: ACTIVE1
- 00010: ENA_RF_REG
- 00011: ENA_CURR
- 00100: ACTIVE2
- 00101 to 01111: Not used
- 10000: ENA_TRANSFO_LDO
- 10001: SYNTH_SETUP
- 10010: CALIB10
- 10011: CALIB01
- 10100: CALIB11
- 10101: LOCKRXTX
- 10110: Not used
- 10111: Not used
- 11000: EN_RX
- 11001: EN_PA
- 11010: Rx
- 11011: RX_802_RESET
- 11100: Tx
- 11101: Not used
- 11110: PA_DWN_ANA
- 11111: Not used
6:5RESERVED6_50x0RReserved.
7SYNTH_CAL_ERROR0x0RPLL calibration error.
31:8RESERVED31_80x0RReserved.

Table 159. RSSI0_DIG_OUT register description

BitField nameResetRWDescription
7:0RSSI_MEAS_OUT_7_00x8RMeasure of the received signal strength.
31:8RESERVED31_80x0RReserved.

Table 160. RSSI1_DIG_OUT register description

BitField nameResetRWDescription
7:0RSSI_MEAS_OUT_15_80x8RMeasure of the received signal strength.
31:8RESERVED31_80x0RReserved.

Table 161. AGC_DIG_OUT register description

BitField nameResetRWDescription
3:0AGC_ATT_OUT0x0RAGC attenuation value.
31:4RESERVED31_40x0RReserved.

Table 162. DEMOD_DIG_OUT register description

BitField nameResetRWDescription
1:0CI_FIELD0x0RCI field
2AAC_FOUND0x0Raac_found
3PD_FOUND0x0Rpd_found
4RX_END0x0Rrx_end
31:5RESERVED31_50x0RReserved.

Table 163. AGC2_ANA_TST register description

BitField nameResetRWDescription
0AGC2_ANA_TST_SEL0x0RWSelection
- 0: default value is 0 (normal mode): the AGC antenna trimming value comes from the SoC integrating the MR_BLE IP
- 1: forced by this register (test mode): the AGC antenna trim value comes from the AGC2_ANA_TST[3:1] bit field value.
3:1AGC_ANTENNAE_USR_TRIM0x0RWAGC trimming.
31:4RESERVED31_40x0RReserved.

Table 164. AGC0_DIG_ENG register description

BitField nameResetRWDescription
5:0AGC_THR_HIGH0xARWHigh AGC threshold.
6AGC_ENABLE0x0RWEnable AGC.
31:7RESERVED31_70x0RReserved.

Table 165. AGC1_DIG_ENG register description

BitField nameResetRWDescription
5:0AGC_THR_LOW_60x04RWLow threshold for 6dB steps.
6AGC_AUTOLOCK0x0RWAGC locks when level is steady between high threshold and lock threshold.
7AGC_LOCK_SYNC0x0RWAGC locks when Access Address is detected (recommended).
31:8RESERVED31_80x0RReserved.

Table 166. AGC10_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_00x0RWMapping for AGC step 0.
31:6RESERVED31_60x0RReserved.

Table 167. AGC11_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_10x10RWMapping for AGC step 1.
31:6RESERVED31_60x0RReserved.

Table 168. AGC12_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_20x0RWMapping for AGC step 2.
31:6RESERVED31_60x0RReserved.

Table 169. AGC13_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_30x10RWMapping for AGC step 3.
31:6RESERVED31_60x0RReserved.

Table 170. AGC14_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_40x18RWMapping for AGC step 4.
31:6RESERVED31_60x0RReserved.

Table 171. AGC15_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_50x19RWMapping for AGC step 5.
31:6RESERVED31_60x0RReserved.

Table 172. AGC16_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_60x1ARWMapping for AGC step 6.
31:6RESERVED31_60x0RReserved.

Table 173. AGC17_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_70x1BRWMapping for AGC step 7.
31:6RESERVED31_60x0RReserved.

Table 174. AGC18_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_80x1CRWMapping for AGC step 8.
31:6RESERVED31_60x0RReserved.

Table 175. AGC19_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_90x1DRWMapping for AGC step 9.
31:6RESERVED31_60x0RReserved.
Table 176. RXADC_HW_TRIM_OUT register description
BitField nameResetRWDescription
2:0HW_RXADC_DELAYTRIM_I0x3RControl bits of the Rx ADC loop delay for I channel (provided by the hardware trimming, automatically loaded on POR).
5:3HW_RXADC_DELAYTRIM_Q0x3RControl bits of the Rx ADC loop delay for Q channel (provided by the hardware trimming, automatically loaded on POR).
31:6RESERVED31_60x0RReserved.
Table 177. CBIAS0_HW_TRIM_OUT register description
BitField nameResetRWDescription
3:0HW_CBIAS_IBIAS_TRIM0x8RCBIAS current trimming (provided by the hardware trimming, automatically loaded on POR).
7:4HW_CBIAS_IPTAT_TRIM0x7RCBIAS current trimming (provided by the hardware trimming, automatically loaded on POR).
31:8RESERVED31_80x0RReserved.
Table 178. AGC_HW_TRIM_OUT register description
BitField nameResetRWDescription
0RESERVED0x0RReserved.
3:1HW_AGC_ANTENNAE_TRIM0x3RAGC trim value (provided by the hardware trimming, automatically loaded on POR).
Note: This value depends on the RF BOM on the board. Value provided by engineering is based on a dedicated BOM and must be overloaded by SW if the user selects/defines another BOM.
31:4RESERVED31_40x0RReserved.
Table 179. ANTSW0_DIG_USR register description
BitField nameResetRWDescription
7:0RX_TIME_TO_SAMPLE0x1CRWSpecifies the exact timing of the first I/Q sampling in the reference period.
Time unit is 250 ns.
Note: the value of this register is an offset to apply to a hard-coded 4.5 µs delay. The global delay (4.5 µs + programmable offset) is started from an internal trigger occurring before the Guard period on the air. The RX_TIME_TO_SAMPLE and RX_TIME_TO_SWITCH share the same internal trigger.
31:8RESERVED0x0RReserved.
Table 180. ANTSW1_DIG_USR register description
BitField nameResetRWDescription
7:0RX_TIME_TO_SWITCH0xBRWSpecifies the exact timing of the antenna switching at receiver level (in AoA).
Time unit is 250 ns.
Note: the timing defined in this register is a delay from an internal trigger occurring before the Guard period on the air. The RX_TIME_TO_SAMPLE and RX_TIME_TO_SWITCH share the same internal trigger.
31:8RESERVED0x0RReserved.
Table 181. ANTSW2_DIG_USR register description
BitField nameResetRWDescription
7:0TX_TIME_TO_SWITCH0x29RWSpecifies the exact timing of the antenna switching during transmission at LE_1M baud rate (in AoD).
BitField nameResetRWDescription
Time unit is 125 ns.
Note: the timing defined in this register is a delay from an internal trigger occurring before the Guard period on the air (when transmit block starts sending the CTE to the modulator).
31:8RESERVED0x0RReserved.

Table 182. ANTSW3_DIG_USR register description

BitField nameResetRWDescription
7:0TX_TIME_TO_SWITCH_2M0x23RWSpecifies the exact timing of the antenna switching during transmission at LE_2M baud rate (in AoD).
Time unit is 125 ns.
Note: the timing defined in this register is a delay from an internal trigger occurring before the Guard period on the air (when transmit block starts sending the CTE to the modulator).
The modulator latency differs between 1 Mb/s and 2 Mb/s baud rate so 2 different delays need to be managed.
31:8RESERVED31_80x0RReserved.

25.5.3 Trimming information

The MR_BLE loads automatically hardware trimming information located in the flash memory of the SoC.

The trimmed information is:

Those trimming values are automatically loaded by the hardware on reset and low-power mode exit.

The loaded values are readable in dedicated radio registers (xx_HW_TRIM_OUT).

The AGC user trimming can be impacted by the BOM on the user board and may need to be overloaded. The SW can overload / replace the hardware value.

The AGC trimming consists of 1 piece of information:

The hardware values are reloaded on any reset and low-power mode exit.

The SW values must be re-written after any reset or low-power mode.

25.6 Radio FSM

The Radio FSM manages the analog radio block startup and stop sequences depending on requesting RF transfer.

25.6.1 Radio FSM sequences

This section lists the main steps in the radio FSM sequence.

Figure 199. Radio FSM overview provides an overview of the RF FSM states sequence.

Some transitions are triggered by hardware signals, but others are managed through timeout.

Section 25.6.2: Radio FSM states overview lists the different timeouts.

Figure 199. Radio FSM overview

Radio FSM overview state machine diagram showing states IDLE, ACTIVE1, ENA_RF_REG, ENA_CURR, ACTIVE2, ENA_TRANSFO_LDO, SYNTH_SETUP, CALIB11, LOCKRXTX, EN_RX, RX, EN_PA, TX, and PA_DWN_ANA with transitions and conditions.
stateDiagram-v2
    [*] --> IDLE : padresetn
    IDLE --> ACTIVE1 : Initialize = Bluetooth LE port token request
    ACTIVE1 --> ENA_RF_REG : port_selected_en (granted) & SoC clock accurate
    ACTIVE1 --> IDLE : ~initialize
    ENA_RF_REG --> ENA_CURR : RFREG_timeout (25us)
    ENA_CURR --> ACTIVE2 : ena_curr_timeout (20us)
    ENA_CURR --> ACTIVE1 : ~initialize | ~port_selected_en | ~SoC clock accurate
    ACTIVE2 --> ENA_TRANSFO_LDO : TX request active
    ENA_TRANSFO_LDO --> SYNTH_SETUP : transfo_ldo_timeout (0us)
    ENA_TRANSFO_LDO --> ACTIVE2 : RX request active
    SYNTH_SETUP --> CALIB11 : pll calib requested
    CALIB11 --> LOCKRXTX : end of pll calib
    CALIB11 --> ACTIVE2 : No pll calib requested
    LOCKRXTX --> EN_RX : RX req active & exit_lockrxtx
    LOCKRXTX --> EN_PA : TX req active & exit_lockrxtx
    EN_RX --> RX : en_rx_timeout (10us)
    EN_RX --> ACTIVE2 : ~RX req active
    RX --> ACTIVE2 : ~RX req active
    EN_PA --> TX : PA ready
    TX --> PA_DWN_ANA : ~TX req active
    TX --> ACTIVE2 : pll unlock
    PA_DWN_ANA --> ACTIVE2
    ACTIVE2 --> ENA_TRANSFO_LDO : (~TX req active & ~RX req active) | (~pll lock after LOCKRXTX)
  
Radio FSM overview state machine diagram showing states IDLE, ACTIVE1, ENA_RF_REG, ENA_CURR, ACTIVE2, ENA_TRANSFO_LDO, SYNTH_SETUP, CALIB11, LOCKRXTX, EN_RX, RX, EN_PA, TX, and PA_DWN_ANA with transitions and conditions.

25.6.2 Radio FSM states overview

The table below lists, for each state, the exit condition and the duration in the state when there is a deterministic one.

Table 183. Radio FSM states summary (including exit conditions and timings)
Radio FSM stateState descriptionCondition to exit and duration in the state
IDLENo RF activity requested: the analog RF IP is OFFThe Bluetooth® LE link layer requests a token to the RRM semaphore
ACTIVE1Wait for port granted and SoC accurate clock indicationBoth hardware conditions are fulfilled
ENA_RF_REGEnable the RF LDOTimeout = 25 µs
ENA_CURREnable the reference current block inside the RF2G4Timeout = 20 µs
ACTIVE2This state confirms that all clock and power conditions are OK to accept an RF transfer requestTx or Rx request occurrence
ENA_TRANSFO_LDOEnable the LDO for the power amplifierTimeout = 0 µs
SYNTH_SETUPStart the RF PLL blockNo timeout. Exit immediately (1 MR_BLE clock cycle duration)
CALIB11Start the PLL calibration blockEnd of calibration hardware information
LOCKRXTX (1)Wait for RF PLL lockTimeout =
• 40 µs when no PLL calibration
• 80 µs when PLL calibration
EN_RXEnable the analog Rx chainTimeout = 10 µs
RxRadio is in reception modeEnd of Rx event (Rx timeout, Rx done...)
EN_PA (1)Start the power ramp-up sequence (8 steps) up to targeted power on the antennaReady signal informing targeted Tx power is reached on the antenna (8 steps of 1.5 µs = 12 µs)
TxRadio is in transmission modeEnd of Tx event (Tx done or skipped)
PA_DWN_ANADisable the power amplifier blockTimeout = 5 µs

1. The radio FSM may abort the sequence and return to ACTIVE2 from those two states depending on RF PLL lock information:

If the PLL unlock event occurs outside those two states, the radio FSM does not interfere. The SW is informed through an interrupt and is in charge of managing the situation.

The current state information is available in the FSM_STATUS_DIG_OUT radio register accessible by direct APB access (see Section 25.5.1: Radio register list ).

The radio FSM uses timeout to exit states linked to analog block settlement to guarantee a deterministic duration between ACTIVE2 and Tx or Rx state at any occurrence. This is mandatory to be able to fit with Bluetooth protocol timings requirements in a peer-to-peer communication flow.

Those deterministic durations are presented in the table below.

Table 184. ACTIVE2 to Tx or Rx state duration
SequenceDurationComments
ACTIVE2 → Tx with RF PLL calibration92 µsTo be used when the Tx is done on a new frequency (channel) versus the previous RF transfer
ACTIVE2 → Tx without RF PLL calibration52 µsTo be used when the Tx is done on the same frequency (channel) as the previous RF transfer
ACTIVE2 → Rx with RF PLL calibration90 µsTo be used when the Rx is done on a new frequency (channel) versus the previous RF transfer
ACTIVE2 → Rx without RF PLL calibration50 µsTo be used when the Rx is done on the same frequency (channel) as the previous RF transfer

25.6.3 Radio FSM interrupts

The Radio FSM provides a dedicated interrupt output signal to the system.

The Radio FSM generates 6 (2 are reserved) individually maskable interrupts grouped in an RfFsm_event[5:0] list:

All the sources are combined into a single signal to be connected outside the IP_BLE to the interrupt controller of the SoC (see Table 115. Interruption summary for mapping in STM32WB05xZ).

The interrupts can be enabled/disabled individually through the radio controller APB registers:

See Section 25.7.3: Radio controller registers for more details.

25.7 Radio controller

The radio controller is a small block in charge of two features:

25.7.1 Slow clock measurement

The radio controller contains a block dedicated to the slow clock measurement.

This measurement:

The result provided by this block is both a period and a frequency information (in two separate results registers). The software can program the window of measurement (in slow clock cycle number) and the period result is provided in 16 MHz half-period unit.

25.7.2 Radio FSM interrupt management

During the sequences, the Radio FSM generates some interruptions to monitor some unexpected behavior at analog level. As the Radio FSM block does not have any APB interface, the interrupt control and status flags are managed inside the radio controller block through APB registers:

See Section 25.6.3: Radio FSM interrupts for more details on interrupt root causes.

25.7.3 Radio controller registers

25.7.3.1 Radio controller register list

The RADIO_CONTROL_BLOCKBaseAddress keyword used for all the register base address information corresponds to the Radio Controller registers base address decided by the SoC when integrating the IP.

Note: RADIO_CONTROL_BLOCKBaseAddress is 0x6000_1000 in the STM32WB05xZ product.

Table 185. Radio Controller registers list

Address offsetNameRWResetDescription
0x00RADIO_CONTROL_IDR0x00001000MR_BLE ID/version register
0x04CLK32COUNT_REGRW0x00000017Window length register
0x08CLK32PERIOD_REGR0x00000000Slow clock period register
0x0CCLK32FREQUENCY_REGR0x00000000Slow clock frequency register
0x10RADIO_CONTROL_IRQ_STATUSRW0x00000000Radio controller interrupt status register
0x14RADIO_CONTROL_IRQ_ENABLERW0x00000000Radio controller interrupt control register

25.7.3.2 Radio controller registers

Table 186. RADIO_CONTROL_ID register description

BitField nameResetRWDescription
31:16RESERVED31_160x0RReserved
15:12PRODUCT0x02RIncremented on major features add-on like new Bluetooth® LE SIG version support
11:8VERSION0x1RCut number
7:4REVISION0x0RIncremented for metal fix version
3:0RESERVED3_00x0RReserved

Table 187. CLK32COUNT_REG register description

BitField nameResetRWDescription
8:0SLOW_COUNT0x17RW

Program the window length (in slow clock period) for slow clock measurement.
Slow clock is measured in a window of SLOW_COUNT+1 slow clock cycles.

Note:

  • - when programming 0xFF, the window is 256 slow clock cycles
  • - to obtain a good behavior, using not less than 0x17 is recommended
31:9RESERVED31_90x0RReserved
Table 188. CLK32PERIOD_REG register description
BitField nameResetRWDescription
18:0SLOW_PERIOD0x0RWIndicates slow clock period information. The result provided in this field corresponds to the length of SLOW_COUNT periods of the slow clock (32 kHz) measured in 16 MHz half-period unit.
Example:
if SLOW_COUNT=0x17=23d and SLOW_PERIOD=24000d
-> slow clock period = \( \text{SLOW\_PERIOD} / (16e6 \times 2 \times (\text{SLOW\_COUNT}+1)) \)
= \( 24000 / (16e6 \times 2 \times 24) = 31.25e-6 \)
A new calculation can be launched by writing zero in the CLK32PERIOD register. In this case, the time window uses the value programmed in the SLOW_COUNT field.
31:19RESERVED31_190x0RReserved
Table 189. CLK32FREQUENCY_REG register description
BitField nameResetRWDescription
26:0SLOW_FREQUENCY0x0RValue equal to \( (2^{39} / \text{SLOW\_PERIOD}) \) .
31:27RESERVED31_270x0RReserved
Table 190. RADIO_CONTROL_IRQ_STATUS register description
BitField nameResetRWDescription
0SLOW_CLK_IRQ0x0RWSlow clock measurement end of calculation interrupt status
When read:
- 0: no pending interrupt
- 1: pending interrupt: slow clock period/frequency values are available.
Write '1' to clear the interrupt.
7:1RESERVED7_10x0RReserved
13:8RADIO_FSM_IRQ0x0RWRadio FSM interrupt status (aka RfFsm_event_irq).
-0: no pending interrupt
-1: pending interrupt
RfFsm_event [5] = PLL calibration error
RfFsm_event [4] = PLL lock failed
RfFsm_event [3] = PLL unlock detection
RfFsm_event [2] = reserved
RfFsm_event [1] = reserved
RfFsm_event [0] = lock_timeout
Write '1' to clear the interrupt
31:14RESERVED31_140x0RReserved
Table 191. RADIO_CONTROL_IRQ_ENABLE register description
BitField nameResetRWDescription
0SLOW_CLK_IRQ_MASK0x0RWMask slow clock measurement interrupt
0: interrupt disabled
1: interrupt enabled
7:1RESERVED7_10x0RReserved
13:8RADIO_FSM_IRQ_MASK0x0RWMask for each RfFsm_event (Radio FSM) interrupt.
- 0: Interrupt disabled
- 1: Interrupt enabled.
31:14RESERVED31_140x0RReserved

25.8 IP_BLE

The Bluetooth LE link layer of the IP_BLE is a programmable automate which can act as a central or a peripheral.

The Bluetooth LE link layer embeds a Sequencer which automatically reads data and job request from link tables and link lists prepared in advance by the CPU in retention RAM. This allows the Bluetooth LE link layer to start a Bluetooth LE reception or transmission directly at low-power mode exit while the CPU is still booting and not yet able to manage any firmware action.

25.8.1 Overview

The IP_BLE embeds:

The Bluetooth LE link layer manages:

The Bluetooth LE link layer embeds a Sequencer which uses information located in RAM tables to manage the RF transfer and part of the Bluetooth LE protocol. Those RAM tables need to be prepared by the SW.

In general, the process to generate a Bluetooth LE transfer is the following:

Once RAM write-back is over, the Sequencer sends an interrupt to the CPU, related to interrupt mask programmed by the CPU (through the RAM table).

The Sequencer needs a trigger event to start any action.

Then the Sequencer manages a transmission or reception (or no) sequence depending on the RAM table content it reads.

25.8.2.1 Possible trigger timers for the Sequencer

Three different timers can trigger a Bluetooth LE link layer sequence:

1. Wakeup timer event

2. Timer1 timer

3. Timer2 timer

Ways to manage those 3 timers:

The 3 timers are managed (enabled/disabled) in a different way. The goal of the section below is to explain how to manage according to the use-case.

Each timer is one-shot. This means once it expires, it stops and the software has to reprogram/re-enable it for a new sequence.

Furthermore, as there is no mechanism to prevent more than one timer to be active at the same time, the software must ensure it does not start a timer while another one is already on-going for the next sequence.

Here is a summary of the enable/disable method for each timer:

Note:

25.8.2.2 Bluetooth LE sequence description

The Bluetooth LE sequence starts on the trigger event (from the wakeup timer or the Timer1 or the Timer2). The sequence is managed in three mains phases:

At the end of those phases, an interrupt (if at least one active source enabled) is generated to the CPU.

Note: the status flags and potential associated interrupt are set only at the end of the sequence and not in real time when the event that generates them occurs.

Note: the STATUSRREG.SEQDONE flag (and INTERRUPT1REG.SEQDONE if enabled in the GlobalStatMach table) is always raised when the Sequencer exits a sequence started by a trig event, whatever the process it followed (exit on error at any steps or run up to the end without problems). For this reason, this specific flag is not mentioned/repeated each time in this section.

The first RAM access done by the Sequencer on any trigger event is to get the GlobalStatMach word 0x01 to check the active bit to know if the parameters the Sequencer is about to read in the RAM table for the 1st INIT phase can be considered as ready and up to date.

If the active bit is low, the sequence stops, and the only actions done are:

If the GlobalStatMach.Active bit is set, then the Sequencer starts the initialization phase.

Note: an automatic Active bit auto clear during context saving phase of the sequence can be enabled through the ChkFlagAutoClearEna bit in the GlobalStatMach. This avoids unexpected Tx/Rx due to Sequencer trigger event while the SW did not update the RAM tables (kind of SW acknowledge to allow the next transfer).

The figure below provides an overview of the Sequencer steps and control versus other blocks.

Figure 200. Sequencer steps overview

Timing diagram showing the sequence of events for a Bluetooth LE sequence. It includes rows for Timer Trig event, Sequencer steps (IDLE, INITIALIZATION, TX/RX, CONTEXT SAVING, IDLE), Sequencer AHB R/W, token request to RRM semaphore, TX/RX request to Radio FSM, Data TX/RX activity start pulse, End of TX/RX done pulse, and irq_BLE_int1 aka BLE_TXRX. The INITIALIZATION phase is further divided into 1st INIT, 2nd INIT, and DATA INIT. Timing markers include InitDelay, Tx/RcvDelayChk, ConfigEndDur, and Txdata ReadyChk.
Timing diagram showing the sequence of events for a Bluetooth LE sequence. It includes rows for Timer Trig event, Sequencer steps (IDLE, INITIALIZATION, TX/RX, CONTEXT SAVING, IDLE), Sequencer AHB R/W, token request to RRM semaphore, TX/RX request to Radio FSM, Data TX/RX activity start pulse, End of TX/RX done pulse, and irq_BLE_int1 aka BLE_TXRX. The INITIALIZATION phase is further divided into 1st INIT, 2nd INIT, and DATA INIT. Timing markers include InitDelay, Tx/RcvDelayChk, ConfigEndDur, and Txdata ReadyChk.
25.8.2.2.1 First initialization phase

During the first initialization phase, the Sequencer only reads the minimum information it needs in the RAM table to be able to start the Radio FSM for a reception or a transmission at the end of this phase.

The Sequencer launches up to 3 parallel tasks:

  1. 1. Set (or maintain if KeepSemaReq bit was set in the TxRxPack RAM table of the previous sequence) the take_req signal toward the RRM semaphore block to request/keep the token to access the radio resources.
  2. 2. If the RadioComListEna bit is set in the current StatMach table, send a command to the RRM UDRA:
    • – Command 0 if trig event is the Wakeup timer
    • – Command 1 if trig event is the Timer1
    • – Command 2 if the trig event is the Timer2.
  3. 3. Get the minimum information needed to be able to start the Radio FSM (transmission or reception, channel number, PLL calibration requested or not, etc.).

At the end, this task also computes the channel number through the channel incrementer hardware block if requested and writes few radio registers (MOD_DEM_DIG_USR, RADIO_FSM_USR and PHYCTRL_DIG_USR) according to information from the RAM tables.

This first initialization step ends on a timeout defined by a bit field in the GlobalStatMach:

Note: despite the wakeup trigger event to start the sequence being based on a slow clock granularity, typ. 32 kHz (as the trigger occurs at BLUE_WAKEUP_TIME[31:4]), the Sequencer waits until the interpolate time is BLUE_WAKEUP_TIME[31:0] + WakeUpInitDelay to exit the 1 st INIT step which means the 512 kHz granularity is respected.

InitDelay is used as a generic name for this duration to simplify the documentation as it can be 3 different bit fields that define it depending on the configuration.

Note: the main constraint on this delay depends on the previous setup:

Caution: Whatever the trig event source, this InitDelay management in the Sequencer uses the system clock and the user must ensure the system runs an accurate clock to have a precise delay.

When the InitDelay timeout expires, the Sequencer checks several conditions to decide if it switches to the second initialization step or exits with error. The checked conditions are:

If all the conditions are true, then the Sequencer:

If at least one of the conditions is false then:

25.8.2.2.2 Second initialization step

The 2 nd INIT step is used by the Sequencer to get all the information from the RAM tables linked to the RF transfer to proceed (except DataPtr and TxDataReady bit fields).

This means the software must have filled all the RAM table information (except DataPtr and TxDataReady bit fields) when the InitDelay timeout expires.

The 2 nd INIT step starts when the Tx or Rx request is sent to the Radio FSM. The first action of the Sequencer is to read few delays in the GlobalStatMach. Those delays are needed during the 2 nd INIT and DATA INIT steps.

This 2 nd INIT step ends on a timeout based on 2 pieces of information read in the GlobalStatMach:

  1. 1. init_radio_delay (in µs), used as a generic name for this duration to simplify the documentation: it is one possibility out of 4 different bit fields depending on the transfer configuration:
    • – TransmitNoCalDelayChk when the transfer is a Tx and no PLL calibration is requested (CalReq bit is low),
    • – TransmitCalDelayChk when the transfer is a Tx and a PLL calibration is requested (CalReq bit is set),
    • – ReceiveNoCalDelayChk when the transfer is an Rx and no PLL calibration is requested (CalReq bit is low),
    • – ReceiveCalDelayChk when the transfer is an Rx and a PLL calibration is requested (CalReq bit is set).
  2. 2. TxdataReadyCheck: duration given to the Sequencer to get the two last pieces of information, which are DataPtr and TxDataReady information in the RAM table. This last reading is done in the third initialization step called DATA_INIT.

The 2 nd INIT ends after “init_radio_delay – TxdataReadyCheck” µs.

From the 2 nd INIT step, the Radio FSM is running in parallel to the Sequencer getting information in the RAM tables. The user must ensure the init_radio_delay duration does not exceed the RF analog setup time up to powering on the antenna for a transmission (or ready to receive on the antenna). This means the 2 nd INIT step must not exceed:

  1. Note:
    • For transmission, the init_radio_delay timeout must expire before the Radio FSM is in Tx mode to avoid missing the start of the preamble sending on the antenna (otherwise garbage is sent while the preamble is supposed to be output).
    • For a reception, the init_radio_delay must expire close to the switch in Rx state of the Radio FSM, knowing the RcvTimeout counter starts when the init_radio_delay expires.

At the very beginning of the 2 nd INIT step:

The 2 nd INIT step really starts to fetch information related to the transfer in the RAM tables when the relative timer reaches “init_radio_delay – ConfigEndDuration”.

The GlobalStatMach.ConfigEndDuration bit field allows delaying the reading of the transfer information contained in the RAM tables by the Sequencer. The goal of this delay is to provide more margin to the SW to fill the RAM table information that is read during 2 nd INIT. This is possible as the RAM table read session is shorter than the analog radio setup duration. The figure below provides a summary of the timing information contributors for the initialization steps.

Figure 201. Sequencer Initialization steps timings overview

Timing diagram for Sequencer Initialization steps. The diagram shows three main initialization phases: 1st INIT, 2nd INIT, and DATA INIT. A 'Sequencer trigger event' starts the 1st INIT. A 'No Sequencer activity' period follows, allowing software to finish RAM table updates. The 2nd INIT begins with 'Read RAM table info for 2nd INIT'. The DATA INIT begins with 'Read RAM table info for DATA INIT' and a 'TxDataReadyChk' signal. A 'ConfigEndDuration' is indicated between the 2nd INIT and DATA INIT. A 'TX/RX command to Radio FSM' is sent during the 2nd INIT. The 'init_delay' is the time from the trigger event to the start of the 2nd INIT. The 'init_radio_delay' is the time from the start of the 2nd INIT to the 'Radio FSM reaches TX or RX state'. A 'Start transmit/receive digital block' signal is sent at the end of the DATA INIT. A 'Go to ACTIVE2' request to the Radio FSM is sent at the start of the 1st INIT.
Timing diagram for Sequencer Initialization steps. The diagram shows three main initialization phases: 1st INIT, 2nd INIT, and DATA INIT. A 'Sequencer trigger event' starts the 1st INIT. A 'No Sequencer activity' period follows, allowing software to finish RAM table updates. The 2nd INIT begins with 'Read RAM table info for 2nd INIT'. The DATA INIT begins with 'Read RAM table info for DATA INIT' and a 'TxDataReadyChk' signal. A 'ConfigEndDuration' is indicated between the 2nd INIT and DATA INIT. A 'TX/RX command to Radio FSM' is sent during the 2nd INIT. The 'init_delay' is the time from the trigger event to the start of the 2nd INIT. The 'init_radio_delay' is the time from the start of the 2nd INIT to the 'Radio FSM reaches TX or RX state'. A 'Start transmit/receive digital block' signal is sent at the end of the DATA INIT. A 'Go to ACTIVE2' request to the Radio FSM is sent at the start of the 1st INIT.
25.8.2.2.3 Data initialization step

This data INIT step starts when the 2 nd INIT step ends.

During this step, the Sequencer only gets 2 values from the table:

The GlobalStatMach.TxdataReadyCheck is used to delay the start of this DATA INIT step to allow more time to the software to provide the data pointer (and first values to transmit if transfer is a transmission).

The DATA INIT step ends when the relative timer (started at the beginning of the 2nd INIT step) reaches init_radio_delay:

For transmission, a synchronization mechanism is in place between the transmit block and the Radio FSM: the transmit block waits for the Tx state information from the Radio FSM to know when data can be sent to the modulator. As the transmit block is supposed to receive the start pulse from the Sequencer a bit before the Radio FSM reaches the Tx state, a wait window needs to be defined to avoid waiting forever: this time window is defined in the GlobalStatMach.TxReadyTimeout bit field.

Caution: It is the responsibility of the software to ensure that the init_radio_delay, the ConfigEndDuration and the TxdataReadyCheck values are coherent to guarantee both data ready on time in the table and start pulse sent on time to the receive/transmit block.

25.8.2.2.4 Transmission/reception step

The transmission/reception step starts when the start pulse is sent by the Sequencer to the transmit or to the receive block.

This step ends when the transmit/receive block indicates that the transfer is done:

Important:
25.8.2.2.5 Context saving step

The context saving steps consist of RAM write-back operation in some RAM table words to update with the result of the RF transfer that just ended.

This step starts when the Sequencer obtains the transfer done information from the transmit or receive block.

The RAM write-back impacts the following RAM table elements:

Note: See Section 25.8.5.1: Pointers management and packet counter for pointer management details .

25.8.2.2.6 Bluetooth® LE sequence summary

The sequences of operations characterizing a transmission and a reception are summarized in the following timing diagrams.

Figure 202. Tx sequence

Timing diagram for the Tx sequence showing various stages and timing parameters.

The diagram illustrates the timing sequence for a transmission (Tx). It starts with a 'Trigger event' leading into a '1 st INIT' phase, followed by a delay 'InitDelay'. This is followed by a '2 nd INIT' phase. A 'ConfigEnd Duration' is marked between the end of the 2 nd INIT and the start of 'DATA INIT'. From the start of 'DATA INIT', a 'TxData ReadyChk' timer starts. A 'TxReady Timeout' is shown as a duration starting from the end of 'DATA INIT'. The 'init_radio_delay' is indicated as the time from the start of '2 nd INIT' to the start of 'TxDelay Start'. The sequence then enters the 'TX' phase, which includes 'TxDelay Start' and 'TxDelay End'. Finally, a 'RAM write back' operation occurs, followed by an 'IRQ to CPU' signal.

Timing diagram for the Tx sequence showing various stages and timing parameters.

Figure 203. Rx sequence

Timing diagram for Figure 203. Rx sequence. The diagram shows a sequence of events: Trigger event, 1st INIT, 2nd INIT, DATA INIT, RX, and RAM write back. Key timing parameters are indicated: InitDelay (between Trigger event and 1st INIT), init_radio_delay (between 1st INIT and DATA INIT), ConfigEnd Duration (between 2nd INIT and DATA INIT), TxData ReadyChk (between DATA INIT and RX), and RcvTimeout (between RX and RAM write back). An IRQ to CPU is shown at the end of the sequence.
Timing diagram for Figure 203. Rx sequence. The diagram shows a sequence of events: Trigger event, 1st INIT, 2nd INIT, DATA INIT, RX, and RAM write back. Key timing parameters are indicated: InitDelay (between Trigger event and 1st INIT), init_radio_delay (between 1st INIT and DATA INIT), ConfigEnd Duration (between 2nd INIT and DATA INIT), TxData ReadyChk (between DATA INIT and RX), and RcvTimeout (between RX and RAM write back). An IRQ to CPU is shown at the end of the sequence.

25.8.2.3 Possible root causes of aborted sequence

It may happen that the sequence is not started or interrupted before the end for different reasons.

In any case, the SeqDone flag (and interrupt if enabled) occurs at the end of a sequence whatever the status (successful or failed).

Then, some status/error flags (with associated maskable interrupt) are available to obtain the reason of the abortion or to have complementary information on the sequence that just occurred.

25.8.2.3.1 Active bit is low

The sequence is stopped just after the trigger event because the Active bit in the GlobalStatMach RAM table is read equal to 0.

If active bit is low, then:

25.8.2.3.2 RRM semaphore does not grant the IP_BLE on time

On a trigger event and if active bit is high, the Sequencer requests the token to the RRM semaphore to have control of the radio resources.

If, at the end of the initialization delay (WakeupInitDelay or Timer12InitDelayCal or Timer2InitDelayNoCal), the RRM still does not confirm the IP_BLE has been granted, then:

25.8.2.3.3 Radio FSM not in ACTIVE2 state on time

This error happens if the Radio FSM is not in ACTIVE2 state at the end of the 1 st INIT step (on InitDelay timeout expiration).

If, at the end of the initialization delay (WakeupInitDelay or Timer12InitDelayCal or Timer2InitDelayNoCal), the Radio FSM has still not confirmed it is ready to start a Tx or Rx sequence (no accurate clock present for instance):

25.8.2.3.4 Configuration error

A configuration error occurs if the value contained by the Rcvpoint or Txpoint field or IQSamplingPtr of the current StatMach RAM table is not modulo 4 (does not correspond to a 32-bit aligned address).

Note: the StatMach.IQSamplingPtr value is checked only for some values in other RAM table bit fields. Refer to Section 25.8.6.4.4: IQSamplesPtr[31:0] or AntennaPatternPtr[31:0] not 32-bit aligned for details .

In this case:

25.8.2.3.5 Address pointer error

An address pointer error occurs if the TxRxPack.NextPtr[31:24], the TxRxPack.DataPtr[31:24] or the StatMach.IQSamplestPtr[31:24] (if TxRxPack.CTEAndSamplingEnable=1) is not equal to the SoC RAM base address.

In this case:

25.8.2.3.6 PLL lock fail (only if GlobalStatMach.AutoTxRxSkipEn = 1)

If the AutoTxRxSkipEn bit in the GlobalStatMach RAM table is set, the Sequencer skips the sequence if the PLL lock fail information is raised.

This PLL lock fail corresponds to the fact that the PLL did not lock on time and is provided by the Radio FSM. It is checked by the Sequencer at the end of the initialization step, before entering the Tx-Rx step.

In this case:

25.8.2.3.7 TxRxSkip APB command

An APB command is available to skip an on-going Tx or Rx transfer. The software needs to write '1' in the TXRXSKIP bit of the CMDREG IP_BLE APB register.

Note: This bit is auto-cleared immediately by the hardware.

The software must be aware that the TxRxSkip APB command is considered only during a sequence. Otherwise the skip request is ignored (not recorded and no TxRxSkip interrupt/status flag is raised on the next sequence).

The behavior differs depending on the TxRxSkip command that occurs inside the sequence.

Table 192. Summary of flags and RAM table pointers behavior versus Tx Skip command

“Skip at” phaseInterrupt flagsRAM table pointers updatedRAM write-back
DONE bit[25]TXRXSKIP Bit[21]TXERROR_1 Bit[9]Tx PrevTxTx next
1 st INITNOYESNONONONONO
2 nd INITNOYESNONONONONO
DATA INITNOYESNONONONONO
TxYESYESYESNONOYESYES
CONTECT SAVINGYESNONOYESYESYESYES

Table 193. Summary of flags and RAM table pointers behavior versus Rx Skip command

“Skip at” phaseInterrupt flagsRAM table Pointers updatedRAM write-back
RCVOK Bit[31]RCVRCERR Bit[30]DONE Bit[25]TXRXSKIP Bit[21]RCV PrevRCV
1 st INITNONONOYESNONONO
2 nd INITNONONOYESNONONO
DATA INITNONONOYESNONONO
RxNOYESYESYESNOYESYES
CONTECT SAVINGYESNOYESNOYESYESYES

In all scenarios, the IntTxRxSkip bit in the GlobalStatMach must be high to have an interrupt generated when the STATUSREG.TXRXSKIP bit is high. In this case, the INTERRUPT1REG.TXRXSKIP bit is also high. The enable mask is readable in INTERRUPT1ENABLEREG.TXRXSKIP bit.

25.8.2.3.8 AllTableReady bit not set on time

This error is linked to:

During the 2 nd INIT step, the TxRxPack.AllTableReady bit is read by the Sequencer just after the ConfigEndDuration waiting loop (but checks its value only when exiting DATA INIT step at the end of init_radio_delay).

The role of this bit is to guarantee the information related to the transmission/reception packet (especially data pointers) in the TxRxPack (except the payload bytes when transmission) are valid/up-to-date.

If the recorded TxRxPack.AllTableReady is not high:

25.8.2.3.9 TxdataReady bits not set on time

This bit is used only when the on-going transfer is a transmission (not checked on a reception).

It adds flexibility to the software to be able to go on filling the data payload to transmit while the transmission has already started on the antenna.

The recommendation is to set this bit only after at least 16 bytes of Tx data payload are available in the data buffer.

The Sequencer reads the TxRxPack.TxDataReady bit at the beginning of the DATA INIT step but checks its value only at the end of the init_radio_delay.

If the recorded TxRxPack.TxDataReady is not high:

25.8.2.3.10 Receive length error

This aborting issue can occur only on reception.

A receive length error is detected if the received length value decoded in the received frame header is greater than the StatMach.MaxReceivedLength[7:0] bit field. This feature can be used when free RAM area is limited and does not allow receiving large packets.

If the receive block detects a packet length in the received header that is greater than the StatMach.MaxReceiveLength value:

Note: As the receiver truncates the received frame to a reduced length, a CRC error occurs in parallel and potential other side effect error flags. So, the RCVLENGTHERROR flag must be considered before the others regarding a reception.

25.8.3 IP_BLE interrupts

The Bluetooth® LE link layer provides 2 separate interrupt lines:

The IP_BLE interrupts:

Note: only enabled interrupts can be read at '1' in this INTERRUPT1REG register. To have the equivalent without enable mask, the STATUSREG IP_BLE APB register must be read.

The AES interrupts:

Note: the "end of calculation" information is only available through enabled interruption. The MANAESSTATREG and the AESLEPRIVSTATREG IP_BLE APB registers contain other flags, not equivalent to INTERRUPT2REG registers.

25.8.4 IP_BLE RAM tables

Each time a trigger event is sent to the Bluetooth® LE link layer, the Sequencer fetches the RAM tables in RAM to get the needed information to know what to configure for the radio and which sequence to start (Rx or Tx).

There are several types of table:

Figure 204. RAM table dependency overview gives an overview of RAM tables dependencies. In the provided example, the GlobalStatMach is currently managing the connection number X (StatMachx on-use) and the data buffer points to itself from the third transfer of each type.

Figure 204. RAM table dependency overview

RAM table dependency overview diagram showing GlobStatMach, StatMachx, TxRxPack_RX0-2, and TxRxPack_TX0-2 structures and their dependencies.

The diagram illustrates the RAM table dependency overview for the Radio IP. It shows the following structures and their dependencies:

RAM table dependency overview diagram showing GlobStatMach, StatMachx, TxRxPack_RX0-2, and TxRxPack_TX0-2 structures and their dependencies.

25.8.4.1 GlobalStatMach RAM table

The GlobalStatMach location is frozen by hardware at address 0x2000_00C0 in the STM32WB05xZ.

25.8.4.1.1 GlobalStatMach RAM table overview

The GlobalStatMach is unique and mainly contains static information/options.

Table 194. GlobalStatMach RAM table

WordByte addrR/W
by Bluetooth
LE
76543210
0x000x0NoRadioConfigPtr[7:0]
0x1RadioConfigPtr[15:8]
0x2RadioConfigPtr[23:16]
0x3RadioConfigPtr[31:24]
0x010x4R/WActiveCurStMachNum
0x5WakeupInitDelay
0x6Timer12InitDelayCal
0x7Timer2InitDelayNoCal
0x020x8RTransmitCalDelayChk
0x9TransmitNoCalDelayChk
0xAReceiveCalDelayChk
0xBReceiveNoCalDelayChk
0x030xCRConfigEndDuration
0xDTxdataReadyCheck
0xETxdelayStart
0xFTimeCaptureTimeCaptureSelTxdelayEnd
0x040x10RTxReadyTimeout
0x11RcvTimeout[7:0]
0x12RcvTimeout [15:8]
0x13RcvTimeout [19:16]
0x050x14RChkFlagAutoClearEnaAutoTxRxskipEn
0x15
0x16IntNoActiveLErrorIntTxDataReadyErrorIntAllTableReadyErrorIntAddPointError
0x17IntConfigErrorIntActive2ErrintTxRxSkipIntSeqDoneIntSemaTimeoutErrorIntRcvLengthError
0x060x18RDefaultAntennalD[6:0]
ST logo
ST logo
WordByte addrR/W
by Bluetooth
LE
76543210
0x060x19R
0x1A
0x1B
  1. Note:
    • • grey cells are unused cells
    • • pink cells are related to debug/qualification topic.

The following section describes the GlobalStatMach bit fields to help the user to program accurately the table.

  1. Note: init_radio_delay is the generic name for the delay that can be TransmitCalDelayChk or TransmitNoCalDelayChk or ReceiveCalDelayChk or ReceiveNoCalDelayChk depending on transfer configuration (see Section 25.8.2.2.2: Second initialization step for more details).
25.8.4.1.2 GlobalStatMach RAM table registers list

Table 195. GlobalStatMach RAM table register list

Address offsetNameRWResetDescription
0x00WORD0RW0x00000000Word0 register
0x04WORD1RW0x00000000Word1 register
0x08WORD2RW0x00000000Word2 register
0x0CWORD3RW0x00000000Word3 register
0x10WORD4RW0x00000000Word4 register
0x14WORD5RW0x00000000Word5 register
0x18WORD6RW0x00000000Word6 register

Table 196. GlobalStatMach.WORD0 register description

BitField nameResetRWDescription
31:0RADIOCONFIGPTR0x00000000RW

Radio Configuration address Pointer.

Contains the address of the command_start_list used by the RRM block to execute UDRA command.

Caution: This pointer must be 32-bit aligned.

Note: This value is loaded automatically by the RRM when the MR_BLE exits reset. However, it is also possible to make the RRM reload it through a reload command in the UDRA_CTRL register.

Table 197. GlobalStatMach.WORD1 register description

BitField nameResetRWDescription
6:0CURSTMACHNUM0x0RW

Current connection machine number.

Defines the state machine number (in the range from 0 to 127) which is running for the current transmission or reception.

It is used to calculate the RAM address from which the State machine table ("StateMach") is read.

Note: This field is written back with value read at the beginning of the sequencer only if the ChkFlagAutoClearEna bit = '1'.

7ACTIVE0x0RW

Must be at '1' when the trig event (Wakeup Timer, Timer1 or Timer2) occurs to start Bluetooth® LE link layer sequence. Otherwise, no RF sequence nor timer management is done by the Sequencer.

Note: This field is written back to '0' only if the ChkFlagAutoClearEna bit = '1'.

15:8WAKEUPINITDELAY0x0RW

Delay between wakeup timer trig event on Sequencer and Rx/Tx request sending to the Radio FSM. It corresponds to the Sequencer 1 st INIT step duration.

Note: This bit field is not used if trig event comes from Timer1 or Timer2.

The time unit for this delay/value is a period of slow clock frequency x 16 (if slow clock is 32 kHz, this bit field unit is 1 period of 512 kHz).

Note: This field is written back with value read at the beginning of the Sequencer only if the ChkFlagAutoClearEna bit = '1'.

23:16TIMER12INITDELAYCAL0x0RW

Delay between Timer1 or Timer2 trig event on Sequencer and Rx/Tx request sending to the Radio FSM. It corresponds to the Sequencer 1 st INIT step duration.

BitField nameResetRWDescription
23:16TIMER12INITDELAYCAL0x0RW

This bit field is used for Timer2 trig event only if CalReq bit is set in current TxRxPack RAM table (PLL calibration is requested).

The time unit for this delay is 1 µs.

Note: This field is written back with value read at the beginning of the Sequencer only if the ChkFlagAutoClearEna bit = '1'.

31:24TIMER2INITDELAYNOCAL0x0RW

Delay between Timer2 trig event on Sequencer and Rx/Tx request sending to the Radio FSM. It corresponds to the Sequencer 1 st INIT step duration.

This bit field is used for Timer2 trig event only if CalReq bit is low in current TxRxPack RAM table (no PLL calibration is requested).

The time unit for this delay is 1 µs.

Note: This field is written back with value read at the beginning of the Sequencer only if the ChkFlagAutoClearEna bit = '1'.

Table 198. GlobalStatMach.WORD2 register description
BitField nameResetRWDescription
7:0TRANSMITCALDELAYCHK0x0RW

Delay between Tx request sent to the Radio FSM and the start pulse sent to the transmit block. It corresponds to the Sequencer 2 nd INIT + DATA INIT steps duration.

Note: This bit field is used if TxMode bit is set in the StatMach (transmission) and the CalReq bit is set in current TxRxPack RAM table (PLL calibration is requested).

The time unit for this delay is 1 µs.

A recommended value is available in Section 25.8.5.4: Sequencer timings recommended values .

15:8TRANSMITNOCALDELAYCHK0x0RW

Delay between Tx request sent to the Radio FSM and the start pulse to the transmit block. It corresponds to the Sequencer 2 nd INIT + DATA INIT steps duration.

Note: This bit field is used if TxMode bit is set in the StatMach (transmission) and the CalReq bit is low in current TxRxPack RAM table (no PLL calibration is requested).

A recommended value is available in Section 25.8.5.4: Sequencer timings recommended values .

The time unit for this delay is 1 µs.

23:16RECEIVECALDELAYCHK0x0RW

Delay between Rx request sent to the Radio FSM and the start pulse sent to the receive block. It corresponds to the Sequencer 2 nd INIT + DATA INIT steps duration.

Note: This bit field is used if TxMode bit is low in the StatMach (reception) and the CalReq bit is set in current TxRxPack RAM table (PLL calibration is requested).

A recommended value is available in Section 25.8.5.4: Sequencer timings recommended values .

The time unit for this delay is 1 µs.

31:24RECEIVENOCALDELAYCHK0x0RW

Delay between Rx request sent to the Radio FSM and the start pulse to the receive block. It corresponds to the Sequencer 2 nd INIT + DATA INIT steps duration.

Note: This bit field is used if TxMode bit is low in the StatMach (reception) and the CalReq bit is low in current TxRxPack RAM table (no PLL calibration is requested).

A recommended value is available in Section 25.8.5.4: Sequencer timings recommended values .

The time unit for this delay is 1 µs.

Table 199. GlobalStatMach.WORD3 register description
BitField nameResetRWDescription
7:0CONFIGENDDURATION0x0RW

Duration for the Sequencer to execute the final configuration.

The goal of this bit field is to provide more time to the firmware to prepare the RAM tables.

The Sequencer waits for relative time to be equal to init_radio_delay - ConfigEndDuration before starting the final configuration.

The time unit for this delay is 1 µs.

15:8TXDATAREADYCHECK0x0RW

Duration for the Sequencer to get the TxDataReady and DataPtr information in TxRxPack table.

The goal of this bit field is to provide more time to the firmware to provide the data pointer address and in case of transmission to provide the data to transmit.

The Sequencer waits for relative time to be equal to init_radio_delay - TxdataReadyCheck before starting the final configuration.

The time unit for this delay is 1 µs.

23:16TXDELAYSTART0x0RW

Delay added between the moment the Radio FSM is in Tx mode (PA ramp-up done and power present on the antenna) and the first bit transmission to the modulator.

The time unit for this delay is 125 ns.

29:24TXDELAYEND0x0RW

Delay added between the last bit transmission to the modulator and the "end of transmission" information for the Sequencer.

The time unit for this delay is 125 ns.

This delay allows giving time to the modulator and analog chain to output on the antenna the last bit.

30TIMECAPTURESEL0x0RW

0: the captured time (absolute time) corresponds to the end of 1st INIT step in the sequence ( InitDelay timeout event).

1: the captured time (absolute time) corresponds to the end of DATA INIT step in the sequence ( init_radio_delay timeout event).

Note: This bit is for debug purposes.

31TIMECAPTURE0x0RW

0: no capture is requested to monitor the Bluetooth® LE sequence.

1: a time capture is requested to monitor the Bluetooth® LE sequence. Captured event is defined by GlobalStatMach.TIMECAPTURESEL bit.

Note: If both TIMECAPTURE and TIMECAPTURESEL bits are low, the TIMERCAPTUREREG IP_BLE APB register is anyway updated with the InitDelay timeout event (mechanism to bypass the fact those 2 GlobalStatMach bits are checked after 1st INIT step completion).

Note: If TxRxPack.TrigRcv or TxRxPack.TrigDone bit is set, the TimerCaptureReg Bluetooth® LE APB register shows this last event trig value at the end of the sequence.

Note: This bit is for debug purposes.

Table 200. GlobalStatMach.WORD4 register description
BitField nameResetRWDescription
7:0TXREADYTIMEOUT0x0RW

Transmission ready timeout.

Defines the maximum duration for the transmit block to wait for the Radio FSM to indicate it is in Tx state and data can be provided to the modulator.

The time unit for this delay is 1 µs.

BitField nameResetRWDescription
7:0TXREADYTIMEOUT0x0RWNote: If this value is set to 0, no timeout is activated to wait for the Tx ready information. This configuration is not recommended at all as it may lead to endless sequences, restarted only through a new trigger event being generated.
27:8RCVTIMEOUT0x0RWReceive window timeout.
Define the maximum duration to stay in reception without any preamble + access address detection (rest of the frame can be received even outside this time window).
The duration is expressed as \( (4^{\text{RCVTIMEOUT}[19:18]}) \times \text{RCVTIMEOUT}[17:0] \)
The time unit for RCVTIMEOUT[17:0] is 1 µs.
31:28RESERVED31_280x0RWIgnored on write - read as zero
Table 201. GlobalStatMach.WORD5 register description
BitField nameResetRWDescription
0AUTOTXRSKIPEN0x0RWAutomatic transfer (Tx or Rx) skip enable.
If set, the Bluetooth ® LE link layer stops automatically an on-going transfer if PLL lock fail event is detected on PLL start. See Section 25.8.2.3.6: PLL lock fail (only if GlobalStatMach.AutoTxRxSkipEn = 1) for details about behavior on skip.
1RESERVED10x0RWReserved
2CHKFLAGAUTOCLEARENA0x0RWActive Auto Clear bit Enable.
The Active auto clear feature leads the Sequencer to clear the GlobalStatMach.Active bit during the RAM write-back step at the end of a transfer/sequence.
The main goal of this feature is to avoid a new transfer to start on the antenna while the software did not yet prepare the next transfer in RAM tables.
0: the active auto clear bit feature is disabled.
1: The active auto clear bit feature is enabled.
19:3RESERVED19_30x0RWReserved
20INTADDPOINTERROR0x0RWAddress pointer error interrupt enable.
0: the interrupt associated to INTERRUPT1REG.AddPointError is disabled.
1: the interrupt associated to INTERRUPT1REG.AddPointError is enabled.
21INTALLTABLEREADYERROR0x0RWAll table ready error interrupt enable.
0: the interrupt associated to INTERRUPT1REG.AllTableReadyError is disabled.
1: the interrupt associated to INTERRUPT1REG.AllTableReadyError is enabled.
22INTTXDATAREADYERROR0x0RWTransmission data payload ready error interrupt enable.
0: the interrupt associated to INTERRUPT1REG.TxDataReady is disabled.
1: the interrupt associated to INTERRUPT1REG.TxDataReady is enabled.
23INTNOACTIVELError0x0RWActive bit low value reading interrupt enable.
0: the interrupt associated to INTERRUPT1REG.NoActiveLError is disabled.
1: the interrupt associated to INTERRUPT1REG.NoActiveLError is enabled.
24RESERVED240x0RWReserved
25INTRCVLENGTHERROR0x0RWToo long received payload length interrupt enable.
BitField nameResetRWDescription
25INTRCVLENGTHERROR0x0RW0: the interrupt associated to INTERRUPT1REG.ReceiveLengthError is disabled.
1: the interrupt associated to INTERRUPT1REG.ReceiveLengthError is enabled.
26INTSEMATIMEOUTERROR0x0RWSemaphore timeout error interrupt enable.
0: the interrupt associated to INTERRUPT1REG.SemaTimeoutError is disabled.
1: the interrupt associated to INTERRUPT1REG.SemaTimeoutError is enabled.
27RESERVED270x0RWReserved.
28INTSEQDONE0x0RWSequencer end of task interrupt enable.
This bit should always be set to ensure that an interrupt occurs at the end of sequence whatever the exit reason.
0: the interrupt associated to INTERRUPT1REG.SeqDone is disabled
1: the interrupt associated to INTERRUPT1REG.SeqDone is enabled
29INTTXRXSKIP0x0RWTransmission or reception skip interrupt enable.
0: the interrupt associated to INTERRUPT1REG.intTxRxSkip is disabled.
1: the interrupt associated to INTERRUPT1REG.intTxRxSkip is enabled.
30INTACTIVE2ERR0x0RWNo "in ACTIVE2" information from Radio FSM received on time interrupt enable.
0: the interrupt associated to INTERRUPT1REG.Active2Error is disabled.
1: the interrupt associated to INTERRUPT1REG.Active2Error is enabled.
31INTCONFIGERROR0x0RWConfiguration error interrupt enable.
0: the interrupt associated to INTERRUPT1REG.ConfigError is disabled
1: the interrupt associated to INTERRUPT1REG. ConfigError is enabled.

Table 202. GlobalStatMach.WORD6 register description

BitField nameResetRWDescription
6:0DEFAULTANTENNAID0x0RWDefault Antenna ID corresponding to the number of the antenna used to receive/ transmit:
  • the full packet when no CTE
  • the packet body (Preamble, Access Address, PDU, and CRC) when CTE
31:7RESERVED31_70x0RWReserved

25.8.4.2 StatMach RAM table

The StatMach table links to an active connection. There are as many StatMach tables as concurrent connections in a limit of 128 (maximum supported by the hardware).

The StatMach RAM table location is frozen by the hardware as chained just after the GlobalStatMach. The formula for a StatMach base address is:

\[ \text{StateMachBaseAddress}[\text{stateMachIdx}] = \text{GlobStatMachBaseAddress} + 28 + (\text{stateMachIdx} * 92) \]

Table 203. StatMach RAM table

WordByte addr.R/W by Bluetooth® LE76543210
0x000x0R/WTxModeRadioComListEnaUchan
0x1NESNSNRemap_chan
0x2RcvEncTxEncEncryptOnBuffer_Full
0x3RxPhy[2:0]CTEDisableTxPhy[2:0]
0x010x4R/WTxpoint[7:0]
0x5Txpoint[15:8]
0x6Txpoint[23:16]
0x7Txpoint[31:24]
0x020x8R/WRcvpoint[7:0]
0x9Rcvpoint[15:8]
0xARcvpoint[23:16]
0xBRcvpoint[31:24]
0x030xCR/WRcvpointPrev[7:0]
0xDRcvpointPrev[15:8]
0xETxpointnext[23:16]
0xFTxpointnext[31:24]
0x040x10R/WRcvpointPrev[7:0]
0x11RcvpointPrev[15:8]
0x12RcvpointPrev[23:16]
0x13RcvpointPrev[31:24]
0x050x14R/WTxpointnext[7:0]
0x15Txpointnext[15:8]
0x16Txpointnext[23:16]
0x17Txpointnext[31:24]
0x060x18R/WPCntTx[7:0]
0x19PCntTx[15:8]
0x1APCntTx[23:16]
0x1BPCntTx[31:24]
0x070x1CR/WPCntTx[39:32]
0x1DPCntRcv[7:0]
0x1EPCntRcv[15:8]
0x1FPCntRcv[23:16]
WordByte addr.R/W by Bluetooth® LE76543210
0x080x20RPCntRcv[31:24]
0x21PCntRcv[39:32]
0x22RxMicDbgMsbFirstDisableCrcEnaPreambleRepPreambleRep[3:0]
0x23RxDebugCrcIntRxOverflowErrorIntEncErrorintTxError[4:0]
0x090x24Raccaddr[7:0]
0x25accaddr[15:8]
0x26accaddr[23:16]
0x27accaddr[31:24]
0x0A0x28Rcrcinit[7:0]
0x29crcinit[15:8]
0x2Acrcinit[23:16]
0x2BMaxReceivedLength
0x0B0x2CRPaPower
0x2Dhopincr
0x2EUsedChannelFlags[7:0]
0x2FUsedChannelFlags[15:8]
0x0C0x30RUsedChannelFlags[23:16]
0x31UsedChannelFlags[31:24]
0x32UsedChannelFlags[36:32]
0x33
0x0D0x34ReventCounter[7:0]
0x35eventCounter[15:8]
0x36
0x37
0x0E0x38REncryptIV[7:0]
0x39EncryptIV[15:8]
0x3AEncryptIV[23:16]
0x3BEncryptIV[31:24]
0x0F0x3CREncryptIV[39:32]
0x3DEncryptIV[47:40]
0x3EEncryptIV[55:48]
0x3FEncryptIV[63:56]
0x100x40REncryptK[7:0]
0x41EncryptK[15:8]
0x42EncryptK[23:16]
0x43EncryptK[31:24]
0x110x44REncryptK[39:32]
0x45EncryptK[47:40]
0x46EncryptK[55:48]
WordByte addr.R/W by Bluetooth® LE76543210
0x110x47REncryptK[63:56]
0x48EncryptK[71:64]
0x120x49REncryptK[79:72]
0x4AEncryptK[87:80]
0x4BEncryptK[95:88]
0x4CEncryptK[103:96]
0x130x4DREncryptK[111:104]
0x4EEncryptK[119:112]
0x4FEncryptK[127:120]
0x50CTETIME[4:0]CTESlotWidthAoD_nAoA
0x140x51RMaximumIQSamplesNumber[6:0]
0x52AntennaPatternLength[7:0]
0x53
0x54IQSamplesPtr[7:0]
0x150x55RIQSamplesPtr[15:8]
0x56IQSamplesPtr[23:16]
0x57IQSamplesPtr[31:24]
0x58AntennaPatternPtr[7:0]
0x160x59RAntennaPatternPtr[15:8]
0x5AAntennaPatternPtr[23:16]
0x5BAntennaPatternPtr[31:24]

Note:

The following section describes the StatMach bit fields to help the user to accurately program the table.

25.8.4.2.1 StatMach RAM table register list

Table 204. StatMach RAM table register list

Address offsetNameRWResetDescription
0x00WORD0RW0x00000000Word0 register
0x04WORD1RW0x00000000Word1 register
0x08WORD2RW0x00000000Word2 register
0x0CWORD3RW0x00000000Word3 register
0x10WORD4RW0x00000000Word4 register
0x14WORD5RW0x00000000Word5 register
0x18WORD6RW0x00000000Word6 register
0x1CWORD7RW0x00000000Word7 register
0x20WORD8RW0x00000000Word8 register
Address offsetNameRWResetDescription
0x24WORD9RW0x00000000Word9 register
0x28WORDARW0x00000000WordA register
0x2CWORDBRW0x00000000WordB register
0x30WORDCRW0x00000000WordC register
0x34WORDDRW0x00000000WordD register
0x38WORDERW0x00000000WordE register
0x3CWORDFRW0x00000000WordF register
0x40WORD10RW0x00000000Word10 register
0x44WORD11RW0x00000000Word11 register
0x48WORD12RW0x00000000Word12 register
0x4CWORD13RW0x00000000Word13 register
0x50WORD14RW0x00000000Word14 register
0x54WORD15RW0x00000000Word15 register
0x58WORD16RW0x00000000Word16 register

Table 205. StatMach.WORD0 register description

BitField nameResetRWDescription
5:0UCHAN0x0RW

Bluetooth® LE unmapped channel index.

UChan is used by the channel incrementer and the remapper to generate a new Uchan and RemapChan values through the two algorithms defined by the Bluetooth core 5.0 specification.

Note: this field is written back at the end of the transfer by the Sequencer:

  • - if TxRxPack.incchan = 0, written back value is the same value,
  • - if TxRxPack.incchan = 1, written back value is the value modified by one of the two algorithms defined by the Bluetooth core 5.0 specification.

Note: the standard requests this bit field to be set to 0 for the first connection event.

6RADIOCOMLISTENA0x0RW

Radio command list enable.

0: the Sequencer does not start a UDRA command to the RRM on a trig event.

1: the Sequencer starts a UDRA command to the RRM on a trig event.

The command number is related to the timer which triggered (0 for Wakeup timer, 1 for Timer1, 2 for Timer2).

7TXMODE0x0RW

Transfer type selection of the current sequence.

0: requested transfer is a reception. The start address of the TxRxPack packet in which the received data has to be stored is pointed by rcvpoint.

1: requested transfer is a transmission. The start address of the TxRxPack packet to be transmitted is pointed by TxPoint.

Note: this bit is overloaded by the Sequencer with the StatMach.NextTxMode bit value during each RAM write-back phase.

13:8REMAP_CHAN0x0RW

Bluetooth® LE remapped channel index.

This is the remapped channel as described in algorithm1 and algorithm2 in Bluetooth core specification 5.0.

This bit field is used by the hardware to generate the physical channel frequency.

Note: this field is written back at the end of the transfer by the Sequencer:

  • - if TxRxPack.incchan = 0, written back value is the same value
  • - if TxRxPack.incchan = 1, written back value is the value modified by one of the two algorithms defined by the Bluetooth core 5.0 specification and mapped to the used channels list.

Note: the standard requests this bit field to be set to 0 for the first connection event.

BitField nameResetRWDescription
14SN0x0RW

Bluetooth® LE sequence number bit.

If TxRxPack.SN_EN = 0 or TxRxPack.Advertise = 1, this bit is kept unchanged at the end of a transfer.

If TxRxPack.SN_EN = 1 and TxRxPack.Advertise = 0, this bit is managed automatically by the hardware SN/NESN mechanism (as described in the Bluetooth core specification 5.0). Then, this bit is modified by the hardware only at the end of a reception (not on transmission).

Note: in any case, this bit is written back by the Sequencer at the end of a transfer (modified or not).

15NESN0x0RW

Bluetooth® LE next expected sequence number bit.

If TxRxPack.SN_EN = 0 or TxRxPack.Advertise=1, this bit is kept unchanged at the end of a transfer.

If TxRxPack.SN_EN = 1 and TxRxPack.Advertise = 0, this bit is managed automatically by the hardware SN/NESN mechanism (as described in the Bluetooth core specification 5.0). Then, this bit is modified by the hardware only at the end of a reception (not on transmission).

Note: in any case, this bit is written back by the Sequencer at the end of a transfer (modified or not).

19:16RESERVED19_160x0RWReserved
20BUFFER_FULL(aka
BUFFEROVERFLOW)
0x0RW

No more receive buffer available.

Set this bit to indicate no more buffer is available to receive any packet.

In this case:

  • - no data are written back in the RAM at the end of the sequence
  • - the SN/NESN automatic mechanism adapts its behavior by keeping the NESN unchanged and does not increment the encryption receive packet counter.

Note: the SN bit management is not impacted to keep the transmission progressing as long as the peer acknowledges the reception of the previous transmitted packet.

21ENCRYPTON0x0RW

"On-the-fly" encryption/decryption engine enable.

0: the "On the fly" encryption/decryption engine is disabled.

1: the "On the fly" encryption/decryption engine is enabled. The parameters StateMach.EncryptIV and StateMach.EncryptK are read from RAM during the initialization phase.

Note: the "On the fly" encryption/decryption engine does not run for packets with null length.

Note: it is mandatory to have TxRxPack.SN_EN = 1 when StateMach.Encryption = 1 as PCntTx is incremented by the SN/NESN automatic management mechanism.

22TXENC0x0RW

Previous transmission packet was encrypted.

Note: this bit is fully managed by the hardware.

It is set to 1 after the transmission of an encrypted packet (so with length not zero).

When TxEnc = 0, PCntTx (transmission packet counter required for the sub-keys calculation) is unchanged.

When TxEnc = 1, PCntTx may be incremented depending on the SN/NESN check result.

23RCVENC0x0RW

Last receive packet was encrypted.

Note: this bit is fully managed by the hardware.

It is set to 1 after the reception of a packet with length not zero (whatever the CRC check result) if StateMach.Encryption = 1.

When RcvEnc = 1, the PCntRcv (receive packet counter required for the sub-keys calculation) is incremented depending on the SN/NESN check result.

26:24TXPHY0x0RW

Transmission Phy selection.

  • - 000: selected transmitter PHY is legacy 1 Mbps
  • - 001: selected transmitter PHY is legacy 2 Mbps
  • - 100: selected transmitter PHY is coded 1 Mbps with S=8
  • - 110: selected transmitter PHY is coded 1 Mbps with S=2
BitField nameResetRWDescription
- Others: reserved for future use. If programmed by mistake, selects "Transmitter PHY is legacy 1 Mbps" option.
27CTEDISABLE0x0RWDisable the CTE feature.
- 0: in transmission, the CTE is appended to the packet if TxRxPack.CTEAndSamplingEnable bit is set; in reception, the CTE detection is active.
- 1: CTE is never appended on a transmitted packet and CTE detection mechanism is not active in reception whatever the rest of the RAM table bit fields linked to CTE.
30:28RXPHY0x0RWReception Phy selection.
bit0: bit rate (0=1 Mbps / 1=2 MBps) / bit1: does not care / bit2: coded/not coded.
- 000: selected receiver PHY is legacy 1 Mbps
- 001: selected receiver PHY is legacy 2 Mbps
- 1x0: selected receiver PHY is coded 1 Mbps
- Others: reserved for future use. If programmed by mistake, selects "Receiver PHY is not coded 1 Mbps" option.
Note: S2/S8 coded choice comes from an auto-detection done by the demodulator.
31RESERVED310x0RWIgnored on write - read as zero

Table 206. StatMach.WORD1 register description

BitField nameResetRWDescription
31:0TXPOINT0x0RWPointer to transmit packet.
TxPoint defines the start address of the TxRxPack link list (containing the parameters of the current transmission to be proceeded).
This variable needs to be initialized by the firmware with the start address of the first TxRxPack of the transmission linked list each time a StateMach is created in memory (new connection). Then, TxPoint is managed by the hardware, considering the firmware has to guarantee the transmission link list is never empty (or pointing to itself).
Note: this pointer address must be 32-bit aligned and is an absolute address (not an offset).

Table 207. StatMach.WORD2 register description

BitField nameResetRWDescription
31:0RCVPOINT0x0RWPointer to receive packet.
Rcvpoint defines the start address of the TxRxPack link list (containing the parameters of the current reception to be proceeded).
This variable needs to be initialized by the firmware with the start address of the first TxRxPack of the reception linked list each time a StateMach is created in memory (new connection). Then, RcvPoint is managed by the hardware, considering the firmware has to guarantee the reception link list is never empty (or pointing to itself).
Note: this pointer address must be 32-bit aligned and is an absolute address (not an offset).

Table 208. StatMach.WORD3 register description

BitField nameResetRWDescription
31:0TXPOINTPREV0x0RWPointer to previous transmit packet.
This variable is fully managed by the hardware. It is recommended to initialize to 0 by the firmware when the StateMach is created in memory (new connection).
TxPointPrev indicates which buffer can be reallocated (as it is now free).
Table 209. StatMach.WORD4 register description
BitField nameResetRWDescription
31:0RCVPOINTPREV0x0RW

Pointer to previous receive packet.

This variable is fully managed by the hardware. It is recommended to initialize to 0 by the firmware when the StateMach is created in memory (new connection).

RcvPointPrev indicates which buffer can be reallocated (as it is now free).

Table 210. StatMach.WORD5 register description
BitField nameResetRWDescription
31:0TXPOINTNEXT0x0RW

Next transmit pointer.

This variable is fully managed by the hardware. It is recommended to initialize to 0 by the firmware when the StateMach is created in memory (new connection).

TxPointNext indicates the address of the TxRxPack transmit packet to be used once the transmission managed by the TxPoint is done (TxRxPack.NextPtr[31:0]).

The TxPointNext bit field is always updated at the end of a transmission. Note: at the end of a valid reception with TxRxPack.SN_EN = 1 and TxRxPack.Advertise = 0, the StatMach.TxPoint is equal to the StatMach.TxPointNext.

Table 211. StatMach.WORD6 register description
BitField nameResetRWDescription
31:0PCNTTX_31_00x0RW

CCM encryption transmission packet counter [31:0].

PCntTx is used during the on the fly encryption of the transmission data by the AES encryption engine.

For each new connection, Bluetooth protocol requires PCntTx to be initialized by the firmware to the value:

  • - 40'h8000000000: for data channel PDUs sent by the central
  • - 40'h0000000000: for data channel PDUs sent by the peripheral

Note: it is mandatory to have TxRxPack.SN_EN = 1 when StateMach.Encryption = 1 as PCntTx is incremented by the SN/NESN automatic management mechanism.

Table 212. StatMach.WORD7 register description
BitField nameResetRWDescription
7:0PCNTTX_39_320x0RW

CCM encryption transmission packet counter [39:32].

PCntTx is used during the on the fly encryption of the transmission data by the AES encryption engine.

For each new connection, Bluetooth protocol requires PCntTx to be initialized by the firmware to the value:

  • - 40'h8000000000: for data channel PDUs sent by the central
  • - 40'h0000000000: for data channel PDUs sent by the peripheral

Note: it is mandatory to have TxRxPack.SN_EN = 1 when StateMach.Encryption = 1 as PCntTx is incremented by the SN/NESN automatic management mechanism.

31:8PCNTRCV_23_00x0RW

CCM encryption receive packet counter [23:0].

PCntRcv is used during the on the fly encryption of the received data by the AES encryption engine.

For each new connection, Bluetooth protocol requires PCntRcv to be initialized by the firmware to the value:

  • - 40'h8000000000: for data channel PDUs received by the peripheral
  • - 40'h0000000000: for data channel PDUs received by the central

Note: it is mandatory to have TxRxPack.SN_EN = 1 as PCntRcv is incremented by the SN/NESN automatic management mechanism.

Table 213. StatMach.WORD8 register description
BitField nameResetRWDescription
15:0PCNTRCV_39_240x0RWCCM encryption receive packet counter [39:24].
PCntRcv is used during the on the fly encryption of the received data by the AES encryption engine.
For each new connection, Bluetooth protocol requires PCntRcv to be initialized by the firmware to the value:
- 40'h8000000000: for data channel PDUs received by the peripheral
- 40'h0000000000: for data channel PDUs received by the central
Note: it is mandatory to have TxRxPack.SN_EN = 1 as PCntRcv is incremented by the SN/ NESN automatic management mechanism.
19:16PREAMBLEREP0x0RWTransmission preamble repetition number.
Defines the number of repetitions of the transmitted preamble length for coded or uncoded phy. Keep it at 0 to have the Bluetooth® LE standard preamble format (1 byte).
Note: if StateMach.EnaPreambleRep = 0, this bit field is not taken into account.
This feature is not Bluetooth standard.
20ENAPREAMBLEREP0x0RWEnable transmission preamble repetition.
0: the preamble feature is disabled and the preamble length is as described in the Bluetooth core specification 5.0.
1: the preamble feature is enabled and the preamble length is defined by StateMach.PreambleRep (for coded and uncoded phy).
This feature is not Bluetooth standard.
Note: even if the hardware allows this feature with the Coded PHY configuration, the combination of those 2 settings must be avoided as it creates some issues on long preamble sequence.
21DISABLECRC0x0RWCRC disable.
If set, this bit:
- in reception: disables the check of the CRC
- in transmission: no CRC field is generated nor inserted in the sent packet.
This feature is not Bluetooth standard.
Note: when DisableCRC is set, a CRC error flag is systematically set at the end of a reception. Note that the SW is not supposed to track this flag in this configuration.
22MSBFIRST0x0RWMost significant bit is transmitted first:
0: the Least Significant Bit of the least significant byte is transmitted first in the frame (as described in Bluetooth® LE core specification 5.0).
1: the Most Significant Bit of the Most significant byte is transmitted first in the frame.
This feature is not Bluetooth standard compatible.
23RXMICDBG0x0RWReceive MIC debug.
0: the decrypted MIC (locally computed) is stored in the payload buffer in RAM (at the end of the payload).
1: the received MIC is stored in the payload buffer in RAM (at the end of the payload).
When RXMICDBG bit is set, the RCVOK flag is raised at the end of a reception whatever the MIC error status (so even when a MIC error is detected).
This feature is for debug.
28:24INTTXERROR0x0RWTransmission error interrupt enable.
If IntTxError[n] = 1: an interrupt is generated and associated flag is set in Interrupt1Reg.TxError[n] if a TxError[n] event occurs during the transmission.
If IntTxError[n] = 0: no interrupt nor associated flag in Interrupt1Reg.TxError[n] is available if a TxError[n] event occurs during the transmission.
BitField nameResetRWDescription
Note: STATUSREG.TxError[n] bit is not impacted and always provides the TxError[n] unmasked information.
29INTENCERROR0x0RW

Receive encryption error interrupt enable.

Note: the CRC check result is not considered by the interrupt enabled by IntEncErr.

0: the receive encryption error interrupt is disabled.

1: the receive encryption error interrupt is enabled (and associated interrupt flag is visible in Interrupt1Reg.EncError).

The interrupt is active if the MIC of the received message does not match the computed one (while the preamble and the access address are received ok, StateMach.Encryption = 1 and the received length is not null).

Note: the CRC check result is not taken into account for this interrupt.

30INTRXOVERFLOWERROR0x0RW

Receive data path overflow error interrupt enable.

0: the interrupt INTERRUPT1REG.IntRxOverflowError is disabled.

1: the interrupt INTERRUPT1REG.IntRxOverflowError is enabled.

31RXDEBUGCRC0x0RW

Debug mode of the CRC in reception.

0: the received CRC is not saved with payload in RAM (this is the normal mode).

1: the received CRC is saved with payload in RAM (this is a debug mode).

Warning: the SW has to revert the endianness on the CRC data available in the DataBuffer as the hardware stores the value with the same endianness as the PDU.

When set:

  • the packet is accepted whatever the CRC: so if CRC errors, then the RCVOK flag is set anyway and no CRC error flag is raised.
  • the DataPack RAM buffer size must take into account the 3 additional CRC bytes.

Table 214. StatMach.WORD9 register description

BitField nameResetRWDescription
31:0ACCADDR0x0RW

Packet access address.

This value is used in transmission and in reception.

  • - in transmission, it is inserted in the packet after the preamble.
  • - in reception, it is used by the demodulator to detect and accept a received packet.

Note: the nature of a packet (primary advertising, secondary advertising or data) is only defined by TxRxPack.Advertise so StateMach.Accadr = 0x8E89BED6 does not mean that the packet is an advertising packet.

Table 215. StatMach.WORDA register description

BitField nameResetRWDescription
23:0CRCINIT0x0RW

CRC initialization value.

This value is used to initialize the CRC for Data packet or for AUX_SYNC_IND PDU and its subordinate set.

This field is ignored if TxRxPack.CRCINITSEL = 0.

31:24MAXRECEIVEDLENGTH0x0RW

Maximum receive length.

Defines the maximum receive length the Bluetooth LE link controller can accept.

If the length of the received packet is greater than this value, the hardware limits the payload RAM write-back data to the defined maximum length and stops the reception treatment on this defined maximum length (implying also CRC error, etc.).

The ReceiveLengthError event is raised (visible in STATUSREG and if associated interrupt is enabled in INTERRUPT1REG register).

BitField nameResetRWDescription
The received packet is processed normally when the received length located in the received packet header is smaller or equal to StateMach.MaxReceivedLength.
Table 216. StatMach.WORDB register description
BitField nameResetRWDescription
4:0PAPOWER0x0RWPower Amplifier Power. It defines the transmission output power level expressed in dBm as described in Section 25.8.4.2.2: PaPower bit field description .
7:5RESERVED7_50x0RWIgnored on write - read as zero.
13:8HOPINCR0x0RWHop increment.
Defines the hop increment as described in the algorithm 1 of the Bluetooth 5.0 core specification.
15:14RESERVED15_140x0RWIgnored on write - read as zero.
31:16USEDCHANNELFLAGS_15_00x0RWRemapping flags[15:0] for all 37 Bluetooth® LE channels.
The remapping flags are used by the Bluetooth smart algorithm 1 and 2.
If bit(n) = 1, the channel n may be used for reception or transmission.
If bit(n) = 0, the channel n cannot be used for reception or transmission.
Note: this parameter is described in channel classification/channel map in the Bluetooth core specification
Table 217. StatMach.WORDC register description
BitField nameResetRWDescription
21:0USEDCHANNELFLAGS_36_160x0RWRemapping flags[36:16] for all 37 Bluetooth® LE channels.
The remapping flags are used by the Bluetooth algorithm 1 and 2.
If bit(n) = 1, the channel n may be used for reception or transmission.
If bit(n) = 0, the channel n cannot be used for reception or transmission.
Note: this parameter is described in channel classification/channel map in the Bluetooth core specification .
31:22RESERVED31_220x0RWIgnored on write - read as zero.
Table 218. StatMach.WORDD register description
BitField nameResetRWDescription
15:0EVENTCOUNTER0x0RWEvent counter value.
Contains a copy of the event counter value, used by the channel incrementer to compute the algorithm #2. This value can be the Connection event counter, the Periodic Advertising event counter, the BIS event counter or the CIS event counter.
This bit field has to be managed by the SW.
31:16RESERVED31_160x0RIgnored on write – read as zero.
Table 219. StatMach.WORDE register description
BitField nameResetRWDescription
31:0ENCRYPTIV_31_00x0RWInitial vector for encryption [31:0].
This value is used by the AES engine during on the fly AES CCM encryption.
See Bluetooth LE CCM encryption description in Bluetooth LE core specification.
Table 220. StatMach.WORDF register description
BitField nameResetRWDescription
31:0ENCRYPTIV_63_320x0RWInitial vector for encryption [63:32].
This value is used by the AES engine during on the fly AES CCM encryption.
See Bluetooth LE CCM encryption description in Bluetooth LE core specification.
Table 221. StatMach.WORD10 register description
BitField nameResetRWDescription
31:0ENCRYPTK_31_00x0RWEncryption key [31:0].
This value is used by the AES engine during on the fly AES CCM encryption.
See Bluetooth LE CCM encryption description in Bluetooth LE core specification.
Table 222. StatMach.WORD11 register description
BitField nameResetRWDescription
31:0ENCRYPTK_63_320x0RWEncryption key [63:32].
This value is used by the AES engine during on the fly AES CCM encryption.
See Bluetooth LE CCM encryption description in Bluetooth LE core specification.
Table 223. StatMach.WORD12 register description
BitField nameResetRWDescription
31:0ENCRYPTK_95_640x0RWEncryption key [95:64].
This value is used by the AES engine during on the fly AES CCM encryption.
See Bluetooth LE CCM encryption description in Bluetooth LE core specification.
Table 224. StatMach.WORD13 register description
BitField nameResetRWDescription
31:0ENCRYPTK_127_960x0RWEncryption key [127:96].
This value is used by the AES engine during on the fly AES CCM encryption.
See Bluetooth LE CCM encryption description in Bluetooth LE core specification.
Table 225. StatMach.WORD14 register description
BitField nameResetRWDescription
0AOD_nAOA0x0RWIt indicates to the IP_BLE the type of CTE for transmission mode to manage or not an antenna switching sequence.
0: Angle of Arrival (AoA) type is used for the transmission.
1: Angle of Departure (AoD) type is used for the transmission.
This bit field is used only when StatMach.TxMode = 1, TxRxPack.CTEAndSamplingEnable = 1 and StatMach.CTEDisable = 0.
1CTESLOTWIDTH0x0RWIt indicates the CTE Slot width value:
0: CTE time slot is 1 µs: antenna switching to be done every 2 µs.
1: CTE time slot is 2 µs: antenna switching to be done every 4 µs.
This bit field is used by the IP_BLE:
• In transmission for AoD feature (StatMach.TxMode = 1 and StatMach.AoD_nAoA =1) to control the antenna switching timing.
BitField nameResetRWDescription
  • In reception for AoA feature (StatMach.TxMode = 0 and StatMach.AoD_nAoA = 0) to control the antenna switching and IQ sampling timing.
Note:
  • in AoD reception, the CTESlotWidth information is decoded in the CTEInfo bit field of the received frame,
  • in AoA transmission, the transmitter does not need this information as it simply sends the CTE sequence on its unique antenna.
6:2CTETIME0x0RWIt provides to the IP_BLE the duration of the Constant Tone Extension to be appended in transmission mode.
The value is given in 8 µs unit (as the CTETIME bit field of the Bluetooth LE standard).
This bit field is used only when StatMach.TxMode = 1, TxRxPack.CTEAndSamplingEnable = 1 and StatMach.CTEDisable = 0.
7RESERVED70x0RWReserved
14:8MAXIMUMIQSAMPLESNUMBER0x0RWIt indicates the maximum number of IQ samples that is written during a CTE reception.
If the CTETIME leads to more samples, the MR_BLE stops storing the IQ samples in RAM when this number is reached.
This bit field is used only when StatMach.TxMode = 0, TxRxPack.CTEAndSamplingEnable = 1 and StatMach.CTEDisable = 0.
Note: despite the Bluetooth LE standard specifying that the maximum possible number of IQ samples is 82, the MR_BLE offers the possibility to customize the maximum number of IQ sampling to store from 0 to 127.
15RESERVED150x0RWReserved
23:16ANTENNAPATTERNLENGTH0x0RWLength of the antenna switching pattern located at address provided by StatMach.AntennaPatternPtr[31:0].
This bit field is used only when TxRxPack.CTEAndSamplingEnable = 1 and StatMach.CTEDisable = 0.
Note: if the CTE time is longer than the pattern length, the pattern is repeated by the hardware as indicated in the Bluetooth LE standard.
31:24RESERVED31_240x0RWReserved
Table 226. StatMach.WORD15 register description
BitField nameResetRWDescription
31:0IQSAMPLESPTR0x0RWPointer to IQ samples storage buffer (received during CTE reception).
This pointer defines the start address of the RAM location where to store the received IQ samples during a Constant Tone Extension phase.
The IQ samples are stored in words built with 16-bit LSB for Q[15:0] samples and 16-bit MSB for I[15:0].
This bit field is used and verified only when StatMach.TxMode = 0, StatMach.CTEDisable = 0, TxRxPack.CTEAndSamplingEnable = 1 and StatMach.MaximumIQSamplesNumber>0.
Note: this pointer is an absolute address.
Caution: this pointer address must be 32-bit aligned, otherwise the sequence is aborted at the end of the 1 st INIT and STATUSREG.ADDPOINTERROR flag is raised.
Table 227. StatMach.WORD16 register description
BitField nameResetRWDescription
31:0ANTENNAPATTERNPTR0x0RWPointer to Antenna Pattern (for antenna switching sequence).
This pointer defines the start address of the RAM location where to get the Antenna ID pattern to switch antenna during a Constant Tone Extension phase.
Then Antenna pattern is a list of 8-bit Antenna Identifiers.
BitField nameResetRWDescription

The RAM buffer addressed by this pointer must contain at least StatMach.AntennaPatternLength bytes.

This bit field is used and verified only when TxRxPack.CTEAndSamplingEnable = 1, StatMach.CTEDisable = 0 and StatMach.MaximumIQSamplesNumber>0.

Note: this pointer is an absolute address.

Caution: this pointer address must be 32-bit aligned, otherwise the sequence is aborted at the end of the 1 st INIT and STATUSREG.ADDPOINTERROR flag is raised.

25.8.4.2.2 PaPower bit field description

The table below provides the PA power correspondence to program the StateMach.PaPower bit field. The SMPS of the SoC must provide a minimum voltage to reach the targeted PaPower:

For 8 dBm, refer to the note after the table as this PaPower requests a specific configuration. Refer to Section 5.7: PWRC registers for SMPS programming details.

Table 228. StatMach.PaPower values

Value (Hexa)Output power (dBm)Value (Hexa)Output power (dBm)Value (Hexa)Output power (dBm)Value (Hexa)Output power (dBm)
1F+6/+8 (1)17-0.5F-5.97-14.1
1E+516-0.85E-6.96-15.25
1D+415-1.3D-7.85-16.5
1C+314-1.8C-8.854-17.6
1B+213-2.45B-9.93-18.85
1A+112-3.15A-10.92-19.75
19011-49-12.051-20.85
18-0.1510-4.958-13.150-40

1. Several settings are needed to reach the +8 dBm in transmission:

Warning: the LDO_ANA_ENG[1] = RFD_LDO_TRANSFO_BYPASS bit must be reset in reception.

25.8.4.3 TxRxPack RAM table

Table 229. TxRxPack RAM table

WordByte addrR/W76543210
by IP_BLE
0x000x00RNextPtr[7:0]
0x01NextPtr[15:8]
0x02NextPtr[23:16]
0x03NextPtr[31:24]
0x010x04RIncChanSN_ENAdvertiseCrclnitSelCTEAndSamplingEnableKeepSemaReqChanAlgo2SelCalReq
0x05subEventChanAlgo2DisableWhiteningTxdataReadyAllTableReadyNextTxMode
0x06
0x07
0x020x08R/WDataPtr[7:0]
0x09DataPtr[15:8]
0x0ADataPtr[23:16]
0x0BDataPtr[31:24]
0x030x0CRtimer2[7:0]
0x0Dtimer2[15:8]
0x0ETrigDoneTrigRcvTimer2Entimer2[19:16]
0x0FIntRcvOkIntRcvCrcErrIntTimeCaptureIntRcvCmdIntRcvNoMdIntRcvTimeoutIntDoneIntTxOk

Note:

25.8.4.3.1 TxRxPack RAM table register list

Table 230. TxRxPack

Address offsetNameRWResetDescription
0x00WORD0RW0x00000000Word0 register
0x04WORD1RW0x00000000Word1 register
0x08WORD2RW0x00000000Word2 register
0x0CWORD3RW0x00000000Word3 register

Table 231. TxRxPack.WORD0 register description

BitField nameResetRWDescription
31:0NEXTPTR0x0RW

Next pointer address entry of the linked list.

Points to the next transmit or receive packet. The user must enter the absolute address, not an offset.

Caution: This pointer must be 32-bit aligned or else STATUSREG.AddPointError is set (and INTERRUPT1REG.AddPointError if GlobalStatMach.IntAddPointError = 1).

Table 232. TxRxPack.WORD1 register description

BitField nameResetRWDescription
0CALREQ0x0RW

Calibration request.

0: RF PLL calibration feature is disabled. This setting is used when this calibration has already been done and if the radio did not go to low-power state.

1: the RF PLL calibration feature is enabled. It must be performed at each channel frequency change or after the wakeup.

1CHANALGO2SEL0x0RW

Channel hopping algorithm selection.

if TxRxPack.incchan = 0, this bit field has no effect.

if TxRxPack.incchan = 1:

0: the algorithm #1 is used for the channel hopping for data channel. For primary advertising, channels are automatically incremented as follows: 37->38->39->37->etc. 1: the algorithm #2 is used for the channel hopping in data connection or for periodic advertising packets.

Note: if TxRxPack.IncChan=0 then ChanAlgo2Sel bit has no effect.

2KEEPSEMAREQ0x0RW

It indicates if the IP_BLE needs to keep the RRM token at the end of the current transfer.

0: the token request is cleared when the controller starts its context saving.

1: the token request is maintained high at the end of the sequence.

Caution: This bit MUST be set to fit the IFS = 150 µs constraint.

Indeed, when the token is released, the Radio FSM switches back to IDLE mode. The radio FSM needs around 45 µs more (ENA_RF_REG and ENA_CUR states) to go back to ACTIVE2 state on next Bluetooth LE sequence trig event.

3CTEANDSAMPLINGENABLE0x0RW

It indicates the handling of the Constant Tone Extension for this packet.

In transmission:

0: the IP_BLE does not append CTE sequence at the end of the packet.

1: the IP_BLE appends any CTE sequence at the end of the packet.

In reception:

0: the IP_BLE manages the CTE detection only to extract the CTETIME information, keeping reception active until the end of the CTE phase but does not manage any other features like tie slot sampling or potential antenna switching. The goal is to keep the coherency about “last bit on the air time stamp” for TIFS management and no more.

BitField nameResetRWDescription
1: the IP_BLE manages the CTE detection and reacts accordingly to information extracted from the received frame to manage sampling time slots and potential antenna switching.
4CRCINITSEL0x0RWCRC initialization value selector.
0: the transmit and the receive block initialize their CRC with a constant equal to: 0x5555555.
1: the transmit and the receive block initialize their CRC with the value defined by StateMach.CrcInit.
5ADVERTISE0x0RWAdvertise packet format.
0: the packet format stored in RAM or to be received is a data packet format.
1: the packet format stored in RAM or to be received is an advertise packet format.
6SN_EN0x0RWAutomatic SN, NESN hardware mechanism enable.
0: automatic SN/NESN hardware mechanism is disabled. The receive pointers and transmit pointers are systematically shifted independently of SN, NESN bits and also on a receive timeout sequence.
1: automatic SN/NESN hardware mechanism is enabled.
7INCCHAN0x0RWAutomatic channel incrementer enable.
When enabled, the automatic channel incrementer takes as input StateMach.UChan, TxRxPack.Advertise, TxRxPack.ChanAlgo2Sel, StateMach.Remap_chan, StateMach.hopincr, StateMach.UsedChannelFlags, StateMach.connEventCounter and StateMach.paEventCounter.
0: automatic channel incrementer is disabled.
1: automatic channel increment is enabled.
8NEXTTXMODE0x0RWFlag indicating if next TxRx packet to be handled by the link controller StateMach is a receive packet or a transmit packet.
The Sequencer overloads StateMach.TxMode value with NextTxMode value during each RAM write back phase.
0: next TxRx packet is a receive packet.
1: next TxRx packet is a transmit packet.
9ALLTABLEREADY0x0RWAll table data ready.
This bit is checked at the beginning of the 2 nd INIT phase to ensure bit fields related to on-going transfer and about to be read are relevant.
0: the RAM table information related to the on-going transfer is not ready. The transmission is not started by the Sequencer.
1: the RAM table information related to the on-going transfer is ready. The transmission is started by the Sequencer.
Note: the goal of this bit is to allow the software to block a transfer if RAM table update is not over.
10TXDATAREADY0x0RWTransmission data ready.
This bit is checked only if the current transfer is a transmission.
The check is done at the beginning of the DATA INIT phase to ensure that at least a few bytes of the transmission payload are already written in the data buffer.
This bit allows doing an "On the fly" data buffer memcpy while transmission has already started on the antenna.
0: the transmission payload is not ready. The transfer is not started by the Sequencer.
1: the transmission payload is ready so the transfer is started by the Sequencer.
Note: the recommendation for transmission data payload is to set this TxDataReady bit only when at least 16 bytes of data are available in the payload data buffer.
11RESERVED110x0RWReserved. It must be kept at 0.
12DISABLEWHITENING0x0RWWhitening Disable.
BitField nameResetRWDescription
0: the whitening is enabled in the transmit block and in the receive block.
1: the whitening is disabled in the transmit block and in the receive block. This may be used for debug or during official Bluetooth compliance test.
13SUBEVENTCHANALGO20x0RWSelect the SubEvent Channel computation in the channel incrementer block when the algorithm #2 is used.
Used only when IncChan=1 and ChanAlgo2Sel=1.
31:14RESERVED31_140x0RWReserved.
Table 233. TxRxPack.WORD2 register description
BitField nameResetRWDescription
31:0DATAPTR0x0RWData pointer address.
Points to the data packet linked with TxRxPack (called DataPack in this document).
This data packet contains the header and the data, excluding the preamble, the access address and the CRC.
The Bluetooth LE link layer writes this packet in RAM in case of reception and reads it from RAM in case of transmission.
Note: This pointer has no memory address alignment requirement.
However, the software must write an absolute address (not an offset). If the 8-bit MSB part of the pointer value is not equal to the RAM 8-bit MAB address, an AddPointError flag is raised.
Table 234. TxRxPack.WORD3 register description
BitField nameResetRWDescription
19:0TIMER20x0RWTimer2 triggering value setting.
Defines the delay before next Timer2 trigger event if TxRxPack.Timer2En = 1.
Time unit is in microseconds.
Note: the Timer2 delay starts a bit earlier than the end of the on-going sequence (on last transmitted bit or last received bit and before the context saving phase).
20TIMER2EN0x0RWTimer2 enable (for next timer trig).
0: Timer2 disabled at the end of this current packet.
1: Timer2 is enabled at the end of this current packet.
21RESERVED210x0RWIgnored on write - read as zero.
22TRIGRCV0x0RWTime capture enable on received preamble and access address pattern detection.
0: no time stamping requested on preamble + access address detection.
1: the interpolated absolute time is captured in TIMERCAPTUREREG when the demodulator detects the preamble + access address in the received bit stream.
When this bit is set and if a time capture occurs, the STATUSREG.TIMERCAPTURETRIG is set to 1. An interrupt is raised if enabled (associated to INTERRUPT1REG.TIMERCAPTURETRIG is set to 1).
This bit must be set to 0 in transmission TxRxPack table not to disturb other time capture options.
Note: if GlobalStatMach.TimeCapture or TxRxPack.TrigDone bit is set, the TIMERCAPTUREREG IP_BLE APB register shows this last event trig value at the end.
23TRIGDONE0x0RWTime capture enable on "On air" last transmitted/received bit.
0: no time stamping in TIMERCAPTUREREG is achieved, no interrupt is generated by TrigDone.
1: the interpolated absolute time is captured in TIMERCAPTUREREG when the demodulator receives the last bit of the bit stream or when the last transmitted has been shifted out of the transmit block.
When this bit is set and if a time capture event occurs, the STATUSREG.TIMERCAPTURETRIG is set to 1. An interrupt is raised if enabled (associated to INTERRUPT1REG.TrigDone set to 1).
BitField nameResetRWDescription
Note: if GlobalStatMach.TimeCapture or TxRxPack.TrigRcv bit is set, the TIMERCAPTUREREG Bluetooth LE APB register shows this last event trig value at the end.
24INTTXOK0x0RWInterrupt enable of "good reception of transmitted packet is confirmed by the peer device".
0: the interrupt INTERRUPT1REG.TXOK is disabled
1: the INTERRUPT1REG.TXOK is enabled.
Note: this interrupt has to be enabled in the RxPack table as the feature is active at the end of a reception.
25INTDONE0x0RWDone interrupt enable.
0: the INTERRUPT1REG.DONE is disabled.
1: the INTERRUPT1REG.DONE is enabled.
26INTRCVTIMEOUT0x0RWReceive timeout interrupt enable.
0: the interrupt INTERRUPT1REG.RCVTIMEOUT is disabled.
1: the interrupt INTERRUPT1REG.RCVTIMEOUT is enabled.
27INTRCVNOMD0x0RWNo more Data (end of connection found) interrupt enable.
0: the interrupt INTERRUPT1REG.RCVNOMD is disabled .
1: the INTERRUPT1REG.RCVNOMD is enabled.
28INTRCVCMD0x0RW"Received packet is a command" interrupt enable.
0: the INTERRUPT1REG.RCVCMD is disabled.
1: the INTERRUPT1REG.RCVCMD is enabled.
29INTTIMECAPTURE0x0RW"Time Capture occurred" interrupt enable.
0: the interrupt INTERRUPT1REG.INTTIMECAPTURETRIG is disabled.
1: the interrupt INTERRUPT1REG.INTTIMECAPTURETRIG is enabled.
Note: the event(s) responsible for the interrupt can be the Sequencer Time Capture and/or the TrigDone and/or the TrigRcv events.
30INTRCVCRCERR0x0RWReceive CRC error interrupt enable.
0: the interrupt INTERRUPT1REG.RCVCRCERR is disabled.
1: the interrupt INTERRUPT1REG.RCVCRCERR is enabled.
31INTRCVOK0x0RWReceive OK interrupt enable.
0: the interrupt INTERRUPT1REG.RCVOK is disabled.
1: the interrupt INTERRUPT1REG.RCVOK is enabled

25.8.4.4 DataPack RAM table

The DataPack tables are the data buffer for reception or transmission packet. They are pointed by the TxRxPack.DataPtr value.

Their content corresponds to the PDU (header bytes, payload and potentially MIC for encrypted packets).

25.8.5 Complementary information

25.8.5.1 Pointers management and packet counter

The Sequencer updates the pointers and packet counters at the end of a transmission or a reception, depending on some parameters.

Figure 205. Pointer management and packet counter increment algorithm shows the actions made on the pointers and packet counter.

Figure 205. Pointer management and packet counter increment algorithm

Flowchart for pointer management and packet counter increment algorithm. It includes RAM read and write lists, and a decision tree for tx_done_pulse and rcv_done_pulse handling.

RAM read:

encrypted_block = EncryptOn & not(i_pkt_length_is_zero);

Flowchart Logic:

RAM writeback:

Flowchart for pointer management and packet counter increment algorithm. It includes RAM read and write lists, and a decision tree for tx_done_pulse and rcv_done_pulse handling.

25.8.5.2 Channel number management

The Bluetooth LE link layer manages the channel frequency through different parameters located in the RAM table.

A channel incrementer allows calculating a new channel if TxRxPack.IncChan bit is set. The algorithm (#1 or #2) is selected through the TxRxPack.ChanAlgo2Sel bit.

In addition, a remap is done to fit with the StatMach.UserChannelFlags if TxRxPack.IncChan bit is set.

Figure 206. Bluetooth LE link layer channel management overview presents an overview of the channel number management.

Figure 206. Bluetooth LE link layer channel management overview

Figure 206. Bluetooth LE link layer channel management overview. This block diagram shows the internal logic for channel management. Inputs include 'advertise', 'ChanAlgo2Sel', 'Uchan[5:0]', 'hopInc[5:0]', 'EventCounter[15:0]', 'SubEventChanAlgo2', 'UsedChannelFlags[36:0]', and 'Remap_Chan[5:0]'. The logic involves an AND gate for advertising, an incrementer for Algorithm #1, and a complex PRNG and incrementer block for Algorithm #2. Multiplexers select between these algorithms based on control signals. The final output 'UChan' is written back to a RAM table, while 'Remap_Chan' is passed through a LUT to become the 'Physical channel'. A color legend defines signal types: Purple for data read from RAM, Dark red for data written back to RAM, Dark orange for links to primary advertise, Green for links to Algorithm #1, and Blue for links to Algorithm #2.
Figure 206. Bluetooth LE link layer channel management overview. This block diagram shows the internal logic for channel management. Inputs include 'advertise', 'ChanAlgo2Sel', 'Uchan[5:0]', 'hopInc[5:0]', 'EventCounter[15:0]', 'SubEventChanAlgo2', 'UsedChannelFlags[36:0]', and 'Remap_Chan[5:0]'. The logic involves an AND gate for advertising, an incrementer for Algorithm #1, and a complex PRNG and incrementer block for Algorithm #2. Multiplexers select between these algorithms based on control signals. The final output 'UChan' is written back to a RAM table, while 'Remap_Chan' is passed through a LUT to become the 'Physical channel'. A color legend defines signal types: Purple for data read from RAM, Dark red for data written back to RAM, Dark orange for links to primary advertise, Green for links to Algorithm #1, and Blue for links to Algorithm #2.

When the channel incrementer hardware block is used (IncChan = 1), the selection of the algorithm must be managed by the SW following Table 235. Truth table to select the correct algorithm below.

Table 235. Truth table to select the correct algorithm

TxRxPackSelected algorithm
AdvertiseChanAlgo2SelSubEventChanAlgo2
00XAlgorithm #1 is used for the channel hopping for data channel.
10XPrimary advertising channels selected with automatic incrementation as follows:
37 → 38 → 39 → 37 → 38...
Note: this configuration should not be used when running on secondary advertising channels (undefined behavior).
010Algorithm #2 for an event channel (connection, secondary Advertising or CIS/BIS event) is used for the channel hopping for data channel.
011Algorithm #2 for a subevent channel (for example CIS/BIS subevent) is used for the channel hopping for data channel.
110Algorithm #2 is used for the channel hopping for Periodic Advertising channel.
Note: this configuration should not be used when running on primary advertising channels (undefined behavior).
111Not supposed to be used with Bluetooth specification/use-cases.

In addition, the following table lists the different bit field in RAM tables linked to the channel number management and indicates which ones are used at hardware level according to targeted algorithm (#1 or #2).

Table 236. RAM table bit fields usage versus algorithm number

Bit fieldRAM tableRead/write-backConsidered
for Algo #1for Algo #2
InChanTxRxPackReadYesYes
ChannelAlgo2SelTxRxPackReadYesYes
EventCounter[15:0]StatMachReadNoYes
SubEventChanAlgo2TxRxPackReadNoYes
advertiseTxRxPackReadYesYes
accaddr[31:0]StatMachReadNoYes
UsedChannelFlags[36:0]StatMachReadYesYes
hopincr[5:0]StatMachReadYesNo
UChan[5:0]StatMachRead / Written backYesNo
Remap_chan[5:0]StatMachRead / Written backYesYes

25.8.5.3 Time capture

The IP_BLE can capture the absolute time on specific events.

The capture feature is enabled inside the RAM tables and the result is provided in an IP_BLE APB register called TIMECAPTUREREG[31:0].

The events that can be time stamped / captured are:

The time capture service is associated to an interrupt flag that is enabled through the TxRxPack.IntTimeCapture bit and status / interrupt flag at the end of the sequence is available in the IP_BLE APB STATUSREG.TIMECAPTURETRIG (and INTERRUPT1REG.TIMECAPTURETRIG if interrupt is enabled inside the TxRxPack table).

If several events are requested to be captured on a same sequence (e.g. Sequencer reaches end of 1 st INIT and “on the air” last bit), the latest occurrence is the available time inside the TIMECAPTUREREG register.

On a transmission sequence:

Table 237. Transmission sequence

GlobStatMachTxRxPackIP_BLE APB
TimeCaptureTimeCaptureSelTrigRcvTrigDoneTIMECAPTUREREG
0xx0Sequencer end of 1 st INIT
10x0Sequencer end of 1 st INIT
11x0Sequencer end of DATA INIT
xxx1“On the air” last transmitted bit

Table 238. Reception sequence

GlobStatMachTxRxPackIP_BLE APB
TimeCaptureTimeCaptureSelTrigRcvTrigDoneTIMECAPTUREREG
0x00Sequencer end of 1 st INIT
1000Sequencer end of 1 st INIT
1100Sequencer end of DATA INIT
xx10Preamble + Access Address detection time
xxx1"On the air" last received bit

25.8.5.4 Sequencer timings recommended values

The 2 nd INIT and DATA INIT steps of the Sequencer use several timing parameters in addition to the init_radio_delay. This generic name covers 4 different durations depending on the transfer configuration (Tx/Rx, PLL calibration/No calibration).

For reminder, the Radio FSM and the Sequencer run in parallel with almost no handshake from the start of the 2 nd INIT phase.

A set of timings is programmed in the GlobalStatMach to guarantee the Sequencer starts the transmission (respectively reception) phase with respect to the Radio FSM progress.

Figure 207. Timings of an Rx sequence and Figure 208. Timings of a Tx sequence show a summary of involved timings.

Figure 207. Timings of an Rx sequence

Timing diagram for an Rx sequence showing the relationship between Sequencer, Radio FSM, and IP_BLE APB. The diagram illustrates the sequence of events from the Sequencer trigger event through the 1st INIT, 2nd INIT, and DATA INIT phases, correlating them with the Radio FSM states (IDLE, ACTIVE1, ACTIVE2, SYNTH_SETUP, CALIB11, LOCKRXTX, EN_RX, RX) and IP_BLE APB signals (TimeCapture, TimeCaptureSel, TrigRcv, TrigDone). Key timing parameters like init_delay, init_radio_delay, ConfigEndDuration, and TxDataReadyChk are shown. A note indicates that the Radio FSM must be in ACTIVE2 at the start of the 2nd INIT phase.
Timing diagram for an Rx sequence showing the relationship between Sequencer, Radio FSM, and IP_BLE APB. The diagram illustrates the sequence of events from the Sequencer trigger event through the 1st INIT, 2nd INIT, and DATA INIT phases, correlating them with the Radio FSM states (IDLE, ACTIVE1, ACTIVE2, SYNTH_SETUP, CALIB11, LOCKRXTX, EN_RX, RX) and IP_BLE APB signals (TimeCapture, TimeCaptureSel, TrigRcv, TrigDone). Key timing parameters like init_delay, init_radio_delay, ConfigEndDuration, and TxDataReadyChk are shown. A note indicates that the Radio FSM must be in ACTIVE2 at the start of the 2nd INIT phase.

Figure 208. Timings of a Tx sequence

Timing diagram for a Tx sequence showing Sequencer, Radio FSM, and Transmitter block interactions. The diagram illustrates the sequence of events from a sequencer trigger to the start of data transmission, including INIT steps, state transitions in the Radio FSM, and timeout mechanisms in the Transmitter block.

The diagram shows the timing of a transmit (Tx) sequence across three main components: Sequencer, Radio FSM, and Transmitter block.

Timing diagram for a Tx sequence showing Sequencer, Radio FSM, and Transmitter block interactions. The diagram illustrates the sequence of events from a sequencer trigger to the start of data transmission, including INIT steps, state transitions in the Radio FSM, and timeout mechanisms in the Transmitter block.

Reminder on main constraints for a transmission:

Reminder on main constraints for a reception:

Table 239. Delays for Sequencer 2 nd INIT step proposal shows some recommendations/proposals on values for some timings programmed through RAM tables.

Table 239. Delays for Sequencer 2 nd INIT step proposal

GlobalStatMach table bit fieldRecommended valueComments
TransmitNoCalDelayChk[7:0]0x32 (50d)Theoretical exact duration from ACTIVE2 to Tx state is 52 µs. Keep some margin to avoid timeout after Tx state. Then, use the TxReadyTimeout[7:0] to define the duration of the wait Tx state info for the transmit block.
TransmitCalDelayChk[7:0]0x5A (90d)Theoretical exact duration from ACTIVE2 to Tx state is 92 µs. Keep some margin to avoid timeout after Tx state. Then, use the TxReadyTimeout[7:0] to define the duration of the wait Tx state info for the transmit block.
ReceiveNoCalDelayChk[7:0]0x32 (50d)Theoretical exact duration from ACTIVE2 to Rx state is 50 µs. The delay can be programmed to 50us.
GlobalStatMach table bit fieldRecommended valueComments
ReceiveCalDelayChk[7:0]0x5A (90d)Theoretical exact duration from ACTIVE2 to Rx state is 90 µs. The delay can be programmed to 90 µs.
ConfigEndDuration[7:0]at least 10
max is
init_radio_delay
Note:
  • if this value is too small, the Sequencer may not do all the AHB RAM table accesses on time.
  • the user must take margin (not use the minimum value) when a concurrent AES operation occurs during the 2 nd INIT of the Sequencer (Manual AEs or LE Privacy).
TxDataReadyCheck[7:0]kbetween 1 and 5Can be increased to take more margin. Only impact is a potential useless extra waiting time before aborting when the Radio FSM / the sequence is broken.
TxReadyTimeout[7:0]at least 5Can be increased to take more margin. Only impact is the Tx sequence abort is delayed with the same additional delay in case of real Radio FSM Tx sequence issue.

25.8.6 Angle of arrival (AoA) and angle of departure (AoD)

The Bluetooth Core Specification v5.1 introduces new capabilities that support higher-accuracy direction finding. The Bluetooth direction finding exploits some of the fundamental properties of radio waves by taking several phases and amplitude measurements (across different antenna) that can be used in direction finding calculations at precise intervals in a process known as In-phase and Quadrature Sampling (IQ sampling).

Applications use this data in calculations that involve trigonometry and information about the design of the antenna array.

A single IQ sample consists of the wave's amplitude and phase angle represented as a set of Cartesian coordinates. Applications can transform this Cartesian representation into corresponding polar coordinates that yield the phase angle and the amplitude value.

The existing RAM tables have been upgraded to support the new hardware features (CTE, I/Q sampling and Antenna Switching) added to support the direction-finding topic.

25.8.6.1 RAM tables and registers impact

The existing RAM tables have been upgraded to support the new hardware features (CTE, I/Q sampling and Antenna Switching) added to support the direction-finding topic.

25.8.6.1.1 GlobalStatMatch RAM table

The GlobalStatMach table size has not been impacted: still 7 words = 28 bytes.

A new bit field has been added in the RFU existing Word6: DefaultAntennaId[6:0] bit field in Word6[6:0].

This bit field is mandatory for the configurations where more than one antenna is present on the board.

This bit field indicates which antenna identifier must be used to transmit or receive packets without CTE or packet body (Preamble, Access Address, PDU, and CRC) for CTE enabled packets. This value is transmitted through the corresponding pads of the device to the external component located on the board to switch on the requested antenna.

25.8.6.1.2 StatMach RAM table

The StatMach RAM table size has been increased by 3 words for a total of 23 words = 92 bytes.

The additional bit fields are the following:

25.8.6.1.3 TxRxPack RAM table

The TxRxPack RAM table size has been decreased by 1 word for a total of 4 words = 16 bytes.

A new CTEAndSamplingEnable bit has been added in Word1[3]. The role of this bit is to indicate to the MR_BLE IP:

25.8.6.2 Manage the feature in transmission

If the SW wants to append a Constant Tone Extension at the end of the frame, it has to:

In case of encrypted frame, the AES encrypts or not the HEADER3 thanks to the TxRxPack.Advertise information.

Note:

The transmit block does not decode on the fly the bytes provided by the RAM Data Buffer (located at DataPtr address) to identify the CTE information. It relies on the information provided through the RAM table. It is the responsibility of the SW to guarantee the coherency between the CTE related bit field in RAM and the data in RAM that corresponds to the CTEInfo bit field inside the frame on the air.

In addition to the CTE append on the transmitted frame, if the device must manage the antenna switching (AoD configuration), the SW has to:

In parallel, the SW must ensure the SoC GPIOs have been programmed in the accurate configuration to output the Antenna Identifier and enable signals to the external component.

Note: To execute a transmission without CTE phase appended at the end of the frame, the SW just must set the StatMach.CTEDisable bit to 1.

25.8.6.3 Manage the feature in reception

25.8.6.3.1 CTE detection and decoding

If the SW wants the MR_BLE to execute a reception with the ability to detect if the received frame is a packet with or without CTE, it has to:

In case of encrypted frame, the AES decrypts or not the HEADER3 thanks to the TxRxPack.Advertise information.

Table 240. Behavior versus CTEDisable and CTEAndSampling bits value shows the behavior according to the combination between TxRxPack.CTEAndSamplingEnable and StatMach.CTEDisable .

Table 240. Behavior versus CTEDisable and CTEAndSampling bits value

ConfigurationBehavior
StatMach.CTEDisable = 1 and
TxRxPack.CTEAndSamplingEnable =
“don’t care”
The receiver behaves as a Bluetooth® LE SIG 5.0 or before.
  • • the receiver does not try to decode any CTEInfo bit field inside the received frame,
  • • the reception ends after CRC (if no DisableCRC bit set),
ConfigurationBehavior
  • the Timer2 (if enabled) starts at the end of the CRC.
StatMach.CTEDisable = 0 and
TxRxPack.CTEAndSamplingEnable = 0

The receiver detects if CTE packet or not but does not sample the I/Q. This configuration allows keeping the synchronization on T IFS with the transmitting device.

  • the receiver decodes any CTEInfo bit field inside the received frame if present,
  • the reception ends after the CRC (if not a CTE packet) or after the CTE phase (if CTE packet detected),
  • the Timer2 (if enabled) starts at the end of the reception (after CRC or CTE).
StatMach.CTEDisable = 0 and
TxRxPack.CTEAndSamplingEnable = 1

The receiver detects if CTE packet or not and manages the I/Q sampling.

  • the receiver decodes any CTEInfo bit field inside the received frame if present,
  • the reception ends after the CRC (if not a CTE packet) or after the CTE phase (if CTE packet detected),
  • the Timer2 (if enabled) starts at the end of the reception (after CRC or CTE),
  • the MR_BLE stores the I/Q sampling in RAM (according to options programmed in the RAM tables by the SW).

During the reception, the receiver extracts from the frame the CTE info like duration, slot width and type. The only configuration for which the MR_BLE needs to get the information from the RAM table is the Angle of Arrival (AoA). In this specific case, the slot width is not indicated in the CTEType[1:0] bit field:

In AoA, the receiver device is the owner of the antenna switching and of the time slot width choice. In this specific configuration, the SW must provide the information through the StatMach.CTESlotWidth bit.

25.8.6.3.2 I/Q sampling

The MR_BLE stores the I/Q samples in words built as follows:

As the AHB master writes both I and Q in one 32-bit access in RAM, the IQSamplesPtr must contain a 32-bit aligned address.

To manage a reception in CTE with I/Q sampling, the SW has:

At the end of the reception, some status bit fields are provided to give visibility on what has been received:

25.8.6.3.3 Antenna switching

In addition to the CTE detection and the I/Q sampling storage, in AoA, the device has to manage the antenna switching. To achieve this, the SW has to:

In parallel, the SW must ensure the SoC GPIOs have been programmed in the accurate configuration to output the Antenna Identifier and enable signals to the external component.

Note: The hardware automatically restarts the antenna switching pattern from its first element if there are more CTE slots than the AntennaLength value provided in the StatMach.

25.8.6.4 Error management

Several error cases are treated at hardware level concerning CTE, I/Q sampling and antenna switching.

25.8.6.4.1 Invalid CTEType received

Expected values for the CTEType[1:0] bit field inside the CTEInfo are “00”, “01” or “10”. If the receiver decodes a CTEType[1:0] = “11” in a CTE packet, it behaves as if TxRxPack.CTEAndSamplingEnable = 0 (CTE time duration respected for reception phase but no I/Q sampling nor antenna switching management).

25.8.6.4.2 CTE length outside [20..2] window

The MR_BLE IP has been designed to support CTE length outside the standard limit to offer the possibility to develop proprietary versions or for trials in lab.

In reception:

In transmission:

25.8.6.4.3 CTE requested while long range is selected

The Bluetooth core specification 5.1 standard indicates the Constant Tone Extension feature does not concern the Coded PHY packets (long range configuration).

If the MR_BLE IP is in front of a contradictory configuration indicating coded PHY format and CTE enabled, the transfer is managed as a Coded PHY without CTE.

In reception, no CTE detection is activated (so no I/Q sampling nor antenna switching is managed either).

In transmission:

25.8.6.4.4 IQSamplesPtr[31:0] or AntennaPtr[31:0] not 32-bit aligned

The StatMach.IQSamplesPtr[31:0] and the StatMach.AntennaPtr[31:0] must contain a 32-bit aligned address.

For IQSamplesPtr, an error is detected if:

For AntennaPtr, an error is detected if:

The associated error is a ConfigError (no RF transfer as the Sequencer aborts after the 1st INIT step). Refer to Section 25.8.2.3.4: Configuration error for details on the ConfigError behavior.

25.8.6.4.5 IQSamplesPtr[31:24] or AntennaPtr[31:24] not equal to device RAM base address[31:24]

The StatMach.IQSamplesPtr[31:24] and the StatMach.AntennaPtr[31:24] must contain a value equal to the RAM base address[31:24].

For IQSamplesPtr, an error is identified if:

For AntennaPtr, an error is detected if:

The associated error is an AddPointError (no RF transfer as the Sequencer aborts after the 1st INIT step). Refer to Section 25.8.2.3.5: Address pointer error for details on the AddPointError behavior.

25.8.6.4.6 I/Q sampling storage overflow

In case of too high latency in AHB transfers between the MR_BLE IP and the RAM inside the device, some received I/Q samples could be overwritten inside the internal buffer before being transferred into the SoC RAM.

In this case:

Then, the SW has the choice to handle or not the partial list of received I/Q samples.

Note: This error is not supposed to occur as an internal FIFO has been put in place to buffer some I/Q samples and is supposed to be dimensioned according to the device bandwidth.

25.8.6.4.7 Antenna pattern length=1

The Bluetooth core specification 5.1 for the HCI_LE_Set_Connection_CTE_Receive_Parameters indicates the Length_of_switching_Pattern parameter must be at least 2, the MR_BLE IP, at hardware level, supports an antenna pattern length=1.

In this case, the reference period and the sample slots are done on the same antenna.

25.8.6.4.8 Antenna pattern read underflow

In case of too high latency in AHB transfers between the MR_BLE IP and the RAM inside the device, the next antenna ID may not be ready inside the antenna switching sub-block when the next antenna switching event is supposed to occur.

In this case:

Note: this error is not supposed to occur as an internal FIFO is present to store some anticipated antenna ID and is supposed to be dimensioned according to the device bandwidth.

25.8.7 AES

The MR_BLE IP embeds an AES hardware accelerator. This accelerator is encapsulated in a wrapper allowing a single accelerator core to be shared for 3 different actions/modes:

  1. 1. on-the fly encryption
  2. 2. manual encryption
  3. 3. LE privacy

In case of simultaneous requests for several modes, a priority mechanism serves the requester in the same order as the list order above.

25.8.7.1 On the fly encryption

This mode corresponds to an on-going Bluetooth encrypted transmission/reception.

In transmission, the AES encrypts the data read from the RAM DataPack table before transmitting them.

In reception, the AES decrypts the received data before storing them in the DataPack RAM table.

This mode is activated as soon as an RF transfer is done with the StatMach.EncryptOn bit set to '1'.

The on the fly AES feature can discriminate the part of the frame not concerned by encryption like the HEADER parts (including the HEADER3 when CTE is active in the frame).

Warning: the isochronous channels encryption is not managed by this hardware feature and needs to be done at SW level without enabling the hardware encryption.

This mode is the most priority mode and is always served first in case of concurrent requests not to impact the Bluetooth communication.

25.8.7.2 Manual encryption

The goal of this mode is to share the AES core embedded with the CPU of the SoC. As the Bluetooth® LE link layer does not use this hardware resource all the time, the idea is to let the CPU process its own encryptions through this hardware accelerator. It avoids adding an extra AES core to the SoC if the share usage is acceptable.

A set of registers is present to manage this manual encryption (see Section 25.8.9.1: IP_BLE controller register list ).

The process to fulfill a manual encryption is the following:

  1. 1. Enter the key in the MANAESxKEYREG registers (x from 0 to 3).
  2. 2. Enter the text to encrypt (16 bytes by computation) in the MANAESCLEARTEXTxREG (x from 0 to 3) registers.
  3. 3. Possibility to enable an interrupt to be informed when the computation is over by setting the MANAESCMDREG[1] = INTENA bit.
  4. 4. Launch the encryption by setting the MANAESCMDREG[0] = START bit.
  1. 5. Wait for end of computation:
    1. a. If the interrupt mode is enabled, the interrupt line dedicated to AES (irq_BLE_int2 aka BLE_AES) is raised and the CPU gets the reason in the Interrupt2Reg[0] = AESMANENDINT bit.
    2. b. Otherwise, the SW has to poll the MANAESSTATREG[0] = BUSY bit until it is cleared by hardware.
  2. 6. If interrupt is used, write 1 in the Interrupt2Reg[0] = AESMANENDINT bit to clear the flag.
  3. 7. The encrypted data / result is available in the MANAESCYPTERTEXTxREG (x from 0 to 3) registers.
  4. 8. If needed, the SW can restart from step 1 or step 2.

25.8.7.3 LE privacy

In MR_BLE IP, the Bluetooth® LE link layer controller provides a hardware solution for the LE privacy resolution. The process to fulfill the LE privacy resolution is the following:

  1. 1. The processor must provide the AES block with:
    1. a. the address in RAM where to find the 128-bit key array through the AESLEPRIVPOINTERREG IP_BLE APB register.
    2. b. the reference HASH through the AESLEPRIVHASHREG IP_BLE APB register.
    3. c. the random number through the AESLEPRIVPRANDREG IP_BLE APB register.
    4. d. the maximum key number through the AESLEPRIVCMDREG IP_BLE APB register (NBKEYS bit field).
  2. 2. Enable the AES LE privacy interrupt by setting the INTENA bit in the AESLEPRIVCMDREG IP_BLE APB register.
  3. 3. Launch the calculation by setting the Start bit in the AESLEPRIVCMDREG IP_BLE APB register (auto-cleared bit).
  4. 4. At the end of computation, the interrupt line dedicated to AES (irq_BLE_int2 aka BLE_AES) is raised and the CPU gets the reason in the INTERRUPT2REG [1] = AESLEPRIVINT bit.
  5. 5. Write 1 in the INTERRUPT2REG[1] = AESLEPRIVINT bit to clear the flag.
  6. 6. The results are then available in the following registers / bit fields:
    1. a. the KEYFIND bit in the AESLEPRIVSTATREG IP_BLE APB register indicates if a key has been found (KEYFIND bit = 1) or not (KEYFIND) = 0 in the list,
    2. b. if KEYFIND = 1, the KEYFINDINDEX[7:0] bit field in the AESLEPRIVSTATREG IP_BLE APB register indicates which key of the array is the one found.

25.8.8 MSB first feature

The MSB first feature, not compliant with the Bluetooth standard, is added to extend potential proprietary protocols.

The principle is:

The bit endianness modification is done only on the PDU part of the packet. This means:

However, the MR_BLE receive block is able to manage the 2 first bytes of the PDU regardless of the endianness option:

Figure 209. MSBFirst feature principle overview

Figure 209. MSBFirst feature principle overview diagram. The diagram shows two data paths: TX (top) and RX (bottom). The TX path consists of RAM -> encryption -> CRC generation -> whitening -> RF Interface -> TX operation. The RX path consists of RF Interface -> RX operation -> dewhitenning -> CRC checking -> decryption -> RAM. Annotations indicate 'Swap endianness here' at the CRC generation and CRC checking stages.
graph LR
    subgraph TX
        RAM[RAM] --> encryption[encryption]
        encryption --> CRC_gen[CRC generation]
        CRC_gen --> whitening[whitenning]
        whitening --> RF[RF Interface]
        RF --> TX_op[TX operation]
    end
    subgraph RX
        RF --> RX_op[RX operation]
        RX_op --> dewhitenning[dewhitenning]
        dewhitenning --> CRC_check[CRC checking]
        CRC_check --> decryption[decryption]
        decryption --> RAM
    end
    CRC_gen -.->|Swap endianness here| whitening
    CRC_check -.->|Swap endianness here| dewhitenning
  
Figure 209. MSBFirst feature principle overview diagram. The diagram shows two data paths: TX (top) and RX (bottom). The TX path consists of RAM -> encryption -> CRC generation -> whitening -> RF Interface -> TX operation. The RX path consists of RF Interface -> RX operation -> dewhitenning -> CRC checking -> decryption -> RAM. Annotations indicate 'Swap endianness here' at the CRC generation and CRC checking stages.

The feature is enabled by setting the StatMach.MsbFirst bit.

This feature must not be enabled when at least one of the conditions below is true:

There is no hardware mechanism to ensure previous forbidden configurations are not active at the same time as the MSBFirst feature. So, if the SW does not respect the rule, the integrity of the transfer is not guaranteed.

25.8.9 IP_BLE registers

25.8.9.1 IP_BLE controller register list

The BLUE_BLOCKBaseAddress keyword used for all the register base address information corresponds to the IP_BLE registers base address decided by the SoC when integrating the IP.

Note: BLUE_BLOCKBaseAddress is 0x6000_0000 in the STM32WB05xZ product.

Table 241. IP_BLE controller registers list
Address offsetNameRWResetDescription
0x04INTERRUPT1REGRW0x00000000INTERRUPT1REG register, related to sources of the irq_BLE_int1, aka BLE_TXRX interrupt line
0x08INTERRUPT2REGRW0x00000000INTERRUPT2REG register, related to sources of the irq_BLE_int2, aka BLE_AES
0x0CTIMEOUTDESTREGRW0x00000000Timer1 and Timer2 enable/disable
0x10TIMEOUTREGRW0x00000000Timer1 and Timer2 timeout register
0x14TIMERCAPTUREREGR0x00000000Timer capture register
0x18CMDREGRW0x00000000CmdReg register
0x1CSTATUSREGR0x00000000Status register
0x20INTERRUPT1ENABLEREGR0x00000000This read-only register is a copy/summary of all the enable mask bits located in the different RAM tables. When '0', corresponding interrupt was masked during previous sequence. When '1', corresponding interrupt was enabled during the previous sequence.
0x24INTERRUPT1LATENCYREGR0x00000000Interrupt1 Latency register
0x28MANAESKEY0REGRW0x00000000Manual AES Key0 register
0x2CMANAESKEY1REGRW0x00000000Manual AES Key1 register
0x30MANAESKEY2REGRW0x00000000Manual AES Key2 register
0x34MANAESKEY3REGRW0x00000000Manual AES Key3 register
0x38MANAESCLEARTTEXT0REGRW0x00000000Manual AES ClearText0 register
0x3CMANAESCLEARTTEXT1REGRW0x00000000Manual AES ClearText1 register
0x40MANAESCLEARTTEXT2REGRW0x00000000Manual AES ClearText2 register
0x44MANAESCLEARTTEXT3REGRW0x00000000Manual AES ClearText3 register
0x48MANAESCIPHERTEXT0REGR0x00000000Manual AES CipherText0 register
0x4CMANAESCIPHERTEXT1REGR0x00000000Manual AES CipherText1 register
0x50MANAESCIPHERTEXT2REGR0x00000000Manual AES CipherText2 register
0x54MANAESCIPHERTEXT3REGR0x00000000Manual AES CipherText3 register
0x58MANAESCMDREGRW0x00000000Manual AES CmdReg register
0x5CMANAESSTATREGR0x00000000Manual AES Status register
0x60AESLEPRIVPOINTERREGRW0x00000000AES LE Privacy Pointer register
0x64AESLEPRIVHASHREGRW0x00000000AES LE Privacy Hash register
0x68AESLEPRIVPRANDREGRW0x00000000AES LE Privacy Prand register
0x6CAESLEPRIVCMDREGRW0x00000000AES LE Privacy CmdReg register
0x70AESLEPRIVSTATREGR0x00000000AES LE Privacy Status register
0x7CSTATUS2REGR0x00000000STATUS2REG register

25.8.9.2 IP_BLE controller register list description

Table 242. INTERRUPT 1REG register description
BitField nameResetRWDescription
3:0RESERVED3_00x0RReserved
4ADDPOINTERERROR0x0RWAddress Pointer Error.
When read, indicates the interrupt status.
BitField nameResetRWDescription
4ADDPONTERERROR0x0RWWrite 1'b1 to clear.
5RXOVERFLOWERROR0x0RWReceive Overflow.
When read, indicates the interrupt status.
Write 1'b1 to clear.
6RESERVED60x0RReserved
7SEQDONE0x0RWSequencer end of task.
When read, indicates the interrupt status.
Write 1'b1 to clear.
8TXERROR_00x0RWTransmission error 0: transmit block missing data error. When read, indicates the interrupt status.
Write 1'b1 to clear.
9TXERROR_10x0RWTransmission error 1: a Tx skip happened during an on-going transmission.
When read, indicates the interrupt status.
Write 1'b1 to clear.
10TXERROR_20x0RWTransmission error 2: channel index is greater than 39.
When read, indicates the interrupt status.
Write 1'b1 to clear.
11TXERROR_30x0RWTransmission error 3: error while waiting for the confirmation the Radio FSM is in Tx state. When read, indicates the interrupt status.
Write 1'b1 to clear.
12TXERROR_40x0RWTransmission error 4: a CTE issue occurred.
When read, indicates the interrupt status.
Write 1'b1 to clear.
13ENCERROR0x0RWEncryption error on receive.
When read, indicates the interrupt status.
Write 1'b1 to clear.
14ALLTABLEREADYERROR0x0RWAll RAM table not ready on time.
When read, indicates the interrupt status.
Write 1'b1 to clear.
15TXDATAREADYERROR0x0RWTransmit data pack not ready error .
When read, indicates the interrupt status.
Write 1'b1 to clear.
16NOACTIVEERROR0x0RWGlobStatMach.active bit error.
When read, indicates the interrupt status.
Write 1'b1 to clear.
17RESERVED170x0RWReserved
18RCVLENGTHERROR0x0RWReceive length error.
When read, indicates the interrupt status.
Write 1'b1 to clear.
19SEMETIMEOUTERROR0x0RWSemaphore timeout error.
When read, indicates the interrupt.
Write 1'b1 to clear.
BitField nameResetRWDescription
20RESERVED200x0RWReserved
21TXRXSKIP0x0RWTransmission/Reception skip.
When read, indicates the interrupt status.
Write 1'b1 to clear.
22ACTIVE2ERROR0x0RWActive2 Radio state error.
When read, indicates the interrupt status.
Write 1'b1 to clear.
23CONFIGERROR0x0RWData pointer configuration error.
When read, indicates the interrupt status.
Write 1'b1 to clear.
24TXOK0x0RWPrevious transmitted packet received OK by the peer device.
When read, indicates the interrupt status.
Write 1'b1 to clear.
25DONE0x0RWReceive/Transmit done.
When read, indicates the interrupt status.
Write 1'b1 to clear.
26RCVTIMEOUT0x0RWReceive timeout (no preamble found).
When read, indicates the interrupt status.
Write 1'b1 to clear.
27RCVNOMD0x0RWReceived low MD bit.
When read, indicates the interrupt status.
Write 1'b1 to clear.
28RCVCMD0x0RWReceived command.
When read, indicates the interrupt status.
Write 1'b1 to clear.
29TIMECAPTURETRIG0x0RWA time has been captured in TIMERCAPTUREREG.
When read, indicates the interrupt status.
Write 1'b1 to clear.
30RCVRCERR0x0RWReceive data fail .
When read, indicates the interrupt status.
Write 1'b1 to clear.
31RCVOK0x0RWReceive data OK.
When read, indicates the interrupt status.
Write 1'b1 to clear.

Note: All bits with the corresponding enable mask at '0' are seen at '0' in this register whatever the status. The full unmasked status is visible in the STATUSREG register. Refer to STATUSREG for exhaustive flag description.

Table 243. INTERRUPT2REG register description

BitField nameResetRWDescription
0AESMANENCINT0x0RWAES manual encryption.
This interrupt is enabled through AESLEPRIVCMDREG register.
BitField nameResetRWDescription
0AESMANENCINT0x0RWWhen read, indicates the interrupt status.
Write 1'b1 to clear.
1AESLEPRIVINT0x0RWAES LE privacy engine.
This interrupt is enabled through MANAESCMDREG register.
When read, indicates the interrupt status.
Write 1'b1 to clear.
31:2RESERVED31_20x0RReserved

Table 244. TIMEOUTDESTREG register description

BitField nameResetRWDescription
1:0DESTINATION0x0RWTimeout timer Destination
- 00 or 01: all disabled
- 10: Timer1 enable
- 11: Timer2 enable (but Timer2 really starts counting at the end of a Rx/Tx sequence)
Note: Enabling one of the two timers automatically disables the second one. See Section 25.8.2.1: Possible trigger timers for the Sequencer for more details.
31:2RESERVED31_20x0RReserved

Table 245. TIMEOUTREG register description

BitField nameResetRWDescription
31:0TIMEOUT0x0RWTimer1 or Timer2 Timeout value (depending on destination register).
Time units:
  • in microseconds for Timer2
  • in periods of 512 kHz clock for Timer1.
See Section 25.8.2.1: Possible trigger timers for the Sequencer for more details.

Table 246. TIMERCAPTUREREG register description

BitField nameResetRWDescription
31:0TIMERCAPTURE0x0RWInterpolated absolute time capture register (TxRxPack.TrigRcv/TrigDone, GlobStatMach.TimeCapture/TimeCaptureSel for detailed specifications).
This register is cleared on the beginning of a new Bluetooth® LE sequence (Sequencer trigger event) sequence.
Time unit is in 16 x slow clock so typically 512 kHz period cycle.

Table 247. CMDREG register description

BitField nameResetRWDescription
0TXRXSKIP0x0RWTransmission/reception skip command.
This bit is auto-cleared by the hardware.
1:2RESERVED0x0RWReserved
3CLEARSEMAREQ0x0RWSemaphore clear command.
Setting this bit releases the token for the IP_BLE. Software option in parallel with the hardware management by the Bluetooth® LE Sequencer through TxRxPack.KeepSemaReq bit.
BitField nameResetRWDescription
This bit is auto-cleared by the hardware.
31:4RESERVED31_40x0RReserved
Table 248. STATUSREG register description
BitField nameResetRWDescription
0AESONFLYBUSY0x0RAES on the fly encryption busy status.
2:1RESERVED2_10x0RReserved
3NOT_SUPPORTED_FEATURE0x0RIt indicates that the SW requests an unsupported feature.
4ADDPOINTERERROR0x0RAddress Pointer Error status. This flag is set when the MSB[31:24] part of some address pointers defined in the RAM tables is not equal to the MSB[31:24] part of the RAM base address of the device.
5RXOVERFLOWERROR0x0RAHB arbiter is full and there is no more storage capability available in Rx data path.
6PREVTRANSMIT (*)0x0RPrevious event was a Transmission (1) or Reception (0) status.
7SEQDONE0x0RSequencer end of task status.
This bit is set each time the Sequencer ends the execution of a sequence due to a trigger event whatever the result (OK, with errors, ACTIVE bit not set, etc.).
8TXERROR_00x0RTransmission error 0 status transmit block missing data error. This flag is raised if the transmit block did not receive bytes to transmit from RAM on time during transmission).

Note: On this error, the transmit block stops the on-going transmission but the Sequencer manages it as a normal end of transmission. This TXERROR_0 flag is the only information available for the user regarding this issue.
9TXERROR_10x0RTransmission error 1 status. This flag is raised if a TxSkip event occurs during the Transmission/Reception step of the Sequencer (mainly due to a SW skip through CMDREG.TXRXSKIP bit or possibly due to a PLL lock issue during EN_PA Radio FSM state).
10TXERROR_20x0RTransmission error 2 status.
This flag is raised if the requested channel number is greater than 39.
This channel index comes:
  • directly from SW in RAM table when TxRxPack.IncChan = 0
  • from the channel incrementer block when TxRxPack.IncChan = 1
Note: The channel index used for the failing Tx can be read in StateMach.Remap_chan at the end of the sequence.
11TXERROR_30x0RTransmission error 3 status: error while waiting for the confirmation the Radio FSM is in Tx state (timeout defined in GlobalStatMach.TxReadyTimeout[7:0] bit field).
Possible causes are:
  • the Radio FSM encounters an issue and did not go in Tx state (for example, PLL lock failure)
  • the TxReadyTimeout[7:0] delay is too short
12TXERROR_40x0RTransmission error 4 status.
Possible causes are:
  • the CTETime field is not between 2 and 20 inclusive
    • the transmission applied the CTE anyway (informative flag)
  • or in case of CTE enabled with a coded packet
  • the transmission occurs without CTE
13ENCERROR0x0REncryption error on receive status
BitField nameResetRWDescription
14ALLTABLEREADYERROR0x0RAll RAM Table not ready status.
15TXDATAREADYERROR0x0RTransmit data pack not ready status.
Indicates the data to transmit are not ready in RAM when Tx on antenna is about to start.
This flag is raised if the Sequencer reads TxRxPack.TXdataReady= 0 during DATA INIT step (for transmission sequence only).
16NOACTIVELErrorROR0x0RGlobalStatMach.active bit error status. This flag is raised when the Sequencer reads active = 0 at the beginning of a trigger sequence.
17RESERVED170x0RReserved
18RCVLENGTHERROR0x0RReceive length error status.
19SEMATIMEOUTERROR0x0RSemaphore timeout error status. This flag is raised when the IP_BLE token request is not granted on time by the RRM semaphore.
20RESERVED200x0RReserved
21TXRXSKIP0x0RTransmission/Reception skip status.
22ACTIVE2ERROR0x0RActive2 Radio state error status.
23CONFIGERROR (*)0x0RData pointer configuration error status.
24TXOK0x0RPrevious transmitted packet received OK by the peer device status. This bit is updated at the end of a reception.
0: the previous transmitted packet was not received OK by the peer device.
1: the previous transmitted packet was received OK by the peer device.
This bit is set only if the following conditions are verified:
  • this is a data packet
  • the SN/NESN mechanism is enabled (TxRxPack.SN_EN = 1)
  • a preamble and a good access address have been received inside the receive window
  • the received NESN is different from the local StatMach.SN bit.
25DONE0x0RReceive/Transmit done status.
This flag is set if the Sequencer reached the Transmission/Reception step.
26RCVTIMEOUT0x0RReceive timeout status (no preamble found).
27RCVNOMD0x0RReceived MD bit status (valid only on Data Physical Channel PDU reception). This flag is raised when MD = 0 in the received data packet header.
28RCVCMD0x0RReceived command status (valid only on Data Physical Channel PDU reception).
This flag is raised when LLID = 2'b11 in the received data packet header.
29TIMECAPTURETRIG0x0RIndicates a time has been captured in TIMERCAPTUREREG when set.
30RCVCRCERR0x0RReceive data fail. (CRC error or invalid CI field) status.
Note: This error is raised only if at least preamble and access address have been detected.
31RCVOK0x0RReceive data OK status.
  1. Note:
    • • This StatusReg is updated on each Sequencer end of sequence.
    • • This register is cleared each time the Sequencer starts a new sequence (timer trig event) except for the bit tagged with (*):
      • CONFIGERROR : updated when the Sequencer reads the StatMach
      • PREVTRANSMIT : updated when the Sequencer reaches the TX/RX step again
    • • After a reception, an SN_NESN error is identified if the STATUSREG indicates the Rx is done ( DONE=1 ), not OK ( RCVOK=0 ) but no specific error flag is set.
    • • When a proper transmission occurred, the DONE flag (in STATUSREG and potentially INTERRUPT1REG ) and the STATUSREG.PREVTRANSMIT bit are set.
Table 249. INTERRUPT1ENABLEREG register description
BitField nameResetRWDescription
3:0RESERVED3_00x0RReserved
4ADDPONTERERROR0x0RAddress Pointer Error enable interruption.
5RXOVERFLOWERROR0x0RRx Overflow Error enable interruption.
6RESERVED60x0RReserved
7SEQDONE0x0RSequencer end of task enable interruption.
8TXERROR_00x0RTransmission error 0 enable interruption.
9TXERROR_10x0RTransmission error 1 enable interruption.
10TXERROR_20x0RTransmission error 2 enable interruption.
11TXERROR_30x0RTransmission error 3 enable interruption.
12TXERROR_40x0RTransmission error 4 enable interruption.
13ENCERROR0x0REncryption error on receive enable interruption.
14ALLTABLEREADYERROR0x0RAll RAM Table not ready enable interruption.
15TXDATAREADYERROR0x0RTransmit data pack not ready enable interruption.
16NOACTIVELELERROR0x0RActive bit error enable interruption.
17RESERVED170x0RReserved
18RCVLENGTHERROR0x0RReceive length error enable interruption .
19SEMATIMEOUTERROR0x0RSemaphore timeout error enable interruption.
20RESERVED200x0RReserved
21TXRXSKIP0x0RTransmission/Reception skip enable interruption.
22ACTIVE2ERROR0x0RActive2 Radio state error enable interruption.
23CONFIGERROR0x0RData pointer configuration error enable interruption.
24TXOK0x0RPrevious transmitted packet received OK enable interruption.
25DONE0x0RReceive/Transmit done interruption.
26RCVTIMEOUT0x0RReceive timeout enable interruption (no preamble found).
27RCVNOMD0x0RReceived MD bit embedded in the PDU data packet header was zero enable interruption.
28RCVCMD0x0RReceived command enable interruption.
29TIMECAPTURETRIG0x0RTime capture enable interruption.
30RCVRCERR0x0RReceive data fail enable interruption.
31RCVOK0x0RReceive data OK enable interruption.

Note: This read-only register is a copy/summary of all the enable mask bit located in the different RAM tables treated by the Sequencer. When '0', corresponding interrupt was masked during previous sequence. When '1', corresponding interrupt was enabled during the previous sequence.

Table 250. INTERRUPT1LATENCYREG register description
BitField nameResetRWDescription
7:0INTERRUPT1LATENCY0x0RRelative time counter started on irq_BLE_int1 (BLE_TXRX) occurrence.
  • Time unit: 1 µs
  • Clamped at 255
Reset when all INTERRUPT1REG sources are cleared or when a new irq_BLE_int1 (BLE_TXRX) is raised.
31:8RESERVED31_80x0RReserved
Table 251. MANAESKEY0REG register description
BitField nameResetRWDescription
31:0MANAESKEY_31_00x0RWManual mode AES key
Table 252. MANAESKEY1REG register description
BitField nameResetRWDescription
31:0MANAESKEY_63_320x0RWManual mode AES key
Table 253. MANAESKEY2REG register description
BitField nameResetRWDescription
31:0MANAESKEY_95_640x0RWManual mode AES key
Table 254. MANAESKEY3REG register description
BitField nameResetRWDescription
31:0MANAESKEY_127_960x0RWManual mode AES key
Table 255. MANAESCLEARTEXT0REG register description
BitField nameResetRWDescription
31:0AES_CIPHER_31_00x0RWManual AES clear text
Table 256. MANAESCLEARTEXT1REG register description
BitField nameResetRWDescription
31:0AES_CLEAR_63_320x0RWManual AES clear text
Table 257. MANAESCLEARTEXT2REG register description
BitField nameResetRWDescription
31:0AES_CLEAR_95_640x0RWManual AES clear text

Table 258. MANAESCLEARTEXT3REG register description

BitField nameResetRWDescription
31:0AES_CLEAR_127_960x0RWManual AES clear text

Table 259. MANAESCHIPHERTEXT0REG register description

BitField nameResetRWDescription
31:0AES_CIPHER_31_00x0RWManual AES cipher text

Table 260. MANAESCHIPHERTEXT1REG register description

BitField nameResetRWDescription
31:0AES_CIPHER_63_320x0RWManual AES cipher text

Table 261. MANAESCHIPHERTEXT2REG register description

BitField nameResetRWDescription
31:0AES_CIPHER_95_640x0RWManual AES cipher text

Table 262. MANAESCHIPHERTEXT3REG register description

BitField nameResetRWDescription
31:0AES_CIPHER_127_960x0RWManual AES cipher text

Table 263. MANAESCMDREG register description

BitField nameResetRWDescription
0START0x0RAES manual encryption Start command.
This bit is auto-cleared by the hardware.
1INTENA0x0RWAES manual encryption interrupt enable on Interrupt2Reg.
31:2RESERVED31_20x0RReserved

Table 264. MANAESSTATREG register description

BitField nameResetRWDescription
0BUSY0x0RAES manual encryption busy status
31:1RESERVED31_10x0RReserved

Table 265. AESLEPRIVPOINTERREG register description

BitField nameResetRWDescription
23:0POINTER0x0RWAES LE privacy pointer
31:24RESERVED31_240x0RReserved

Table 266. AESLEPRIVHASHREG register description

BitField nameResetRWDescription
23:0HASH0x0RWAES LE privacy reference hash
31:24RESERVED31_240x0RReserved
Table 267. AESLEPRIVPRANDREG register description
Bit fieldField nameResetRWDescription
23:0PRAND0x0RWAES Le privacy Prand
31:24RESERVED31_240x0RReserved
Table 268. AESLEPRIVCMDREG register description
BitField nameResetRWDescription
0START0x0RWAES LE privacy start command.
This bit is auto-cleared by the hardware.
1INTENA0x0RWAES LE privacy interrupt enable on Interrupt2Reg.
9:2NBKEYS0x0RWAES LE privacy number of keys pointed by AesLePrivPointerReg (points to the resolution key list).
31:10RESERVED31_100x0RReserved
Table 269. AESLEPRIVSTATREG register description
BitField nameResetRWDescription
0BUSY0x0RAES LE privacy busy status.
1KEYFND0x0RAES LE privacy key finding status.
9:02KEYFNDINDEX0x0RAES LE privacy index of the key found in the resolution key list.
31:10RESERVED31_100x0RReserved
Table 270. STATUS2REG register description
BitField nameResetRWDescription
0IQSAMPLES_READY0x0RIndicates if IQ samples have been received on the last reception.
0: no IQ samples reception occurred so no IQ samples stored in RAM
1: IQ samples received and stored in RAM.
Exact number of stored samples is available in IQSAMPLES_NUMBER[6:0] bit field.
7:1IQSAMPLES_NUMBER0x0RIndicates the number of IQ samples stored in the RAM buffer addressed by StatMach.IQSamplesPtr.
28:8RESERVED28_80x0RFor future use.
29IQSAMPLES_MISSING_ERROR0x0RIQ sample internal buffer overflow error flag.
This bit is set when the internal buffer storing the IQ samples is full and new IQ samples have to be recording. The reason would be a too long latency on AHB write transfer from this internal buffer to RAM.
30ANTENNA_SWITCHING_PATTERN_ACCESS_ERROR0x0RTiming error flag related to Antenna Pattern not read on time.
This bit is set when the hardware antenna switching sub-block requests a new element of the Antenna Pattern and does not get it on time versus antenna switching event.
31ANTENNA_SWITCHING_PATTERN_ADDRESS_ERROR0x0RAHB access error flag.
BitField nameResetRWDescription
This bit is set when an internal error is raised while the IP_BLE tries to read the Antenna pattern in RAM. This indicates the value contained in the StatMach.AntennaPtr is not pointing on a supported address in the SoC mapping.

Note: This register is updated on each start of a new Bluetooth® LE sequence (timer trigger event).

25.9 Wakeup block

The wakeup block is partially located in the always-on power domain to stay supplied even in the low-power modes of the device. All features not mandatory during low-power modes are located in the 1V2 switchable power domain to limit power consumption.

The wakeup block combines in fact two features:

25.9.1 Time features management

The wakeup block computes two kinds of time: the absolute time and the interpolated time.

25.9.1.1 Absolute time

This timer is located in the always-on power domain and is based on a rollover free running counter. The absolute time is computed by a 28-bit counter clocked on the slow clock (around 32 kHz).

This absolute time is used to generate a wakeup event to the power controller block of the device when the programmed target reaches the current absolute time.

Two different targets can be programmed in parallel:

The absolute time is also used by the time interpolator block to build the 28-bit MSB non-interpolated part of the 32-bit interpolated time.

25.9.1.2 Interpolated time

The interpolated time is located in the 1.2 V switchable power domain and is clocked at 16 x slow clock typically 512 kHz. This interpolated time is a 32-bit timer built with:

The 32-bit interpolated time is provided to the IP_BLE link layer to get current time information and to manage the timer1.

The 512 kHz interpolation part (4-LSB) is generated using both the 32 kHz and the system clock using a 16 MHz base whatever the system clock frequency is.

25.9.1.3 Slow clock frequency statistics

A module computes the minimum, the maximum and the average value of the slow clock period length by counting the number of 16 MHz periods in a slow clock period. The value is tuned on each slow clock cycle.

The calculation is done continuously from the moment the MR_BLE IP reset is released. The result is available in MINIMUM_PERIOD_LENGTH, AVERAGE_PERIOD_LENGTH and MAXIMUM_PERIOD_LENGTH registers (see Section 25.9.5: wakeup block registers ).

The average value is calculated using the previous sampled results as recursive weight: the new calculation is added to previous average and divided by the number of measurements up to 16. Then the ratio factor stays at 16.

The software can reset the minimum/maximum period value and/or the average value registers thanks to dedicated command bit in STATISTICS_RESTART register.

25.9.2 Sleep feature management

The sleep management informs the device power controller block if the MR_BLE allows the device to go in low-power mode (“sleep request”).

The Wakeup block allows the device to go in low-power mode (through sleep request information) if:

When the device is in low-power, the slow clock timer is still active and may generate a wakeup request to the power controller.

25.9.3 Wakeup management

The wakeup feature is in charge of waking up the device from a low-power mode and in a second time (once power and clock tree are restored), to wake up the IP_BLE link layer and/or the CPU.

Note: the CPU wakeup/interrupt feature offers an additional low-power timer to the device.

The Wakeup block manages:

25.9.3.1 SoC wakeup event generation

The Wakeup block offers the possibility to wake up the SoC before waking up the IP_BLE link layer or the CPU to let time to power and clocks to settle.

This way, the user only has to program dynamically along its application the IP_BLE link layer/CPU wakeup time target, letting the hardware manage the anticipated SoC wakeup.

The mechanism consists in programming a dedicated register called WAKEUP_OFFSET at the power-on with a value corresponding to at least the duration of the power and clock restoration from a low-power mode exit.

The hardware automatically uses this information to anticipate the SoC wakeup event generation from this duration versus the absolute time wakeup target.

Information to program the SoC wakeup event time:

25.9.3.2 IP_BLE wakeup management

The user must program two pieces of information to activate the IP_BLE link layer wakeup feature:

Note: the user must ensure when setting the BLE_WAKEUP_EN bit that the programmed IP_BLE wakeup time is at least WAKEUP_OFFSET[7:0] duration later.

Figure 210. IP_BLE wakeup timing contributors provides an overview of the registers involved in the wakeup management and summarizes the steps described just above.

Figure 210. IP_BLE wakeup timing contributors

Timing diagram showing SoC wakeup event, WAKEUP_OFFSET, and Bluetooth LE wakeup event on a timeline.

The diagram illustrates the timing contributors for an IP_BLE wakeup. A horizontal timeline represents 'Absolute time Available in ABSOLUTE_TIME[31:4] register'. Two events are marked: a 'SoC wakeup event' (orange arrow) and a 'Bluetooth LE wakeup event' (purple arrow). The time difference between them is labeled 'WAKEUP_OFFSET[7:0] = SoC power and clocks startup/settlement'. The time of the SoC wakeup event is labeled 'Time = BLUE_WAKEUP_TIME[31:4] - WAKEUP_OFFSET[7:0] '. The time of the Bluetooth LE wakeup event is labeled 'Time = BLUE_WAKEUP_TIME[31:4] '. A legend indicates: 'In purple: Bluetooth LE controller Sequencer related event' and 'In orange: SoC power controller related event'.

Timing diagram showing SoC wakeup event, WAKEUP_OFFSET, and Bluetooth LE wakeup event on a timeline.

25.9.4 CPU wakeup management

A similar behavior is possible to generate a CPU wakeup event.

The user must program three information to activate the CPU wakeup feature:

Note: Only the 28-bit absolute time is used for the CPU wakeup feature, so granularity of wakeup target is slow clock frequency.

In this case, the wakeup process also occurs in two steps:

This feature allows using the existing slow clock timer to generate a CPU wakeup source. This feature when activated has no impact on the Bluetooth LE transfers (no trigger event generated to the Bluetooth LE Sequencer).

25.9.5 wakeup block registers

The WAKEUP_SLEEP_BLOCKBaseAddress keyword used for all the register base address information corresponds to the wakeup registers base address decided by the SoC when integrating the IP.

Note: WAKEUP_SLEEP_BLOCKBaseAddress is 0x6000_1800 in STM32WB05xZ product.

Table 271. wakeup block register list

Address offsetNameRWResetDescription
0x08WAKEUP_OFFSETRW0x00000000wakeup offset register
0x10ABSOLUTE_TIMER0x00000000Absolute time register
0x14MINIMUM_PERIOD_LENGTHR0x00000000Minimum period length register
0x18AVERAGE_PERIOD_LENGTHR0x00000000Average period length register
Address offsetNameRWResetDescription
0x1CMAXIMUM_PERIOD_LENGTHR0x00000000Maximum period length register
0x20STATISTICS_RESTARTRW0x00000000Statistics restart register
0x24BLUE_WAKEUP_TIMERW0x00000000IP_BLE wakeup time register
0x28BLUE_SLEEP_REQUEST_MODERW0x00000007IP_BLE sleep request mode register
0x2CCM0_WAKEUP_TIMERW0x00000000CPU wakeup time register
0x30CM0_SLEEP_REQUEST_MODERW0x80000007CPU sleep request mode register
0x40WAKEUP_BLE_IRQ_ENABLERW0x00000000Wakeup IP_BLE interrupt enable register
0x44WAKEUP_BLE_IRQ_STATUSRW0x00000000Wakeup IP_BLE interrupt status register
0x48WAKEUP_CM0_IRQ_ENABLERW0x00000000Wakeup CPU interrupt enable register
0x4CWAKEUP_CM0_IRQ_STATUSRW0x00000000Wakeup CPU interrupt status register

25.9.5.1 Wakeup block registers

Table 272. WAKEUP_OFFSET register description

BitField nameResetRWDescription
7:0WAKEUP_OFFSET0x0RWDelay of anticipation of the Soc device to settle power and clock.
Unit is in slow clock period time (typically 32 kHz).
31:8RESERVED_31_80x0RWReserved

Table 273. ABSOLUTE_TIME register description

BitField nameResetRWDescription
31:0ABSOLUTE_TIME0x0RAbsolute time
Unit of this full bit field is (slow_clock *16) frequency period cycle (typically 512 kHz).
Note: ABSOLUTE_TIME[31:4] is clocked on the slow clock (typically 32 kHz), ABSOLUTE_TIME[3:0] is the interpolation at slow clock * 16 frequency (typically 512 kHz).

Table 274. MINIMUM_PERIOD_LENGTH register description

BitField nameResetRWDescription
3:0RESERVED3_00x0RReserved
13:4LENGTH0x0RMinimum period length computed by time interpolator
31:14RESERVED31_140x0RReserved

Table 275. AVERAGE_PERIOD_LENGTH register description

BitField nameResetRWDescription
3:0LENGTH_FRAC0x0RAdditional information/precision on slow clock frequency.
Reading AVERAGE_PERIOD_LENGTH[13:0] indicates the number of 16 MHz clock cycles contained in 16 slow clock periods.
This bit field is updated every 16 slow clock periods.
13:4LENGTH_INT0x0RAverage period length computed by Time Interpolator.
This value indicates the number of 16 MHz clock cycles contained in 1 slow clock period.
This bit field is updated every 16 slow clock periods.
23:14RESERVED23_140x0RReserved
BitField nameResetRWDescription
31:24AVERAGE_COUNT0x0R

This value indicates the number of slow clock periods taken into account to calculate the average.

This bit field is updated every slow clock period.

This bit field is clamped at 0xFF so reading 0xFF means at least 128 slow clock periods are already being used to calculate the average.

Table 276. MAXIMUM_PERIOD_LENGTH register description
BitField nameResetRWDescription
3:0RESERVED3_00x0RReserved
13:4LENGTH0x0RMaximum period length computed by Time Interpolator.
31:14RESERVED31_140x0RReserved
Table 277. STATISTIC_RESTART register description
BitField nameResetRWDescription
0CLR_MIN_MAX0x0RW

Write '1' to clear the minimum and maximum registers.

Note: This bit is auto cleared by the hardware.

1CLR_AVR0x0RW

Write '1' to clear the AVERAGE_PERIOD_LENGTH register value.

This action clears both the average length value and the average counter.

Note: This bit is auto cleared by the hardware.

31:2RESERVED31_20x0RReserved
Table 278. BLUE_WAKEUP_TIME register description
BitField nameResetRWDescription
31:0WAKEUP_TIME0x0RW

Programmed wakeup time for the IP_BLE.

Unit is in (16 x slow clock) period so typically 512 kHz when slow clock is 32 kHz.

Table 279. BLUE_SLEEP_REQUEST_MODE register description
BitField nameResetRWDescription
2:0RESERVED2_00x7RWReserved
28:3RESERVED28_30x0RReserved
29SLEEP_EN0x0RW

- 0: disable IP_BLE sleeping mode = no low-power mode request when the Bluetooth LE link layer indicates it is no longer busy.

- 1: enable IP_BLE sleeping mode = low-power mode request when the Bluetooth LE link layer indicates it is no longer busy.

Note: Bluetooth LE Sequencer is no longer busy if no sequence is on-going and if no Timer1 nor Timer2 counter is enabled (to trig the next sequence).

30BLE_WAKEUP_EN0x0RW

- 0: disable the IP_BLE wakeup

- 1: enable the IP_BLE wakeup request through the embedded wakeup timer.

This bit is auto-cleared by hardware when a wakeup event occurs (IP_BLE wakeup time matches with current time).

31FORCE_SLEEPING0x0RW

- 0: the IP_BLE sleeping is managed dynamically according to IP_BLE activity and status

- 1: the IP_BLE is always considered as sleeping, which means it always allows the SoC to go to low power mode

Table 280. CM0_WAKEUP_TIME register description
BitField nameResetRWDescription
3:0RESERVED3_00x0RAlways read as zero as no 512 kHz granularity on this time wakeup.
31:4WAKEUP_TIME0x0RWProgrammed wakeup time for the CPU.
Unit is in slow clock period.
Table 281. CM0_SLEEP_REQUEST_MODE register description
BitField nameResetRWDescription
2:0RESERVED2_00x7RWReserved
29:3RESERVED29_30x0RReserved
30CPU_WAKEUP_EN0x0RW
  • - 0: disable/mask the CPU wakeup request.
  • - 1: enable the CPU wakeup request.
Note: this bit has to be used in combination with the CM0_WAKEUP_TIME register to generate a wakeup request to the SoC.
This bit is auto-cleared by hardware when a wakeup event occurs (CM0_WAKEUPTIME value matches with current time).
31FORCE_SLEEPING0x1RW
  • - 0: the CPU sleeping information is also monitored by the MR_BLE wakeup block to decide whether it allows or not the low power mode at SoC level
  • - 1: the CPU is always considered as sleeping by the wakeup block. Note: this bit must always be kept high to let the CPU WFI instruction managing alone the low power allowance for CPU side.
Table 282. WAKEUP_BLE_IRQ_ENABLE register description
BitField nameResetRWDescription
0WAKEUP_IT0x0RW
  • - 0: disable the IP_BLE wakeup interrupt towards CPU.
  • - 1: enable IP_BLE wakeup interrupt towards the CPU.
31:1RESERVED31_10x0RReserved
Table 283. WAKEUP_BLE_IRQ_STATUS register description
BitField nameResetRWDescription
0WAKEUP_IT0x0RWWrite '1' to clear the interrupt.
When read, returns the interrupt status.
31:1RESERVED31_10x0RReserved
Table 284. WAKEUP_CM0_IRQ_ENABLE register description
BitField nameResetRWDescription
0WAKEUP_IT0x0RW
  • - 0: disable the CPU wakeup interrupt towards CPU.
  • - 1: enable CPU wakeup interrupt towards the CPU.
31:1RESERVED31_00x0RReserved
Table 285. WAKEUP_CM0_IRQ_STATUS register description
BitField nameResetRWDescription
0WAKEUP_IT0x0RWWrite '1' to clear the interrupt.
When read, returns the interrupt status.
31:1RESERVED31_00x0RReserved