AAR — Accelerated address resolver

Accelerated address resolver is a cryptographic support function for implementing the Resolvable Private Address Resolution Procedure described in the Bluetooth Core specification v4.0. Resolvable Private Address generation should be achieved using ECB and is not supported by AAR.

The procedure allows two devices that share a secret key to generate and resolve a hash based on their device address. The AAR block enables real-time address resolution on incoming packets when configured as described in this chapter. This allows real-time packet filtering (whitelisting) using a list of known shared keys (Identity Resolving Keys (IRK) in Bluetooth).

EasyDMA

The AAR implements EasyDMA for reading and writing to the RAM. The EasyDMA will have finished accessing the RAM when the END, RESOLVED, and NOTRESOLVED events are generated.

If the IRKPTR, ADDRPTR, and the SCRATCHPTR is not pointing to the Data RAM region, an EasyDMA transfer may result in a HardFault or RAM corruption. See Memory for more information about the different memory regions.

Resolving a resolvable address

As per Bluetooth specification, a private resolvable address is composed of six bytes.

Figure 1. Resolvable address
A private resolvable address composed of 6 bytes.

To resolve an address the register ADDRPTR must point to the start of the packet. The resolver is started by triggering the START task. A RESOLVED event is generated when the AAR manages to resolve the address using one of the Identity Resolving Keys (IRK) found in the IRK data structure. The AAR will use the IRK specified in the register IRK0 to IRK15 starting from IRK0. The register NIRK specifies how many IRKs should be used. The AAR module will generate a NOTRESOLVED event if it is not able to resolve the address using the specified list of IRKs.

The AAR will go through the list of available IRKs in the IRK data structure and for each IRK try to resolve the address according to the Resolvable Private Address Resolution Procedure described in the Bluetooth Core specification v4.0 [Vol 3] chapter 10.8.2.3. The time it takes to resolve an address varies due to the location in the list of the resolvable address. The resolution time will also be affected by RAM accesses performed by other peripherals and the CPU. See the Electrical specifications for more information about resolution time.

The AAR only compares the received address to those programmed in the module without checking the address type.

The AAR will stop as soon as it has managed to resolve the address, or after trying to resolve the address using NIRK number of IRKs from the IRK data structure. The AAR will generate an END event after it has stopped.

Figure 2. Address resolution with packet preloaded into RAM
AAR address resolution

Use case example for chaining RADIO packet reception with address resolution using AAR

The AAR may be started as soon as the 6 bytes required by the AAR have been received by the RADIO and stored in RAM. The ADDRPTR pointer must point to the start of packet.

Figure 3. Address resolution with packet loaded into RAM by the RADIO
Address resolution with packet loaded into RAM by the RADIO

IRK data structure

The IRK data structure is located in RAM at the memory location specified by the IRKPTR register.

Table 1. IRK data structure overview
PropertyAddress offsetDescription
IRK00IRK number 0 (16 - byte)
IRK116IRK number 1 (16 - byte)
......
IRK15240IRK number 15 (16 - byte)

Registers

Table 2. Instances
Base addressPeripheralInstanceDescriptionConfiguration
0x4000F000AARAAR

Accelerated address resolver

  
Table 3. Register overview
RegisterOffsetDescription
TASKS_START0x000

Start resolving addresses based on IRKs specified in the IRK data structure

 
TASKS_STOP0x008

Stop resolving addresses

 
EVENTS_END0x100

Address resolution procedure complete

 
EVENTS_RESOLVED0x104

Address resolved

 
EVENTS_NOTRESOLVED0x108

Address not resolved

 
INTENSET0x304

Enable interrupt

 
INTENCLR0x308

Disable interrupt

 
STATUS0x400

Resolution status

 
ENABLE0x500

Enable AAR

 
NIRK0x504

Number of IRKs

 
IRKPTR0x508

Pointer to IRK data structure

 
ADDRPTR0x510

Pointer to the resolvable address

 
SCRATCHPTR0x514

Pointer to data area used for temporary storage

 

TASKS_START

Address offset: 0x000

Start resolving addresses based on IRKs specified in the IRK data structure

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
AW

TASKS_START

  

Start resolving addresses based on IRKs specified in the IRK data structure

   

Trigger

1

Trigger task

TASKS_STOP

Address offset: 0x008

Stop resolving addresses

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
AW

TASKS_STOP

  

Stop resolving addresses

   

Trigger

1

Trigger task

EVENTS_END

Address offset: 0x100

Address resolution procedure complete

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

EVENTS_END

  

Address resolution procedure complete

   

NotGenerated

0

Event not generated

   

Generated

1

Event generated

EVENTS_RESOLVED

Address offset: 0x104

Address resolved

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

EVENTS_RESOLVED

  

Address resolved

   

NotGenerated

0

Event not generated

   

Generated

1

Event generated

EVENTS_NOTRESOLVED

Address offset: 0x108

Address not resolved

Bit number313029282726252423222120191817161514131211109876543210
ID                               A
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

EVENTS_NOTRESOLVED

  

Address not resolved

   

NotGenerated

0

Event not generated

   

Generated

1

Event generated

INTENSET

Address offset: 0x304

Enable interrupt

Bit number313029282726252423222120191817161514131211109876543210
ID                             CBA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

END

  

Write '1' to enable interrupt for event END

   

Set

1

Enable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

BRW

RESOLVED

  

Write '1' to enable interrupt for event RESOLVED

   

Set

1

Enable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

CRW

NOTRESOLVED

  

Write '1' to enable interrupt for event NOTRESOLVED

   

Set

1

Enable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

INTENCLR

Address offset: 0x308

Disable interrupt

Bit number313029282726252423222120191817161514131211109876543210
ID                             CBA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

END

  

Write '1' to disable interrupt for event END

   

Clear

1

Disable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

BRW

RESOLVED

  

Write '1' to disable interrupt for event RESOLVED

   

Clear

1

Disable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

CRW

NOTRESOLVED

  

Write '1' to disable interrupt for event NOTRESOLVED

   

Clear

1

Disable

   

Disabled

0

Read: Disabled

   

Enabled

1

Read: Enabled

STATUS

Address offset: 0x400

Resolution status

Bit number313029282726252423222120191817161514131211109876543210
ID                            AAAA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
AR

STATUS

 

[0..15]

The IRK that was used last time an address was resolved

ENABLE

Address offset: 0x500

Enable AAR

Bit number313029282726252423222120191817161514131211109876543210
ID                              AA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

ENABLE

  

Enable or disable AAR

   

Disabled

0

Disable

   

Enabled

3

Enable

NIRK

Address offset: 0x504

Number of IRKs

Bit number313029282726252423222120191817161514131211109876543210
ID                           AAAAA
Reset 0x0000000100000000000000000000000000000001
IDAccessFieldValue IDValueDescription
ARW

NIRK

 

[1..16]

Number of Identity root keys available in the IRK data structure

IRKPTR

Address offset: 0x508

Pointer to IRK data structure

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

IRKPTR

  

Pointer to the IRK data structure

ADDRPTR

Address offset: 0x510

Pointer to the resolvable address

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

ADDRPTR

  

Pointer to the resolvable address (6-bytes)

SCRATCHPTR

Address offset: 0x514

Pointer to data area used for temporary storage

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDAccessFieldValue IDValueDescription
ARW

SCRATCHPTR

  

Pointer to a scratch data area used for temporary storage during resolution. A space of minimum 3 bytes must be reserved.

Electrical specification

AAR Electrical Specification

SymbolDescriptionMin.Typ.Max.Units
tAAR

Address resolution time per IRK. Total time for several IRKs is given as (1 µs + n * t_AAR), where n is the number of IRKs. (Given priority to the actual destination RAM block).

......µs
tAAR,8

Time for address resolution of 8 IRKs. (Given priority to the actual destination RAM block).

48µs