23. Radio IP

23.1 Introduction

The STM32WB07xC and STM32WB06xC Bluetooth LE controller is a programmable automate, which can act as a master or a slave node compliant up to the Bluetooth® LE standard.

The Bluetooth® LE controller is a coprocessor intended to perform transmission and reception operations without the direct control of the CPU following the instructions included inside some predefined linked lists in RAM. Then, the task of a dedicated link layer firmware is to fill these lists in advance. This allows the controller to start a transaction directly at low power mode exit while the CPU is still booting.

Typically, a processor interrupt service routine runs at the end of every transmitted or received packet in order to prepare/modify the linked lists in RAM or inform the host about changes. When the ISR execution time is a key point, the controller offers the possibility to check if there is enough time to complete the planned transmission/reception and to check the coherency of the RAM lists preventing the reading of not updated data. Furthermore, the controller reads its configuration in three different consecutive phases giving to the CPU the maximum computation time.

The internal sequence of autonomous actions about the transmission or reception is triggered by a timer event that can either wake up the device from deep sleep or not.

A free running counter driven by the internal or external slow clock is always active during sleep mode and provides the absolute time used as reference to schedule the controller activity. It is located in a programmable wakeup block that is also in charge to execute the request from the radio to go into sleep. The CPU is able to program the wakeup block accessing specific registers through the APB interface of the controller.

The Bluetooth® LE controller embeds the following main components:

23.2 Functional description

Three possible timers (wakeup timer, timer1 and timer2) trigger the start of the controller internal sequence. Wakeup timer and timer1 are based on the absolute machine time. Timer2 is only relative to the end of the previous transmitted or received packet. The wakeup timer is the only timer that is always on during the sleep mode, so it is the only one able to wake up the system when the digital power supply is switched off.

Each time a trigger event is sent to the Bluetooth LE controller, the sequencer fetches specific tables in RAM to get the required information to know what to configure about the radio and which sequence to start (RX or TX). There are several types of tables:

After the Bluetooth LE controller is triggered by one of the three timers, the following six actions define the usual sequence related to a radio transaction.

  1. 1. The Bluetooth LE controller reloads its configuration from retention RAM in order to restore its state (this state might have been modified by the CPU during its interrupt: see action 6 in this list). The link controller reloads its configuration in more separated phases giving more computation time to the CPU.
  2. 2. The Bluetooth LE controller requests the radio access. This action occurs in parallel when action 1 is running.
  3. 3. Data transmission or data reception.
  4. 4. After the end of all previous actions, the Bluetooth LE controller writes back its configuration into several tables in RAM and issues an interrupt to the CPU. Depending on internal interrupt enable configuration, the link controller may increase its interrupt (which is connected to the CPU).
  5. 5. On interrupt detection, the CPU starts an interrupt service routine (ISR) which checks the controller interrupt status register, reads the configuration saved by the controller in RAM and reads the data received PDU in RAM (in case of valid PDU packet reception). The change from one link state machine to another one is defined by a dedicated function of the ISR, which changes the “CurStMachNum” variable value in the GlobStatMach table.
  6. 6. After all the previous activities have ended, the CPU may ask the wakeup block to send a sleep request to the power manager block (PM) to go into sleep mode.

23.3 Radio resource manager (RRM)

The radio resource manager (RRM) is the block that manages the requests performed by the Bluetooth LE controller 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:

By default, neither the Bluetooth LE controller nor the CPU has access to the radio. A contributor (Bluetooth LE or CPU) needs to request a token. The token is requested by software for the CPU. It is done by hardware for the Bluetooth LE controller 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.

23.3.1 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:

The main goal of this block is to allow the Bluetooth LE controller to reinitialize the radio registers after a low power mode sequence to start an RF communication while the CPU is still being booted.

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

The RadioConfigPtr value is loaded by the RRM-UDRA automatically when the radio controller 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 75. Command start list details

Address in RAMMeaningComments
@RadioConfigPtr(value) + 0x00port0->command0 base addressCommand executed by the Bluetooth LE controller on wakeup timer trigger event if RadioComListEna bit = 1 in on-going StateMach.
@RadioConfigPtr(value) + 0x04port0->command1 base addressCommand executed by the Bluetooth LE controller on Timer1 trigger event if RadioComListEna bit = 1 in on-going StateMach.
@RadioConfigPtr(value) + 0x08port0->command2 base addressCommand executed by the Bluetooth LE controller 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.
@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.

23.3.1.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 76. 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.
3command_base_addr+21st dataIf write command: write first 8-bit data to be written. If read command: location where the first 8-bit read data are available.
4command_base_addr+32nd 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 data are available.
...
Byte numberAddress in RAMByte valueDescription
n+2command_base_addr+(n+1)nth 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 data are 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 Table 160. Radio Controller registers list )
n+5command_base_addr+n+41st dataIf write command: write first 8-bit data to be written.
If read command: location where the first 8-bit read data are 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.

Basic examples:

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 new value.

2) Read of the 4 AFCx_DIG_ENG register chained with a write of 0x54 value in RADIO_FSM_USER through port1.command1:

@port1.command1_addr = 0x84; Read 4 data

@port1.command1_addr+1 = 0xAFC0_DIG_ENG_ADDR

@port1.command1_addr+6 = 0x01; Write 1 data

@port1.command1_addr+7 = 0x RADIO_FSM_USER_ADDR;

@port1.command0_addr+8 = 0x54; 1st (and unique) data to write in RADIO_FSM_USER register

@port1.command0_addr+9 = 0x00; null command

Note: @port1.command1_addr+2 to @port1.command1_addr+5 contents are written by the RRM-UDRA block with the result of read.

At the end of the execution:

23.3.2 Direct register access

The direct register access block allows the software to access the radio registers directly through an APB access. The radio registers are mainly used to control the analog part of the radio and the radio FSM. The software has to read/write the RF APB registers located inside the RRM APB register list that points directly to the radio registers. The RF APB registers start at RRM address + 0x100. The radio registers are 8-bit only so the APB register bit field [31:8] part is padded with 0. Then, they can be accessed as 32-bit APB registers (address incremented by 4 between each register) through RRM direct access interface. The radio registers can be also accessed exploiting RRM UDRA command list in RAM as 8-bit registers (address incremented by 1 between each register). 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 round-robin priority mechanism. 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).

23.3.2.1 CPU access to radio resources

Although the CPU can request the use of radio resources through the RRM, in most cases read and write accesses to the radio registers can be done directly through APB inside the RRM APB registers. In this case, reading is not intrusive, it is faster and there is no risk even if a radio transaction is on-going. Writing to radio registers is not supposed to be done during a radio transfer. Writing through RRM commands can be safer in order to avoid changes while a radio transaction is on-going. Nevertheless, if this is done very close to a trig event, it is not possible to know which command is executed first between radio and CPU so which setting is used for the coming transaction.

23.3.3 RRM registers

Table 77. RRM register list

Address offsetNameRWResetDescription
0x00RRM_IDR0x00000001RRM_ID register
0x04RRM_CTRLRW0x00000003RRM_CTRL register
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
0x100AA0_DIG_USRRW0x000000D6AA0_DIG_USR register
0x104AA1_DIG_USRRW0x000000BEAA1_DIG_USR register
0x108AA2_DIG_USRRW0x00000089AA2_DIG_USR register
0x10CAA3_DIG_USRRW0x0000008EAA3_DIG_USR register
0x110DEM_MOD_DIG_USRRW0x00000026DEM_MOD_DIG_USR register
0x114RADIO_FSM_USRRW0x00000004RADIO_FSM_USR register
0x118PHYCTRL_DIG_USRRW0x00000000PHYCTRL_DIG_USR register
Address offsetNameRWResetDescription
0x144AFC0_DIG_ENGRW0x00000066AFC0_DIG_ENG register
0x148AFC1_DIG_ENGRW0x00000044AFC1_DIG_ENG register
0x14CAFC2_DIG_ENGRW0x000000FFAFC2_DIG_ENG register
0x150AFC3_DIG_ENGRW0x0000007FAFC3_DIG_ENG register
0x154CR0_DIG_ENGRW0x00000044CR0_DIG_ENG register
0x168CR0_LRRW0x000000DCCR0_LR register
0x16CVIT_CONF_DIG_ENGRW0x00000000VIT_CONF_DIG_ENG register
0x184LR_PD_THR_DIG_ENGRW0x00000050LR_PD_THR_DIG_ENG register
0x188LR_RSSI_THR_DIG_ENGRW0x0000001BLR_RSSI_THR_DIG_ENG register
0x18CLR_AAC_THR_DIG_ENGRW0x00000038LR_AAC_THR_DIG_ENG register
0x1DCDTB0_DIG_ENGRW0x00000000DTB0_DIG_ENG register
0x1F0DTB5_DIG_ENGRW0x00000000DTB5_DIG_ENG register
0x234MOD0_DIG_TSTRW0x00000000MOD0_DIG_TST register
0x238MOD1_DIG_TSTRW0x00000000MOD1_DIG_TST register
0x23CMOD2_DIG_TSTRW0x00000080MOD2_DIG_TST register
0x240MOD3_DIG_TSTRW0x00000098MOD3_DIG_TST register
0x248RXADC_ANA_USRRW0x0000001BRXADC_ANA_USR register
0x254LDO_ANA_ENGRW0x00000080LDO_ANA_ENG register
0x274CBIAS0_ANA_ENGRW0x00000078CBIAS0_ANA_ENG register
0x278CBIAS1_ANA_ENGRW0x00000007CBIAS1_ANA_ENG register
0x27CCBIAS_ANA_TESTRW0x00000000CBIAS_ANA_TEST register
0x280SYNTHCAL0_DIG_OUTR0x00000000SYNTHCAL0_DIG_OUT register
0x284SYNTHCAL1_DIG_OUTR0x00000001SYNTHCAL1_DIG_OUT register
0x288SYNTHCAL2_DIG_OUTR0x00000040SYNTHCAL2_DIG_OUT register
0x28CSYNTHCAL3_DIG_OUTR0x00000000SYNTHCAL3_DIG_OUT register
0x290SYNTHCAL4_DIG_OUTR0x00000018SYNTHCAL4_DIG_OUT register
0x294SYNTHCAL5_DIG_OUTR0x00000007SYNTHCAL5_DIG_OUT register
0x298FSM_STATUS_DIG_OUTR0x00000000FSM_STATUS_DIG_OUT register
0x29CIRQ_STATUS_DIG_OUTR0x00000000IRQ_STATUS_DIG_OUT register
0x2A4RSSI0_DIG_OUTR0x00000008RSSI0_DIG_OUT register
0x2A8RSSI1_DIG_OUTR0x00000008RSSI1_DIG_OUT register
0x2ACAGC_DIG_OUTR0x00000000AGC_DIG_OUT register
0x2B0DEMOD_DIG_OUTR0x00000000DEMOD_DIG_OUT register
0x2B4AGC0_ANA_TSTRW0x00000000AGC0_ANA_TST register
0x2B8AGC1_ANA_TSTRW0x00000000AGC1_ANA_TST register
0x2BCAGC2_ANA_TSTRW0x00000000AGC2_ANA_TST register
0x2C0AGC0_DIG_ENGRW0x0000004AAGC0_DIG_ENG register
0x2C4AGC1_DIG_ENGRW0x00000084AGC1_DIG_ENG register
0x2C8AGC2_DIG_ENGRW0x00000006AGC2_DIG_ENG register
0x2CCAGC3_DIG_ENGRW0x0000001AAGC3_DIG_ENG register
Address offsetNameRWResetDescription
0x2D0AGC4_DIG_ENGRW0x00000073AGC4_DIG_ENG register
0x2D4AGC5_DIG_ENGRW0x0000000FAGC5_DIG_ENG register
0x2D8AGC6_DIG_ENGRW0x00000000AGC6_DIG_ENG register
0x2DCAGC7_DIG_ENGRW0x00000000AGC7_DIG_ENG register
0x2E0AGC8_DIG_ENGRW0x00000000AGC8_DIG_ENG register
0x2E4AGC9_DIG_ENGRW0x00000090AGC9_DIG_ENG register
0x2E8AGC10_DIG_ENGRW0x00000000AGC10_DIG_ENG register
0x2ECAGC11_DIG_ENGRW0x00000010AGC11_DIG_ENG register
0x2F0AGC12_DIG_ENGRW0x00000020AGC12_DIG_ENG register
0x2F4AGC13_DIG_ENGRW0x00000030AGC13_DIG_ENG register
0x2F8AGC14_DIG_ENGRW0x00000038AGC14_DIG_ENG register
0x2FCAGC15_DIG_ENGRW0x00000039AGC15_DIG_ENG register
0x300AGC16_DIG_ENGRW0x0000003AAGC16_DIG_ENG register
0x304AGC17_DIG_ENGRW0x0000003BAGC17_DIG_ENG register
0x308AGC18_DIG_ENGRW0x0000003CAGC18_DIG_ENG register
0x30CAGC19_DIG_ENGRW0x0000003DAGC19_DIG_ENG register
0x310AGC20_DIG_ENGRW0x00000080AGC20_DIG_ENG register
0x324RXADC_HW_TRIM_OUTR0x0000001BRXADC_HW_TRIM_OUT register
0x328CBIAS0_HW_TRIM_OUTR0x00000078CBIAS0_HW_TRIM_OUT register
0x32CCBIAS1_HW_TRIM_OUTR0x00000008CBIAS1_HW_TRIM_OUT register
0x330AGC_HW_TRIM_OUTR0x00000006AGC_HW_TRIM_OUT register

Table 78. RRM_ID register description

BitField nameResetRWDescription
3:0IDENTIFICATION0x1RRRM Identification register.
31:4RESERVED31_40x0RReserved.

Table 79. RRM_CTRL register description

BitField nameResetRWDescription
1:0PRIORITY0x3RWDefines the priority between direct register or UDRA for radio register access:
- 11: Round-robin.
31:2RESERVED31_20x0RReserved.

Table 80. 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 81. 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).
3CMD_NUMBER_ERROR0x0RWUDRA interrupt enable (error in the number of command).
31:4RESERVED31_40x0RReserved.

Table 82. UDRA_IRQ_STATUS register description

BitField nameResetRWDescription
0RADIO_CFG_PTR_RELOADED0x0RWUDRA interrupt enable (reload radio config pointer).
Write '1' to clear IRQ status bit.
1CMD_START0x0RWUDRA interrupt enable (command start).
Write '1' to clear IRQ status bit.
2CMD_END0x0RWUDRA interrupt enable (command end).
Write '1' to clear IRQ status bit.
3CMD_NUMBER_ERROR0x0RWUDRA interrupt enable (error in the number of command).
Write '1' to clear IRQ status bit.
31:4RESERVED31_40x0RReserved.

Table 83. UDRA_RADIO_CFG_PTR register description

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

Table 84. 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 85. SEMA_IRQ_STATUS register description

BitField nameResetRWDescription
0LOCK0x0ROn read, returns the semaphore locked interrupt status.
Write '1' to clear this IRQ status bit.
1UNLOCK0x0ROn read, returns the semaphore unlocked interrupt status.
Write '1' to clear this IRQ status bit.
31:2RESERVED31_20x0RReserved.
Table 86. BLE_IRQ_ENABLE register description
BitField nameResetRWDescription
0PORT_GRANT0x0RWBluetooth LE port grant interrupt enable.
1PORT_RELEASE0x0RWBluetooth LE port release interrupt enable.
2PORT_PREEMPT0x0RWBluetooth LE port preempt interrupt enable.
3PORT_CMD_START0x0RWBluetooth LE port command start interrupt enable.
4PORT_CMD_END0x0RWBluetooth LE port command end interrupt enable.
31:5RESERVED31_50x0RReserved
Table 87. BLE_IRQ_STATUS register description
BitField nameResetRWDescription
0PORT_GRANT0x0RWBluetooth LE hardware port granted interrupt status.
- 0: the Bluetooth LE port request to semaphore is not granted.
- 1: the Bluetooth LE controller 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_RELEASE0x0RWBluetooth LE hardware port released interrupt status.
When read:
- 0: the Bluetooth LE controller has not been released.
- 1: the Bluetooth LE controller has been released by the semaphore.
Write '1' to clear this IRQ status bit.
2PORT_PREEMPT0x0RWBluetooth LE hardware port preemption (at semaphore level) interrupt status.
When read:
- 0: the Bluetooth LE controller has not been preempted by another controller.
- 1: the Bluetooth LE controller has been preempted and semaphore token was taken by another port.
Write '1' to clear this IRQ status bit.
3CMD_START0x0RWBluetooth LE hardware port command start interrupt status.
When read:
- 0: the Bluetooth LE port command requested by the Bluetooth LE controller is not started.
- 1: the Bluetooth LE port command requested by the Bluetooth LE controller is started.
Write '1' to clear this IRQ status bit.
4CMD_END0x0RWBluetooth LE hardware port command end interrupt status.
When read:
- 0: the Bluetooth LE port command requested by the Bluetooth LE controller is not completed.
- 1: the Bluetooth LE port command requested by the Bluetooth LE controller is completed.
Write '1' to clear this IRQ status bit.
31:5RESERVED31_50x0RReserved

Note: The Bluetooth LE controller 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 controller and the RRM block.

Table 88. 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 HW once the command is ended.
31:4RESERVED31_40x0RReserved.

Table 89. 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.
4TAKE_PREEMPT0x0RWSemaphore token preemption request by the CPU virtual port
- 0: Semaphore take request is not applied with pre-emption. This is the usual use case to request the semaphore.
- 1: Semaphore take request is applied with preemption.
TAKE_PREEMPT=1'b1 should only be used exceptionally when the peripheral cannot wait anymore to get the semaphore due to timing constraint of a radio protocol.
31:5RESERVED31_50x0RReserved

Table 90. VP_CPU_IRQ_ENABLE register description

BitField nameResetRWDescription
0PORT_GRANT0x0RWCPU virtual port grant interrupt enable.
1PORT_RELEASE0x0RWCPU virtual port release interrupt enable.
2PORT_PREEMPT0x0RWCPU virtual port preempt interrupt enable.
3PORT_CMD_START0x0RWCPU virtual port command start interrupt enable.
4PORT_CMD_END0x0RWCPU virtual port command end interrupt enable.

Table 91. 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:
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.
2PORT_PREEMPT0x0RWCPU virtual port preemption (at semaphore level) interrupt status.
When read:
- 0: the CPU virtual port has not been preempted by another UDRA port.
- 1: the CPU virtual port has been preempted by another UDRA port.
Write '1' to clear this IRQ status bit.
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
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.
Write '1' to clear this IRQ status bit.

23.3.3.1 Radio registers (RRM address + 0x100)

They can be accessed through two different mappings:

Table 92. AA0_DIG_USR register description

BitField nameResetRWDescription
7:0AA_7_00xD6RWLeast significant byte of the BTLE 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 93. AA1_DIG_USR register description
BitField nameResetRWDescription
7:0AA_15_80xBERWNext byte of the BTLE 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 94. AA2_DIG_USR register description
BitField nameResetRWDescription
7:0AA_23_160x89RWNext byte of the BTLE 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 95. AA3_DIG_USR register description
BitField nameResetRWDescription
7:0AA_31_240x89RWNext byte of the BTLE 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 96. DEM_MOD_DIG_USR register description
BitField nameResetRWDescription
0SPARE0x0RWSpare
7:1CHANNEL_NUM0x13RWIndex for internal lock-up table in which the synthesizer setup is contained.
Default value is the Bluetooth LE RF channel 19 -> 2440 MHz.
For Bluetooth protocol: this bit field is (over)written by the Bluetooth LE sequencer during the 1 st INIT. The value copied here is the output of the channel Incr and hopping hardware block.
Example: value to program to select the channel 19:
CHANNEL_NUM = 19 = 0x13.
Then, 2402 + (channel number * 2) = 2440 MHz for Bluetooth LE channel 19
Note: This bit field is used by the SYNTH_IF hardware block to generate the physical frequency on the antenna.
31:8RESERVED31_80x0RReserved
Table 97. RADIO_FSM_USR register description
BitField nameResetRWDescription
0TXMODE0x0RWTx mode bit.
For Bluetooth protocol, this bit is (over)written by the Bluetooth LE sequencer with the StatMach.TxMode bit during the 1 st INIT step.
Note: This bit is not used by the hardware.
1EN_CALIB_CBP0x0RWCBP calibration enable bit.
For Bluetooth protocol, this bit is (over)written by the Bluetooth LE sequencer with the TxRxPack.CalReq bit during the 1 st INIT step.
Note: This bit is used by the radio FSM as EN_CALIB_SYNTH information.
2EN_CALIB_SYNTH0x1RWSYNTH calibration enable bit.
For Bluetooth protocol, this bit is (over)written by the Bluetooth LE sequencer with the TxRxPack.CalReq bit during the 1 st INIT step.
Note: This bit is used by the Radio FSM as EN_CALIB_SYNTH information.
7:3PA_POWER0x0RWPA power coefficient.
For Bluetooth protocol, this bit is (over)written by the Bluetooth LE sequencer with the StatMach.PAPower bit field during the 1 st INIT step.
Note: This bit is used by the PA_RAMP hardware block.
31:8RESERVED31_80x0RReserved
Table 98. PHYCTRL_DIG_USR register description
BitField nameResetRWDescription
2:0RXTXPHY0x0RWRXTXPHY selection.
For Bluetooth protocol, 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 if 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
Note: This bit field is used by the hardware to inform the digital and analog blocks needing this PHY information.
3:7SPARE0x0RWSpare.
Note: this bit field is overwritten by the Bluetooth LE sequencer during the 1 st INIT step with 0b on each bit.
31:8RESERVED31_80x0RReserved.
Table 99. AFC0_DIG_ENG register description
BitField nameResetRWDescription
3:0AFC_GAIN_AFTER0x6RWSet the gain of the AFC loop before AA detection to the value \( 2^{-(\text{AFC\_GAIN\_AFTER})} \) .
7:4AFC_GAIN_BEFORE0x6RWSet the gain of the AFC loop before AA detection to the value \( 2^{-(\text{AFC\_GAIN\_BEFORE})} \) .
31:8RESERVED31_80x0RReserved.
Table 100. AFC1_DIG_ENG register description
BitField nameResetRWDescription
3:0AFC_DELAY_AFTER0x4RWSet the gain of the AFC loop before AA detection to the value AFC_DELAY_AFTER/256.
7:4AFC_DELAY_BEFORE0x4RWSet the decay factor of the AFC loop before AA detection to the value AFC_DELAY_BEFORE/256.
31:8RESERVED31_80x0RReserved.
Table 101. AFC2_DIG_ENG register description
BitField nameResetRWDescription
6:0AFC_FREQ_LIMIT0x7FRWMax. (absolute value) of frequency correction.
7AFC_ENABLE0x1RWEnable/disable the AFC loop
- 0: disabled
- 1: enabled
31:8RESERVED31_80x0RReserved.
Table 102. AFC3_DIG_ENG register description
BitField nameResetRWDescription
7:0AFC_MINMAX_LIMIT0x7FRWMax. difference allowed on the min./max. peak detectors. Values above this limit are interpreted as noise and the current min./max. trackers are reset.
31:8RESERVED31_80x0RReserved.
Table 103. CR0_DIG_ENG register description
BitField nameResetRWDescription
3:0CR_GAIN_AFTER0x4RWSet the gain of the clock recovery loop before AA detection to the value \( 2^{(-CR\_GAIN\_AFTER)} \) .
7:4CR_GAIN_BEFORE0x4RWSet the gain of the clock recovery loop before AA detection to the value \( 2^{(-CR\_GAIN\_BEFORE)} \) .
31:8RESERVED31_80x0RReserved.
Table 104. CR0_LR register description
BitField nameResetRWDescription
3:0CR_LR_GAIN_AFTER0x6RWSet the gain of the clock recovery loop before AA detection to the value \( 2^{(-CR\_GAIN\_BEFORE)} \) .
7:4CR_LR_GAIN_BEFORE0x6RWSet the gain of the clock recovery loop before AA detection to the value \( 2^{(-CR\_GAIN\_BEFORE)} \) .
31:8RESERVED31_80x0RReserved.
Table 105. VIT_CONF_DIG_ENG register description
BitField nameResetRWDescription
7:0VIT_CONF0x0RWViterbi control register
- VIT_CONF[0] = enable the Viterbi
- VIT_CONF[1] = PD_DETECT_MODE: Preamble detection mode selection (0 = Peak repetition, 1 = RSSI)
31:8RESERVED31_80x0RReserved

Table 106. LR_PD_THR_DIG_ENG register description

BitField nameResetRWDescription
7:0LR_PD_THR0x50RWPreamble detect threshold value
31:8RESERVED31_80x0RReserved.

Table 107. LR_RSSI_THR_DIG_ENG register description

BitField nameResetRWDescription
7:0LR_RSSI_THR0x1BRWRSSI or peak threshold value.
31:8RESERVED31_80x0RReserved.

Table 108. LR_AAC_THR_DIG_ENG register description

BitField nameResetRWDescription
7:0LR_RSSI_THR0x1BRWAddress coded correlation threshold.
31:8RESERVED31_80x0RReserved.

Table 109. DTB0_DIG_ENG register description

BitField nameResetRWDescription
0DTB_EN0x0RWEnable DTB.
4:1DTB_CFG0x0RWDTB configuration.
7:5SPARE0x0RWSpare.
31:8RESERVED31_50x0RReserved.

Table 110. DTB5_DIG_ENG register description

BitField nameResetRWDescription
0RXTX_START_SEL0x0RWIt enables the other bits of the register to control the signal in place of the functional 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.
4PORT_SELECTED_EN0x0RWEnable port selection.
5PORT_SELECTED_00x0RWForce port_selected[0] signal.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 111. MOD0_DIG_TST register description

BitField nameResetRWDescription
0MOD_DIG_TEST_SEL0x0RWSelection
- 0: forced by modulator (normal mode)
- 1: not forced by modulator but by MODx_TST registers values (test mode)
2:1SPARE0x0RWSpare
3PMU_NO_MODULTATION0x0RWBypass modulation
- 0: no bypass
- 1: bypass
7:4KFORCE_3_00x0RWFraction part.
31:8RESERVED31_80x0RReserved.

Table 112. MOD1_DIG_TST register description

BitField nameResetRWDescription
7:0KFORCE_11_40x0RWFraction part.
31:8RESERVED31_80x0RReserved.

Table 113. MOD2_DIG_TST register description

BitField nameResetRWDescription
7:0KFORCE_19_120x80RWFraction part.
31:8RESERVED31_80x0RReserved.

Table 114. MOD3_DIG_TST register description

BitField nameResetRWDescription
2:0AFORCE0x0RWInteger part.
7:3MFORCE0x13RWInteger part.
31:8RESERVED31_80x0RReserved.

Table 115. RXADC_ANA_USR register description

BitField nameResetRWDescription
2:0RFD_RXADC_DELAYTRIM_I0x3RWADC loop delay control bits for I channel.
5:3RFD_RXADC_DELAYTRIM_Q0x3RWADC loop delay control bits for Q channel.
6RXADC_DELAYTRIM_I_TST_SEL0x0RWWhen set, RFD_RXADC_DELAYTRIM_I[2:0] bit field is used instead of the HW trimming.
7RXADC_DELAYTRIM_Q_TST_SEL0x0RWWhen set, RFD_RXADC_DELAYTRIM_Q[2:0] bit field is used instead of the HW trimming.
31:8RESERVED31_80x0RReserved.

Table 116. LDO_ANA_ENG register description

BitField nameResetRWDescription
0SPARE0x0RWSpare.
1RFD_LDO_TRANSFO_BYPASS0x0RWVDD level Bypass mode
- 0: Bypass mode disabled
- 1: LDO in bypass mode.
2RFD_LDO_RXADC_BYPASS0x0RWVDD level Bypass mode
- 0: Bypass mode disable
- 1: LDO in Bypass mode.
3RFD_LDO_RX_TX_BYPASS0x0RWVDD level Bypass mode
- 0: Bypass mode disable
- 1: LDO in Bypass mode.
7:4SPARE0x8RWSpare.
31:8RESERVED31_80x0RReserved.

Table 117. CBIAS0_ANA_ENG register description

BitField nameResetRWDescription
3:0RFD_CBIAS_IBIAS_TRIM0x7RWIbias current trimming.
7:4RFD_CBIAS_IPTAT_TRIM0x7RWIbias current trimming.
31:8RESERVED31_80x0RReserved.

Table 118. CBIAS1_ANA_ENG register description

BitField nameResetRWDescription
3:0RFD_CBIAS_VBG_TRIM0x7RWSoftware value to overload HW VBG current trimming.
4RFD_CBIAS_ENA_ATB_CURR0x0RWEnable CB for ATB
- 0: disable
- 1: enable.
5CBIAS_CURR2_PREBOOST0x0RWSelect the moment to activate the current 2 section:
- 0: RFD_CBIAS_SEL_CURR_2 active from ENA_LDO state of the Radio FSM
- 1: RFD_CBIAS_SEL_CURR_2 active from VBG_BOOST state of the radio FSM.
6CBIAS_VBG_TRIM_TST_SEL0x0RWSelect the VBG trimming value source:
- 0: trimming applied on the analog block are the HW loaded ones
- 1: trimming applied on the analog block are provided by the RFD_CBIAS_VBG_TRIM bit fields (SW values).
7CBIAS0_TRIM_TST_SEL0x0RWSelect the CBIAS IPTAT and IBIAS trimming values source:
- 0: trimming applied on the analog block are the HW loaded ones
- 1: trimming applied on the analog block are provided by the CBIAS0_ANA_ENG bit fields (SW values).
31:8RESERVED31_80x0RReserved.
Table 119. CBIAS_ANA_TEST register description
BitField nameResetRWDescription
0CBIAS_ANA_TST_SEL0x0RWSelection
- 0: default value is 0
- 1: forced by this register.
1RESERVED0x0RWReserved.
2RFD_CBIAS_ENA_CORE0x0RWEnable core central bias
- 0: disable
- 1: enable
3RFD_CBIAS_SEL_CURR_10x0RWEnable the CBIAS CURRENT 1
- 0: disable
- 1: enable
4RFD_CBIAS_SEL_CURR_20x0RWEnable the CBIAS CURRENT 2
- 0: disable
- 1: enable
5RFD_CBIAS_ENA_NF_OFF0x0RWDisable the Noise Filter
- 0: Noise Filter is ON,
- 1: Noise Filter is OFF
6RFD_CBIAS_ENA_VBG_BOOST0x0RWVBG boost enable
- 0: disable
- 1: enable
7RFD_CBIAS_ENA_VBG0x0RWVBG enable
- 0: disable
- 1: enable
31:8RESERVED31_80x0RReserved.
Table 120. SYNTHCAL0_DIG_OUT register description
BitField nameResetRWDescription
6:0VCO_CALAMP_OUT_6_00x0RVCO CALAMP value.
7RESERVED70x0RReserved.
31:8RESERVED31_80x0RReserved.
Table 121. SYNTHCAL1_DIG_OUT register description
BitField nameResetRWDescription
3:0VCO_CALAMP_OUT_10_70x1RVCO CALAMP value.
7:4SPARE0x0RReserved.
31:8RESERVED31_80x0RReserved.
Table 122. SYNTHCAL2_DIG_OUT register description
BitField nameResetRWDescription
6:0VCO_CALFREQ_OUT0x40RVCO CALFREQ value.
7RESERVED70x0RReserved.
31:8RESERVED31_80x0RReserved.

Table 123. SYNTHCAL3_DIG_OUT register description

BitField nameResetRWDescription
3:0SYNTHCAL_DEBUG_BUS0x0RCalibration debug bus.
7:4RESERVED7_40x0RReserved.
31:8RESERVED31_80x0RReserved.

Table 124. SYNTHCAL4_DIG_OUT register description

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

Table 125. . SYNTHCAL5_DIG_OUT register description

BitField nameResetRWDescription
3:0CBP_CALIB_WORD0x7RCBP calibration word.
7:4RESERVED7_40x0RReserved.
31:8RESERVED31_80x0RReserved.

Table 126. FSM_STATUS_DIG_OUT register description

BitField nameResetRWDescription
4:0STATUS0x0RSTATUS: RF FSM state:
- 00000: IDLE
- 00001: ACTIVE1
- 00010: VBG_BOOST
- 00011: ENA_CURR
- 00100: ACTIVE2
- 00101 to 01111: Not used
- 10000: ENA_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 127. IRQ_STATUS_DIG_OUT register description

BitField nameResetRWDescription
7:0RESERVED7_00x0RReserved.
31:8RESERVED31_80x0RReserved.

Table 128. RSSI0_DIG_OUT register description

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

Table 129. RSSI1_DIG_OUT register description

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

Table 130. AGC_DIG_OUT register description

BitField nameResetRWDescription
3:0AGC_ATT_OUT0x0RAGC attenuation value.
7:4RESERVED7_40x0RReserved.
31:8RESERVED31_80x0RReserved.

Table 131. DEMOD_DIG_OUT register description

BitField nameResetRWDescription
1:0CI_FIELD0x0RCI field
2AAC_FOUND0x0Raac_found
3PD_FOUND0x0Rpd_found
4RX_END0x0Rrx_end
7:5RESERVED7_50x0RReserved.
31:8RESERVED31_80x0RReserved.

Table 132. AGC0_ANA_TST register

BitField nameResetWDescription
0AGC0_ANA_TST_SEL0x0RWSelection
- 0: default value is 0 (normal mode),
- 1: forced by register (test mode).
3:1AGC_ANT0x0RWAGC on antenna.
4AGC_LNA0x0RWAGC on LNA.
7:5SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 133. AGC1_ANA_TST register description

BitField nameResetRWDescription
0AGC1_ANA_TST_SEL0x0RWSelection
- 0: default value is 0 (normal mode),
- 1: forced by this register (test mode).
5:1AGC_IFATT0x0RWAGC on IF ATT.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 134. 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.
- 1: forced by this register (test mode): the AGC antenna trim value comes from the AGC2_ANA_RST[3:1] bit field value.
3:1AGC_ANTENNAE_USR_TRIM0x0RWAGC trimming.
7:4SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 135. AGC0_DIG_ENG register description

BitField nameResetRWDescription
5:0AGC_THR_HIGH0x1ERWHigh AGC threshold.
6AGC_ENABLE0x1RWEnable AGC.
7SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 136. AGC1_DIG_ENG register description

BitField nameResetRWDescription
5:0AGC_THR_LOW_60xDRWLow threshold for 6dB steps.
6AGC_AUTOLOCK0x1RWAGC locks when level is steady between high threshold and lock threshold.
7AGC_LOCK_SYNC0x1RWAGC locks when AA is detected.
31:8RESERVED31_80x0RReserved.

Table 137. AGC2_DIG_ENG register description

BitField nameResetRWDescription
5:0AGC_THR_LOW_120x6RWLow AGC threshold for 12 dB steps.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 138. AGC3_DIG_ENG register description

BitField nameResetRWDescription
5:0AUTOLOCK_THR0x1ARWThreshold for autolock.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 139. AGC4_DIG_ENG register description

BitField nameResetRWDescription
3:0AGC_HOLD_TIME_FAST0x3RWAGC hold time for fast transitions.
7:4AGC_HOLD_TIME_SLOW0x7RWAGC hold time for slow transitions.
31:8RESERVED31_80x0RReserved.
Table 140. AGC5_DIG_ENG register description
BitField nameResetRWDescription
3:0T_MEAS0xFRWMeasurement time.
7:4T_INT0x0RWDuration for AGC initial wait phase.
31:8RESERVED31_80x0RReserved.
Table 141. AGC6_DIG_ENG register description
BitField nameResetRWDescription
6:0HOLD_TIME_SEL_10_40x0RWHold time selection bit.
7SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.
Table 142. AGC7_DIG_ENG register description
BitField nameResetRWDescription
6:0TH_LOW_SEL_10_40x0RWLow threshold selection bit.
7SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.
Table 143. AGC8_DIG_ENG register description
BitField nameResetRWDescription
3:0HOLD_TIME_SEL_3_00x0RWHold time selection bit.
7:4TH_LOW_SEL_3_00x0RWLow threshold selection bit.
31:8RESERVED31_80x0RReserved.
Table 144. AGC9_DIG_ENG register description
BitField nameResetRWDescription
3:0START_SEQ0x0RWInitial AGC value.
7:4MAX_SEQ0x9RWMaximum value for the AGC value.
31:8RESERVED31_80x0RReserved.
Table 145. AGC10_DIG_ENG register description
BitField nameResetRWDescription
5:0ATT_00x0RWMapping for AGC step 0.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.
Table 146. AGC11_DIG_ENG register description
BitField nameResetRWDescription
5:0ATT_10x0RWMapping for AGC step 1.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 147. AGC12_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_20x0RWMapping for AGC step 2.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 148. AGC13_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_30x0RWMapping for AGC step 3.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 149. AGC14_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_40x0RWMapping for AGC step 4.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 150. AGC15_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_50x0RWMapping for AGC step 5.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 151. AGC16_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_60x0RWMapping for AGC step 6.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 152. AGC17_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_70x0RWMapping for AGC step 7.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 153. AGC18_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_80x0RWMapping for AGC step 8.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 154. AGC19_DIG_ENG register description

BitField nameResetRWDescription
5:0ATT_90x0RWMapping for AGC step 9.
7:6SPARE0x0RWSpare.
31:8RESERVED31_80x0RReserved.

Table 155. AGC20_DIG_ENG register description

BitField nameResetRWDescription
7:0I_GAIN_COMP0x80RWGain compensation for I branch.
31:8RESERVED31_80x0RReserved.

Table 156. 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 HW trimming, automatically loaded on POR).
5:3HW_RXADC_DELAYTRIM_Q0x3RControl bits of the RX ADC loop delay for Q channel (provided by the HW trimming, automatically loaded on POR).
7:6SPARE0x0RSpare.
31:8RESERVED31_80x0RReserved.

Table 157. CBIAS0_HW_TRIM_OUT register description

BitField nameResetRWDescription
3:0HW_CBIAS_IBIAS_TRIM0x8RIBIAS current (provided by the HW trimming, automatically loaded on POR).
7:4HW_CBIAS_IPTAT_TRIM0xERIPTAT current (provided by the HW trimming, automatically loaded on POR).
31:8RESERVED31_80x0RReserved.

Table 158. CBIAS1_HW_TRIM_OUT register description

BitField nameResetRWDescription
3:0HW_CBIAS_VBG_TRIM0x8RVBG current (provided by the HW trimming, automatically loaded on POR).
31:4RESERVED31_80x0RReserved.

Table 159. AGC_HW_TRIM_OUT register description

BitField nameResetRWDescription
0RESERVED0x0RReserved.
3:1HW_AGC_ANTENNAE_TRIM0x6RAGC trim value (provided by the HW 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.

23.4 Radio FSM

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

23.4.1 Radio FSM sequences

This paragraph lists the main steps in radio FSM sequence.

The current state information is available in the FSM_STATUS_DIG_OUT radio register accessible by direct APB access through RRM register map (see RRM registers list).

23.4.2 Radio FSM interrupts

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

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

See Section 23.5.3: Radio controller registers for more details.

23.5 Radio controller

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

23.5.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 period result is provided in 16 MHz half-period unit.

23.5.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:

23.5.3 Radio controller registers

Table 160. Radio Controller registers list

Address offsetNameRWResetDescription
0x00RADIO_CONTROL_IDR0x00001000Radio controller ID 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

Table 161. RADIO_CONTROL_ID register description

BitField nameResetRWDescription
31:0IDENTIFICATION0x1000RRadio control Identification register.

Table 162. CLK32COUNT_REG register description

BitField nameResetRWDescription
8:0SLOW_COUNT0x17RWProgram 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 have a good behavior use not less than 0xF
31:9RESERVED31_90x0RReserved

Table 163. 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 CLK32PERIOD register. In this case, the time window uses the value programmed in SLOW_COUNT field.
31:19RESERVED31_190x0RReserved

Table 164. CLK32FREQUENCY_REG register description

BitField nameResetRWDescription
26:0SLOW_FREQUENCY0x0RValue equal to \( (2^{39} / \text{SLOW\_PERIOD}) \) .
Warning: This register is updated only 28 x 16 MHz cycles = 1.75 µs after the associated IRQ line/status bit are raised.
31:27RESERVED31_270x0RReserved

Table 165. 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
Write '1' to clear the interrupt.
31:14RESERVED31_140x0RReserved

Table 166. RADIO_CONTROL_IRQ_ENABLE register description

BitField nameResetRWDescription
0SLOW_CLK_IRQ_MASK0x0RWMask slow clock measurement interrupt
0: IT disabled / 1: IT enabled
7:1RESERVED7_10x0RReserved
13:8RADIO_FSM_IRQ_MASK0x0RWMask for each RfFsm_event (Radio FSM) interrupt.
- 0: Interrupt disabled
- 1: Interrupt enabled.
RfFsm_event [5] = synth_cal_error
RfFsm_event [4] = lock_failed
RfFsm_event [3] = synth_unlock_detect
RfFsm_event [2] = synth_cal_timeout
RfFsm_event [1] = cbp_cal_timeout
RfFsm_event [0] = lock_timeout
31:14RESERVED31_140x0RReserved

23.6 Bluetooth LE controller sequence

The Bluetooth LE controller 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.

23.6.1 Timers

Three different timers can trig the Bluetooth LE controller sequence:

1. Wakeup timer event

2. Timer1 timer

3. Timer2 timer

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. The three timers are managed in different ways. Therefore, the software has to ensure it does not start a timer while another one is already on-going for the next sequence.

Here is how the three timers are enabled/disabled:

Note:

23.6.2 Bluetooth LE sequence description

The first RAM access done by the sequencer on any trigger event is to get the GlobalStatMach word 0x01 to check the active bit.

If the active bit is low, then nothing is done except:

Otherwise, if active bit is high, the parameters that the controller reads during the first phase are considered as ready and updated. Then, the sequencer block starts a sequence divided in several steps. At the end of these steps, an interrupt (if at least one active source enabled) is generated to the CPU.

23.6.2.1 First initialization step

The 1 st INIT step starts on the trigger event (from the wakeup timer or the Timer1 or the Timer2).

During this initialization step, the sequencer only reads the minimum number of parameters to request the radio initialization for a transmission or a reception.

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

Note: The Bluetooth LE wakeup event is based on 32 kHz granularity (absolute_time[31:4]). Then Bluetooth LE wakeup event occurs at BLUE_WAKEUP_TIME[31:4], but the controller waits until BLUE_WAKEUP_TIME[31:0] + WakeupInitDelay. It means that in any case the sequencer during 1 st INIT step manages the 512 kHz granularity.

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

When the 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:

23.6.2.2 Second Initialization step

The 2 nd INIT step starts when the TX or RX request is sent to the radio FSM and once few delays have been read in the GlobalStatMach by the sequencer. Those delays are needed during the 2 nd INIT and DATA INIT steps.

TxRxPack.AllTableReady is the first flag that the sequencer checks during the second initialization step: if it reads TxRxPack.AllTableReady = 1 then everything is OK and it continues reading the remaining parameters required for the second initialization step. If the sequencer reads TxRxPack.AllTableReady = 0 then this means that the RAM table programming is not coherent and the sequencer stops its sequence by sending an interrupt to the CPU (if enabled) and sets StatusReg.AllTableReadyError = 1.

During the 2 nd INIT step, the sequencer gets all the information from the RAM tables linked to the transfer to proceed (except DatPtr and TxDataReady bit fields).

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

This 2 nd INIT step ends on a timeout based on 2-bit fields in the GlobalStatMach:

The init_radio_delay duration must not exceed the RF analog set-up time up to power on the antenna for a transmission (or ready to receive on the antenna). This means it must not exceed:

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 (or else garbage is sent while 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 count starts when the init_radio_delay expires.

At very beginning of the 2 nd INIT step:

The GlobalStatMach.ConfigEndDuration bit field allows delaying the reading of the transfer information contained in the RAM tables by the sequencer. Indeed, the init_radio_delay (2 nd INIT + DATA INIT steps duration) must fit in the analog radio set-up duration which is supposed to be longer than the RAM tables reading by the sequencer. The 2 nd INIT ends when the relative timer reaches “init_radio_delay – TxdataReadyCheck”.

23.6.2.3 Data initialization step

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

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 reaches init_radio_delay:

The transmit block receives some information from the radio FSM, it is in TX state to synchronize the moment data can start to 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.

23.6.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 the transfer is done:

Important:

23.6.2.5 Context saving step

Once the sequence receives the tx_done pulse from the transmit block or the rcv_done pulse from the receive block, it starts the RAM write back operation.

The RAM write back impacts the following RAM table elements:

23.6.3 Bluetooth LE sequence summary

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

Figure 185. TX sequence

Timing diagram for TX sequence showing stages: 1st Init, 2nd Init, DATA_INIT, TX, and RAM write back. It includes timing parameters like Init_Delay, Init_Radio_Delay, ConfigEnd_Duration, TxData_ReadyCheck, TxDelayStart, TxReadyTimeout, TxdelayEnd, and an IRQ to CPU signal.

The diagram illustrates the timing sequence for a transmission (TX). It starts with a 'Trigger' signal. The sequence consists of five main stages: '1st Init', '2nd Init', 'DATA_INIT', 'TX', and 'RAM write back'.
Key timing intervals are defined:
• 'Init_Delay': Time from Trigger to the start of '1st Init'.
• 'Init_Radio_Delay': Time from the start of '1st Init' to the start of 'DATA_INIT'.
• 'ConfigEnd_Duration': Time from the end of '2nd Init' to the start of 'TX'.
• 'TxDataReadyCheck': Time within 'DATA_INIT' stage.
• 'TxDelayStart': Time from the end of 'DATA_INIT' to the start of 'TX'.
• 'TxReadyTimeout': Time from the end of 'DATA_INIT' to the end of 'TX'.
• 'TxdelayEnd': Time from the end of 'TX' to the end of 'RAM write back'.
The 'IRQ to CPU' signal is generated at the end of the 'RAM write back' stage.

Timing diagram for TX sequence showing stages: 1st Init, 2nd Init, DATA_INIT, TX, and RAM write back. It includes timing parameters like Init_Delay, Init_Radio_Delay, ConfigEnd_Duration, TxData_ReadyCheck, TxDelayStart, TxReadyTimeout, TxdelayEnd, and an IRQ to CPU signal.

Figure 186. RX sequence

Timing diagram for RX sequence showing stages: 1st Init, 2nd Init, DATA_INIT, RX, and RAM write back. It includes timing parameters: InitDelay, Init_Radio_Delay, ConfigEnd Duration, TxData ReadyCheck, and RcvTimeout. An interrupt (IRQ to CPU) is generated after the RAM write back stage.

The diagram illustrates the RX sequence timing. It starts with a 'Trigger' signal. The sequence consists of five main stages: '1st Init', '2nd Init', 'DATA_INIT', 'RX', and 'RAM write back'.

Timing diagram for RX sequence showing stages: 1st Init, 2nd Init, DATA_INIT, RX, and RAM write back. It includes timing parameters: InitDelay, Init_Radio_Delay, ConfigEnd Duration, TxData ReadyCheck, and RcvTimeout. An interrupt (IRQ to CPU) is generated after the RAM write back stage.

23.6.4 TX and RX sequence signals

The controller 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 additional logical mechanism. The external PA can be useful to extend the TX power.

This signal is raised as soon as a transmission is requested (2 nd INIT step starting point) and goes down as soon as the system switches off the internal PA.

On the other hand, the controller provides a signal to monitor a reception request.

See RADIO_TX_SEQUENCE and RADIO_RX_SEQUENCE GPIO alternate functions in Section 7.3.2: I/O pin alternate function multiplexer and mapping to find the pins that support this feature.

23.6.5 Bluetooth LE controller registers

Table 167. Bluetooth LE controller register list

Address offsetNameRWResetDescription
0x00RESERVEDR0x00010100Reserved.
0x04INTERRUPT1REGRW0x00000000Interrupt pending and interrupt clear register 1.
0x08INTERRUPT2REGRW0x00000000Interrupt pending and interrupt clear register 2.
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
0x74DEBUGCMDREGRW0x00000000DebugCmdReg register
0x78DEBUGSTATUSREGR0x00000000DebugStatusReg register
Table 168. INTERRUPT 1REG register description
BitField nameResetRWDescription
3:0RESERVED3_00x0RReserved
4ADDPPOINTERROR0x0RWAddress Pointer Error.
When read, indicates the interrupt status.
Write 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 AES did not acknowledge the transmit block request on time.
When read, indicates the interrupt status.
Write 1'b1 to clear.
Note: On this error, the transmit block stops the on-going transmission but the sequencer manages it as a normal end of transmission.
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: Radio FSM did not provide the tx_ready information on time (timeout defined in GlobalStatMach.TxReadyTimeout[7:0] bit field).
When read, indicates the interrupt status.
Write 1'b1 to clear.
12RESERVED0x0RWReserved.
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 (TxRxDat) not ready when TX on antenna was about to start.
When read, indicates the interrupt status.
Write 1'b1 to clear.
16NOACTIVEERROR0x0RWGlobStatMach.active bit error (read as 0 on a triggered sequence).
When read, indicates the interrupt status.
Write 1'b1 to clear.
17RESERVED0x0RWReserved.
18RCVLENGTHERROR0x0RWReceive length error.
When read, indicates the interrupt status.
Write 1'b1 to clear.
BitField nameResetRWDescription
19SEMATIMEOUTERROR0x0RWSemaphore timeout error.
When read, indicates the interrupt.
Write 1'b1 to clear.
20RESERVED0x0RWReserved.
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 MD bit embedded in the PDU data packet header was zero.
When read, indicates the interrupt status.
Write 1'b1 to clear.
28RCVCMD0x0RWReceived command.
When read, indicates the interrupt status.
Write 1'b1 to clear.
29TIMECAPTURETRIG0x0RWTimerCaptureReg time capture.
When read, indicates the interrupt status.
Write 1'b1 to clear.
30RCVCRCERR0x0RWReceive data fail (CRC error or preamble not found or invalid CI field error).
When read, indicates the interrupt status.
Write 1'b1 to clear.
Note: This error is raised only if at least preamble and access address have been detected.
31RCVOK0x0RWReceive data OK.
When read, indicates the interrupt status.
Write 1'b1 to clear.
Table 169. INTERRUPT2REG register description
BitField nameResetRWDescription
0AESMANENCINT0x0RWAES manual encryption.
When read, indicates the interrupt status.
Write 1'b1 to clear.
1AESLEPRIVINT0x0RWAES LE privacy engine.
When read, indicates the interrupt status.
Write 1'b1 to clear.
31:2RESERVED31_20x0RReserved.
Table 170. 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.
31:2RESERVED31_20x0RReserved
Table 171. 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.
Table 172. TIMERCAPTUREREG register description
BitField nameResetRWDescription
31:0TIMERCAPTURE0x0RInterpolated absolute time capture register (cf. TxRxPack.TrigRcv/TrigDone, GlobStatMach.TimeCapture/TimeCaptureSel for detailed specifications)
This register is cleared on the beginning of a new Bluetooth LE sequence.
Time unit is in 16 x slow clock so typically 512 kHz period cycle.
Table 173. CMDREG register description
BitField nameResetRWDescription
0TXRXSKIP0x0RTransmission/Reception skip command.
This bit is auto-cleared by the HW.
1:2RESERVED0x0RWReserved.
3CLEARSEMAREQ0x0RSemaphore 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.
This bit is auto-cleared by the HW.
31:4RESERVED31_40x0RReserved
Table 174. STATUSREG register description
BitField nameResetRWDescription
0AESONFLYBUSY0x0RAES on the fly encryption busy status
1:2RESERVED2_10x0RReserved
3NOT_SUPPORTED_FEATURE0x0RIt indicates the SW requests an unsupported feature. This event happens if the SW requests a long range transfer (coded PHY) while the feature is disabled by OBL.
4ADDPERROR0x0RAddress Pointer Error status.
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 (when the transmit block has to transmit serially a bit and has no more data as the AES block did not provide a new data byte yet).
Note: On this error, the transmit block stops the on-going transmission but the sequencer manages it as a normal end of transmission. The flag is the only information available for the user.
9TXERROR_10x0RTransmission error 1 status (when CmdReg.TxRxSkip=1 happens when a transmission is on-going).
10TXERROR_20x0RTransmission error 2 status (if StateMach.Remap_chan >39).
11TXERROR_30x0RTransmission error 3 status (if i_tx_ready=0 after the time value defined by GlobStatMach.TxReadyTimeout.)
12TXERROR_40x0RTransmission error 4 status (the SupplementalTime field is not between 2 and 20 inclusive or in case of coded packet or if Supplemental type is 3)
13ENCERROR0x0REncryption error on receive status
14ALLTABLEREADYERROR0x0RAll RAM Table not ready status
15TXDATAREADYERROR0x0RTransmit data pack (TxRxDat) not ready status
16NOACTIVELEERROR0x0RGlobStatMach.active bit error (read as 0) status
17RESERVED0x0R(Was previously INITDELAYERROR but this error can no longer occur with new Time Interpolator implementation)
18RCVLENGTHERROR0x0RReceive length error status
19SEMATIMEOUTERROR0x0RSemaphore timeout error status
20SEMAWASPREEMPT (*)0x0RBluetooth LE has been preempted. Semaphore status
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 (TxRxDat.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.
BitField nameResetRWDescription
This flag is set if the sequencer reached the TX/RX phase (start pulse sent to the receive/transmit block which returned a done pulse).
26RCVTIMEOUT0x0RReceive timeout status (no preamble found).
27RCVNOMD0x0RReceived MD bit embedded in the PDU data packet header was zero status
28RCVCMD0x0RReceived command status
This flag is raised when LLID = 2'b11 in the received data packet header.
29TIMECAPTURETRIG0x0RTimerCaptureReg time capture status
30RCVRCERR0x0RReceive data fail. (CRC error or preamble not found or invalid CI field)
31RCVOK0x0RReceive data OK status

Note:

Table 175. INTERRUPT1ENABLEREG register description

BitField nameResetRWDescription
3:0RESERVED3_00x0RReserved.
4ADDPOINTERROR0x0RAddress Pointer Error enable interruption (Read Only).
5RXOVERFLOWERROR0x0RRX Overflow Error enable interruption (Read Only).
6RESERVED60x0RReserved.
7SEQDONE0x0RSequencer end of task enable interruption (Read Only).
8TXERROR_00x0RTransmission error 0 enable interruption (Read Only).
9TXERROR_10x0RTransmission error 1 enable interruption (Read Only).
10TXERROR_20x0RTransmission error 2 enable interruption (Read Only).
11TXERROR_30x0RTransmission error 3 enable interruption (Read Only)
12RESERVED0x0RReserved.
13ENCERROR0x0REncryption error on receive enable interruption (Read Only).
14ALLTABLEREADYERROR0x0RAll RAM Table not ready enable interruption (Read Only).
15TXDATAREADYERROR0x0RTransmit data pack (TxRxDat) not ready enable interruption (Read Only).
16NOACTIVEERROR0x0RGlobStatMach.active bit error (read as 0) enable interruption (Read Only).
17RESERVED0x0RReserved.
18RCVLENGTHERROR0x0RReceive length error enable interruption (Read Only)
19SEMATIMEOUTERROR0x0RSemaphore timeout error enable interruption (Read Only).
20RESERVED0x0RReserved.
21TXRXSKIP0x0RTransmission/Reception skip enable interruption (Read Only).
22ACTIVE2ERROR0x0RActive2 Radio state error enable interruption (Read Only).
23CONFIGERROR0x0RData pointer configuration error enable interruption (Read Only).
24TXOK0x0RPrevious transmitted packet received OK enable interruption (Read Only).
25DONE0x0RReceive/Transmit done interruption (Read Only).
26RCVTIMEOUT0x0RReceive timeout enable interruption (Read Only) (no preamble found).
27RCVNOMD0x0RReceived MD bit embedded in the PDU data packet header was zero enable interruption (Read Only).
28RCV CMD0x0RReceived command enable interruption (Read Only).
29TIMECAPTURETRIG0x0RTimerCaptureReg time capture enable interruption (Read Only).
30RCV CRCERR0x0RReceive data fail enable interruption (Read Only).
31RCVOK0x0RReceive data OK enable interruption. (Read Only).

Table 176. INTERRUPT1LATENCYREG register description

BitField nameResetRWDescription
7:0INTERRUPT1LATENCY0x0RRelative time counter after interrupt1.
- Time unit: 1us
- Clamped at 255.
Reset when all interrupt1 sources are cleared or when a new interrupt1 IRQ is raised.
31:8RESERVED31_80x0RReserved
Table 177. MANAESKEY0REG register description
BitField nameResetRWDescription
31:0MANAESKEY_31_00x0RWManual mode AES key
Table 178. MANAESKEY1REG register description
BitField nameResetRWDescription
31:0MANAESKEY_63_320x0RWManual mode AES key
Table 179. MANAESKEY2REG register description
BitField nameResetRWDescription
31:0MANAESKEY_95_640x0RWManual mode AES key
Table 180. MANAESKEY3REG register description
BitField nameResetRWDescription
31:0MANAESKEY_127_960x0RWManual mode AES key
Table 181. MANAESCLEARTEXT0REG register description
BitField nameResetRWDescription
31:0AES_CLEAR_31_00x0RWManual AES Clear Text
Table 182. MANAESCLEARTEXT1REG register description
BitField nameResetRWDescription
31:0AES_CLEAR_63_320x0RWManual AES Clear Text
Table 183. MANAESCLEARTEXT2REG register description
BitField nameResetRWDescription
31:0AES_CLEAR_95_640x0RWManual AES Clear Text
Table 184. MANAESCLEARTEXT3REG register description
BitField nameResetRWDescription
31:0AES_CLEAR_127_960x0RWManual AES Clear Text
Table 185. MANAESCHIPHERTEXT0REG register description
BitField nameResetRWDescription
31:0AES_CIPHER_31_00x0RManual AES cipher text
Table 186. MANAESCHIPHERTEXT1REG register description
BitField nameResetRWDescription
31:0AES_CIPHER_63_320x0RManual AES cipher text
Table 187. MANAESCHIPHERTEXT2REG register description
BitField nameResetRWDescription
31:0AES_CIPHER_95_640x0RManual AES Cipher Text
Table 188. MANAESCHIPHERTEXT3REG register description
BitField nameResetRWDescription
31:0AES_CIPHER_127_960x0RManual AES cipher Text
Table 189. MANAESCMDREG register description
BitField nameResetRWDescription
0START0x0RAES manual encryption Start command.
This bit is auto-cleared by the HW.
1INTENA0x0RWAES manual encryption interrupt enable on Interrupt2Reg.
31:2RESERVED31_20x0RReserved.
Table 190. MANAESSTATREG register description
BitField nameResetRWDescription
0BUSY0x0RAES manual encryption busy status
31:1RESERVED31_10x0RReserved
Table 191. AESLEPRIVPOINTERREG register description
BitField nameResetRWDescription
23:0POINTER0x0RWAES LE privacy pointer
31:24RESERVED31_240x0RReserved
Table 192. AESLEPRIVHASHREG register description
BitField nameResetRWDescription
23:0HASH0x0RWAES LE privacy Reference Hash
31:24RESERVED31_240x0RReserved
Table 193. AESLEPRIVCMDREG register description
BitField nameResetRWDescription
0START0x0RAES LE privacy Start command.
This bit is auto-cleared by the HW.
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 194. AESLEPRIVSTATREG register description

BitField nameResetRWDescription
0BUSY0x0RAES LE privacy busy status.
1KEYFND0x0RAES LE privacy key finding status.
9:2KEYFNDINDEX0x0RAES LE privacy index of the key found in the resolution key list.
31:10RESERVED31_100x0RReserved.

Table 195. DEBUGCMDREG register description

BitField nameResetRWDescription
0CLEARDEBUGINT0x0RWDebug interrupt.
Write '1' to clear.
1SEQDEBUGMODE0x0RWEnable the debug mode for sequencer.
5:2SEQDEBUGBUSSEL[30]0x0RWSequencer debug bus selection for DebugStatusReg[50] meaning.
15:6RESERVED15_60x0RFor future use.
19:16AESDEBUGMODE0x0RWAES debug flags clear.
All bits must be written to '1' together to clear the DebugStatusReg[19:16] bits.
Caution: this bit field is not cleared by hardware. The software must clear it to be able to get again the AES debug flag information.
Note: This clear operation is possible/taken into account only while AES is ON.
31:20RESERVED31_200x0RReserved.

Table 196. DEBUGSTATUSREG register description

BitField nameResetRWDescription
6:0DEBUGSTATUSREG[6:0]0x0RDepending on DebugCmdReg[5:2] bit field value
- If DebugCmdReg[5:2] = 0 (default):
• SEQERROR_4: detect something was wrong during the sequence and no RAM write back occurred (backdoor for debug).
• SEQERROR_3: detect when Rcv/Transmit(No)CalDelayChk duration is elapsed, but all required conditions are not fulfilled
• SEQERROR_2: detect when InitDelay duration is elapsed, but all required conditions are not fulfilled
• SEQERROR_1: detect when (internal) watchdog timer is elapsed, but the Writeback phase is not finished.
• SEQERROR_0: detect when a trig event happened but the sequencer was not in IDLE state (if a sequence was currently running).
- If DebugCmdReg[5:2] = 1:
• DebugStatusReg[6:5] = 0
• DebugStatusReg[4:0] = MAIN_STATE[4:0]
- If DebugCmdReg[5:2] = 2:
• DebugStatusReg[6] = 0
• DebugStatusReg[5:0] = SLV_STATE[4:0]
- If DebugCmdReg[5:2] = 3:
• DebugStatusReg[6] = 0
• DebugStatusReg[5:0] = SLV_STATE_ERROR[4:0]
- If DebugCmdReg[5:2] = others:
• DebugStatusReg[6:0] = 0
15:7RESERVED15_60x0RFor future use.
BitField nameResetRWDescription
16AESDBG_00x0RAES RX error flag.
RX tries to write a data while the packet key is not available.
Cleared by writing 0xF in DebugCmdReg[19:16].
17AESDBG_10x0RAES TX error flag.
TX tries to read a data while the packet key is not available.
Cleared by writing 0xF in DebugCmdReg[19:16].
18AESDBG_20x0RMIC error flag.
Cleared by writing 0xF in DebugCmdReg[19:16]
19AESDBG_30x0RFor future use
31:20RESERVED31_200x0RFor future use

23.7 Bluetooth LE RAM tables

Each time a trigger event is sent to the Bluetooth LE controller, 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 tables:

The following figure gives an overview of RAM tables dependencies.

Figure 187. RAM table tree

RAM table tree diagram showing the hierarchy of RAM tables. At the top is GlobalStatMach, which points to CmdAddrList and UDRA Command List. GlobalStatMach also points to StatMach0 and StatMach1. StatMach0 and StatMach1 each point to a list of TxPack and RxPack tables. TxPack and RxPack tables point to TX buffer and RX buffer respectively. DataPtr in TxPack and RxPack tables point to DataPack tables.
graph TD
    GlobalStatMach[GlobalStatMach
RadioConfigPtr
CurStatMachNum] --> CmdAddrList[CmdAddrList] GlobalStatMach --> UDRA[UDRA Command List] GlobalStatMach --> StatMach0[StatMach0] GlobalStatMach --> StatMach1[StatMach1] StatMach0 --> TxPack0_0[TxPack0
Next
DataPtr] StatMach0 --> TxPackN_0[TxPackN
Next
DataPtr] StatMach0 --> RxPack0_0[RxPack0
Next
DataPtr] StatMach0 --> RxPackN_0[RxPackN
Next
DataPtr] TxPack0_0 --> TXBuf0_0[TX buffer] TxPackN_0 --> TXBufN_0[TX buffer] RxPack0_0 --> RXBuf0_0[RX buffer] RxPackN_0 --> RXBufN_0[RX buffer] StatMach1 --> TxPack0_1[TxPack0
Next
DataPtr] StatMach1 --> TxPackN_1[TxPackN
Next
DataPtr] StatMach1 --> RxPack0_1[RxPack0
Next
DataPtr] StatMach1 --> RxPackN_1[RxPackN
Next
DataPtr] TxPack0_1 --> TXBuf0_1[TX buffer] TxPackN_1 --> TXBufN_1[TX buffer] RxPack0_1 --> RXBuf0_1[RX buffer] RxPackN_1 --> RXBufN_1[RX buffer]
RAM table tree diagram showing the hierarchy of RAM tables. At the top is GlobalStatMach, which points to CmdAddrList and UDRA Command List. GlobalStatMach also points to StatMach0 and StatMach1. StatMach0 and StatMach1 each point to a list of TxPack and RxPack tables. TxPack and RxPack tables point to TX buffer and RX buffer respectively. DataPtr in TxPack and RxPack tables point to DataPack tables.

23.7.1 GlobalStatMach RAM table

The GlobalStatMach location is frozen by the hardware. This address is 0x200000C0. The GlobalStatMach is unique and mainly contains static information/options.

Table 197. GlobalStatMach

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

Table 198. 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.

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

Table 199. 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 Bluetooth LE sequence only if the ChkFlagAutoClearEna bit = '1'.

7ACTIVE0x0RW

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

Only SeqDone and NoActiveLError flags are raised in StatusReg and Interrupt1Reg (if associated interrupts are enabled).

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 32kHz, this bit field unit is 1 period of 512kHz).

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

23:16TIMER1INITDELAYCAL0x0RW

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.

Note: This bit field is used for Timer2 trig event only if CalReq bit is set in current TxRxBank RAM table (PLL Calibration is requested).

The time unit for this delay is 1us.

Note: This field is written back with value read at the beginning of the Bluetooth LE sequence 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 TxRxBank RAM table (No PLL Calibration is requested).

The time unit for this delay is 1us.

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

Table 200. GlobalStatMach.WORD2 register description
BitField nameResetRWDescription
7:0TRANSMITCALDELAYCHK0x0RWDelay 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 1us.
15:8TRANSMITNOCALDELAYCHK0x0RWDelay 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).
The time unit for this delay is 1us.
23:16RECEIVECALDELAYCHK0x0RWDelay 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).
The time unit for this delay is 1us.
31:24RECEIVENOCALDELAYCHK0x0RWDelay 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).
The time unit for this delay is 1us.
Table 201. GlobalStatMach.WORD3 register description
BitField nameResetRWDescription
7:0CONFIGENDDURATION0x0RWDuration for the Bluetooth LE 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 Bluetooth LE sequencer waits for relative time to be equal to init_radio_delay - ConfigEndDuration before to start the final configuration.
The time unit for this delay is 1us.
15:8TXDATAREADYCHECK0x0RWDuration for the Bluetooth LE sequencer to get the TxDataReady and DatPtr 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 Bluetooth LE sequencer waits for relative time to be equal to init_radio_delay - TxdataReadyCheck before to start the final configuration.
The time unit for this delay is 1us.
23:16TXDELAYSTART0x0RWDelay 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 125ns.
29:24TXDELAYEND0x0RWDelay added between the last bit transmission to the modulator and the "end of transmission" information for the Bluetooth LE sequencer.
The time unit for this delay is 125ns.
This delay allows giving time to the modulator and analog chain to output on the antenna the last bit.
30TIMECAPTURESEL0x0RW0: the captured time (absolute time) corresponds to the end of 1 st INIT step in the Bluetooth LE sequence (InitDelay timeout event). 1: the captured time (absolute time) corresponds to the end of DATA INIT step in the Bluetooth LE sequence (init_radio_delay timeout event).
Note: This bit is for debug purpose.
31TIMECAPTURE0x0RW0: 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 Bluetooth LE APB register is anyway updated with the InitDelay timeout event (mechanism to bypass the fact those 2 GlobalStatMach bits are checked after 1 st 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.
Note: This bit is for debug purpose.
Table 202. GlobalStatMach.WORD4 register description
BitField nameResetRWDescription
7:0TXREADYTIMEOUT0x0RWTransmission 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 1us.
Note: If this value is set to 0, no timeout is activate to wait the TX ready information.
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^{RCVTIMEOUT[19:18]} \times RCVTIMEOUT[17:0]) \)
The time unit for RCVTIMEOUT[17:0] is 1us.
31:28RESERVED31_280x0RWIgnored on write - read as zero
Table 203. GlobalStatMach.WORD5 register description
BitField nameResetRWDescription
0AUTOTXRXSKIPEN0x0RWAutomatic 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.
1RESERVED10x0RWIgnored on write - read as zero
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.
7:3RESERVED7_30x0RWIgnored on write - read as zero
12:8INTSEQERROR0x0RWSequencer errors interrupt enable.
For each bit of IntSeqError[4:0], the associated SeqError[x] flag (located in DebugStatusReg APB Bluetooth LE register) generates an interrupt on the int3 line (debug interrupt).
19:13RESERVED19_130x0RWIgnored on write - read as zero
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.TxDatReady is disabled. 1: the interrupt associated to Interrupt1Reg.TxDatReady 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.
24RESERVED0x0RWReserved
25INTRCVLENGTHERROR0x0RWToo long received payload length interrupt enable.
0: 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.
27RESERVED0x0RWReserved.
28INTSEQDONE0x0RWSequencer end of task interrupt enable.
This bit should always be set to ensure 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 initialization_finished 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.
BitField nameResetRWDescription
31INTCONFIGERROR0x0RWConfiguration error interrupt enable.
0: the interrupt associated to Interrupt1Reg.ConfigError is disabled 1: the interrupt associated to Interrupt1Reg. ConfigError is enabled.

Table 204. GlobalStatMach.WORD6 register description

BitField nameResetRWDescription
31:0RESERVED31_00x0RWIgnored on write - read as zero

23.7.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 locations are frozen by the hardware as they follow the GlobalStatMach. The formula for a StatMach base address is:

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

Table 205. StatMach

Address offsetNameRWResetDescription
0x00WORD0RW0x00000000Word0 register
0x04WORD1RW0x00000000Word1 register
0x08WORD2RW0x00000000Word2 register
0x0CWORD3RW0x00000000Word3 register
0x10WORD4RW0x00000000Word4 register
0x14WORD5RW0x00000000Word5 register
0x18WORD6RW0x00000000Word6 register
0x1CWORD7RW0x00000000Word7 register
0x20WORD8RW0x00000000Word8 register
0x24WORD9RW0x00000000Word9 register
0x28WORDARW0x00000000WordA register
0x2CWORDBRW0x00000000WordB register
0x30WORDCRW0x00000000WordC register
0x34WORDDRW0x00000000WordD register
0x38WORDERW0x00000000WordE register
0x3CWORDFRW0x00000000WordF register
0x40WORD10RW0x00000000Word10 register
0x44WORD11RW0x00000000Word11 register
0x48WORD12RW0x00000000Word12 register
Table 206. StatMach.WORD0 register description
BitField nameResetRWDescription
5:0UCHAN0x0RWBTLE 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.
6RESERVED0x0RWReserved.
7TXMODE0x0RWTransfer type selection of the current sequence.
This bit is re-written by the sequencer with StatMach.NextTxMode bit value during each RAM write back phase.
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.
13:8REMAP_CHAN0x0RWBTLE Remapped channel index.
This is the remapped channel as described in algorithm1 and algorithm2 in BlueNRG 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.
14SN0x0RWBTLE 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 BlueNRG 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).
15NESN0x0RWBTLE 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 BlueNRG 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)
18:16RESERVED0x0RWReserved.
19RESERVED0x0RWReserved.
20BUFFER_FULL0x0RWNo 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 previous transmitted packet.
BitField nameResetRWDescription
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 packet 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
  • -others: reserved for future use. If programmed by mistake, selects "Transmitter PHY is legacy 1 Mbps" option.
27RESERVED270x0RWIgnored on write -read as zero
30:28RXPHY0x0RW

Reception Phy selection.

bit0: bit rate (0=1 Mbps / 1=2 MBps) / bit1: This bit has no effect./ 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 207. StatMach.WORD1 register description
BitField nameResetRWDescription
31:0TXPOINT0x0RW

Pointer 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 208. StatMach.WORD2 register description
BitField nameResetRWDescription
31:0RCVPOINT0x0RW

Pointer 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 209. StatMach.WORD3 register description
BitField nameResetRWDescription
31:0TXPOINTPREV0x0RW

Pointer 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 210. 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 211. 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 212. 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 master
  • - 40'h0000000000: for Data Channel PDUs sent by the slave.

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

Table 213. StatMach.WORD7 register description
BitField nameResetRWDescription
7:0PCNTTX_39_320x0RWCCM 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'h80000000000: for Data Channel PDUs sent by the master
- 40'h00000000000: for Data Channel PDUs sent by the slave.
Note: It is mandatory to have TxRxPack.SN_EN = 1 when StateMach.Encryption = 1 as PCntTx is incremented by the SN/NESM automatic management mechanism.
31:8PCNTRCV_23_00x0RWCCM 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'h80000000000: for Data Channel PDUs received by the slave
- 40'h00000000000: for Data Channel PDUs received by the master.
Note: It is mandatory to have TxRxPack.SN_EN = 1 as PCntRcv is incremented by the SN/NESM automatic management mechanism.
Table 214. 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'h80000000000: for Data Channel PDUs received by the slave
- 40'h00000000000: for Data Channel PDUs received by the master.
Note: It is mandatory to have TxRxPack.SN_EN = 1 as PCntRcv is incremented by the SN/NESM automatic management mechanism.
19:16PREAMBLEREP0x0RWTransmission Preamble Repetition number.
Defines the number of repetition 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 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.
21DISABLECRC0x0RWCRC Disable.
If set, this bit:
- in reception: disable the check of the CRC
- in transmission: no CRC field is generated nor inserted in the sent packet.
This feature is not Bluetooth standard.
22RESERVED0x0RWReserved.
BitField nameResetRWDescription
23RXMICDBG0x0RW

Receive 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:24INTTXERROR0x0RW

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

Note: StatusReg.TxError[n] bit is not impacted and always provides the TxError[n] unmasked information.

29INTENCERROR0x0RW

Receive encryption error interrupt enable.

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 HW stores the value with the same endianness as the PDU.

When set:

  • the packet is accepted whatever the CRC: so if CRC error, 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 215. StatMach.WORD9 register description

BitField nameResetRWDescription
31:0ACCADDR0x0RW

BlueNRG 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 216. StatMach.WORDA register description
BitField nameResetRWDescription
23:0CRCINIT0x0RWCRC 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:24MAXRECEIVEDLENGTH0x0RWMaximum 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).
The received packet is processed normally when the received length located in the received packet header is smaller or equal to StateMach.MaxReceivedLength.
Table 217. StatMach.WORDB register description
BitField nameResetRWDescription
4:0PAPOWER0x0RW32 power levels are available (from 0 to 0x1F). It defines the transmission output power level expressed in dBm as described in Section 23.7.2.1: 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 BlueNRG 5.0 core specification.
15:14RESERVED15_140x0RWIgnored on write - read as zero
31:16USEDCHANNELFLAGS_15_00x0RWRemapping flags[15:0] for all 37 BTLE 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 5.0.
Table 218. StatMach.WORDC register description
BitField nameResetRWDescription
21:0USEDCHANNELFLAGS_36_160x0RWRemapping flags[36:16] for all 37 BTLE 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 5.0.
31:22RESERVED31_220x0RWIgnored on write - read as zero
Table 219. StatMach.WORDD register description
BitField nameResetRWDescription
15:0CONNEVENTCOUNTER0x0RWConnection event counter value.
Contains a copy of the connection event counter value, used by the channel incrementer to compute the algorithm #2.
This bit field has to be managed by the SW.
31:16PAEVENTCOUNTER0x0RWAdvertising event counter value.
Contains a copy of the Advertising event counter value, used by the channel incrementer to compute the algorithm #2.
This bit field has to be managed by the SW.
Table 220. 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 BTLE core spec 5.0.
Table 221. 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 BTLE core spec 5.0.
Table 222. 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 BTLE core spec 5.0.
Table 223. 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 BTLE core spec 5.0.
Table 224. 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 BTLE core spec 5.0.
Table 225. 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 BTLE core spec 5.0.

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

Table 226. 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.

23.7.3 TxRxPack RAM table

The firmware has to guarantee that the transmission/reception link list is never empty or at least it must point to itself.

Table 227. TxRxPack

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

Table 228. 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 229. TxRxPack.WORD1 register description
BitField nameResetRWDescription
0CALREQ0x0RWCalibration request.
0: the radio frequency and KVCO2 calibration 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 calibration of the radio frequency, KVCO2, the complex pass band filter and the PLL is enabled. It must be performed at each channel frequency change or after the wakeup.
1CHANALGO2SEL0x0RWChannel 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.
2KEEPSEMAREQ0x0RWRequest to keep the radio token active at the end of the current transfer..
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 60 µs more (VBG_BOOST and ENA_CUR states) to go back to ACTIVE2 state on next Bluetooth LE trig event.
3RESERVED0x0RWReserved. It must be kept at 0.
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 Bluetooth LE 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 are not ready. The transmission is not started by the sequencer. 1: The RAM table information related to the on-going transfer are ready. The transmission is started by the sequencer.
Note: The goal of this bit is to allow the software blocking a transfer if RAM table update is not over.
BitField nameResetRWDescription
10TXDATAREADY0x0RW

Transmission 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 the 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.

11RESERVED0x0RWReserved. It must be kept at 0.
12DISABLEWHITENING0x0RW

Whitening Disable

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.

31:13RESERVED31_130x0RWReserved.
Table 230. TxRxPack.WORD2 register description
BitField nameResetRWDescription
31:0DATAPTR0x0RW

Data 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 231. TxRxPack.WORD3 register description
BitField nameResetRWDescription
19:0TIMER20x0RW

Timer2 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 at the end of the on-going sequence.

20TIMER2EN0x0RW

Timer2 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
22TRIGRCV0x0RW

Time 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 CurrentTimeReg.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.TimeCaptureTrig is set to 1. An interrupt is raised if enabled (associated to Interrupt1Reg. TimeCaptureTrig 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 Bluetooth LE APB register shows this last event trig value at the end.

BitField nameResetRWDescription
23TRIGDONE0x0RWTime capture enable on "On air" last transmitted/received bit.

0: no time stamping in CurrentTimeReg.TimerCaptureReg is achieved, no interrupt is generated by TrigDone. 1: The interpolated absolute time is captured in CurrentTimeReg.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.TrigDone is set to 1. An interrupt is raised if enabled (associated to Interrupt1Reg.TrigDone set to 1).

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 interrupt 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 interrupt Interrupt1Reg.Done is Disabled 1: The interrupt 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 interrupt Interrupt1Reg.RcvNoMd is enabled
28INTRCVCMD0x0RW"Received packet is a command" interrupt enable

0: the interrupt Interrupt1Reg.RcvCmd is Disabled 1: The interrupt 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.
30INTRCVRCERR0x0RWReceive 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

Table 232. TxRxPack.WORD4 register description

BitField nameResetRWDescription
31:0RESERVED0x0RWReserved.

A similar 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).

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

23.8 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:

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

23.8.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:

23.8.2 Interpolated time

The interpolated time is located in the 1.2 V switchable power domain and is clocked at 16 x slow clock frequency (generated from the system clock). This interpolated time is a 32-bit timer built with:

The interpolated time is provided to the Bluetooth LE controller 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.

23.8.3 Sleep request and wakeup management

The wakeup block offers the interface to issue the sleep request to the power controller from Bluetooth LE controller and it raises wakeup requests for the SoC and the Bluetooth LE controller.

The sleep request, coming from Bluetooth LE controller, can be performed through a wakeup block register.

If the wakeup is enabled, two separate IRQs are asserted in order to:

On wakeup, due to a sequencer activity, the wakeup block:

In this case, no IRQ is asserted for signaling the SoC wakeup event.

The principle is to wake up the SoC before waking up the Bluetooth LE to allow time to power and clock to settle. This is possible by programming two pieces of information in the wakeup block:

Both SoC and Bluetooth LE wakeup events generated by the wakeup block are only based on the 32 kHz. Then the wakeup block raises:

Figure 188. Wakeup event Timing diagram showing wakeup events. A horizontal timeline has two vertical markers. The first marker is labeled 'SoC wakeup event (No IRQ triggered)'. The second marker is labeled 'BLE wakeup event (BLE wakeup IRQ triggered)'. A double-headed arrow between the two markers is labeled 'Wakeup.WAKEUP_OFFSET [7:0]'. Above the second marker, the text 'Wakeup.BLUE_WAKEUP_TIME [31:4]' is shown.
Timing diagram showing wakeup events. A horizontal timeline has two vertical markers. The first marker is labeled 'SoC wakeup event (No IRQ triggered)'. The second marker is labeled 'BLE wakeup event (BLE wakeup IRQ triggered)'. A double-headed arrow between the two markers is labeled 'Wakeup.WAKEUP_OFFSET [7:0]'. Above the second marker, the text 'Wakeup.BLUE_WAKEUP_TIME [31:4]' is shown.

A similar 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).

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

23.8.4 Wakeup block registers

Table 233. 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
0x1CMAXIMUM_PERIOD_LENGTHR0x00000000Maximum period length register
0x20STATISTICS_RESTARTRW0x00000000Statistics restart register
0x24BLUE_WAKEUP_TIMERW0x00000000Bluetooth LE wakeup time register
0x28BLUE_SLEEP_REQUEST_MODERW0x00000007Bluetooth LE sleep request mode register
0x2CCM0_WAKEUP_TIMERW0x00000000CPU wakeup time register
0x30CM0_SLEEP_REQUEST_MODERW0x80000007CPU sleep request mode register
0x40WAKEUP_BLE_IRQ_ENABLERW0x00000000Wakeup Bluetooth LE interrupt enable register
0x44WAKEUP_BLE_IRQ_STATUSRW0x00000000Wakeup Bluetooth LE interrupt status register
0x48WAKEUP_CM0_IRQ_ENABLERW0x00000000Wakeup CPU interrupt enable register
0x4CWAKEUP_CM0_IRQ_STATUSRW0x00000000Wakeup CPU interrupt status register
Table 234. WAKEUP_OFFSET register description
BitField nameResetRWDescription
7:0WAKEUP_OFFSET0x0RWTime to let the power and clock to settle up.
This value is in slow clock period time units (typically 32 kHz).
31:8RESERVED_31_80x0RWReserved
Table 235. 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 236. MINIMUM_PERIOD_LENGTH register description
BitField nameResetRWDescription
3:0RESERVED3_00x0RReserved
13:4LENGTH0x0RMinimum period length computed by time interpolator
31:14RESERVED31_140x0RReserved
Table 237. 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
31:24AVERAGE_COUNT0x0RNumber of slow clock cycles.
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 238. MAXIMUM_PERIOD_LENGTH register description
BitField nameResetRWDescription
3:0RESERVED3_00x0RReserved
13:4LENGTH0x0RMaximum period length computed by Time Interpolator.
31:14RESERVED31_140x0RReserved
Table 239. STATISTIC_RESTART register description
BitField nameResetRWDescription
0CLR_MIN_MAX0x0RWWrite '1' to clear the minimum and maximum registers.
Note: This bit is auto cleared by the HW.
1CLR_AVR0x0RWWrite '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 HW.
31:2RESERVED31_20x0RReserved
Table 240. BLUE_WAKEUP_TIME register description
BitField nameResetRWDescription
31:0WAKEUP_TIME0x0RWProgrammed wakeup time for the Bluetooth® LE.
Unit is in (16 x slow clock) period so typically 512 kHz when slow clock is 32 kHz.
Table 241. BLUE_SLEEP_REQUEST_MODE register description
BitField nameResetRWDescription
2:0RESERVED2_00x7RWReserved
28:3RESERVED28_30x0RReserved
29SLEEP_EN0x0RW
  • - 0: disable Bluetooth LE IP sleeping mode = no low power mode request when the Bluetooth LE controller indicates it is no longer busy.
  • - 1: enable Bluetooth LE IP sleeping mode = low power mode request when the Bluetooth LE controller 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 Bluetooth LE IP wakeup
  • - 1: enable the Bluetooth LE IP wakeup request through the embedded wakeup timer.
This bit is auto-cleared by hardware when a wakeup event occurs (Bluetooth LE wakeup time matches with current time).
31FORCE_SLEEPING0x0RW
  • - 0: the Bluetooth LE sleeping is managed internally by both Bluetooth LE IP/wakeup block
  • - 1: the Bluetooth LE IP is always considered as sleeping by the wakeup block.
Table 242. 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 243. CM0_SLEEP_REQUEST_MODE register description
BitField nameResetRWDescription
2:0RESERVED2_00x7RWReserved
29:3RESERVED29_30x0RReserved
BitField nameResetRWDescription
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 when the ABSOLUTE_TIME[31:4] is equal to the value written in CM0_WAKEUP_TIME[31:4].:

  • - an always-on embedded counter able to wake up the CPU at a programmed time.
31FORCE_SLEEPING0x1RW
  • - 0: the CPU sleeping is managed internally by both the CPU / wakeup block.
  • - 1: the CPU is always considered as sleeping by the wakeup block.

Table 244. WAKEUP_BLE_IRQ_ENABLE register description

BitField nameResetRWDescription
0WAKEUP_IT0x0RW
  • - 0: disable the Bluetooth LE wakeup interrupt towards CPU.
  • - 1: enable Bluetooth LE wakeup interrupt towards the CPU.
31:1RESERVED31_00x0RReserved

Table 245. WAKEUP_BLE_IRQ_STATUS register description

BitField nameResetRWDescription
0WAKEUP_IT0x0RW

Write '1' to clear the interrupt.

When read, returns the interrupt status.

31:1RESERVED31_00x0RReserved

Table 246. 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 247. WAKEUP_CM0_IRQ_STATUS register description

BitField nameResetRWDescription
0WAKEUP_IT0x0RW

Write '1' to clear the interrupt.

When read, returns the interrupt status.

31:1RESERVED31_00x0RReserved