STM32WB-WBA Enhanced ATT (EATT)

Revision as of 18:39, 18 March 2024 by Registered User (→‎Advertising data)

1. Enhanced ATT (EATT) feature

Enhanced ATT is a Bluetooth® Low Energy 5.2 standard feature: it is implemented for STM32WB and STM32WBA.
Whereas the original Unenhanced Attribute protocol operates in a sequential manner, the Enhanced Attribute Protocol provides a way to perform concurrent/parallel transactions between a Bluetooth® Low Energy client and a server and potentially reduce the latency of operations in some applications.

For example, this is useful on a smartphone where multiple applications may be interfacing with a Bluetooth® Low Energy device.
By using EATT, an application’s Attribute transaction would not be blocked while another application’s ATT transaction is in progress, essentially allowing different applications to interact with a Bluetooth® Low Energy device in parallel and potentially reducing latency.

1.1. Enhanced Attribute Protocol (EATT) new capabilities

• EATT modifies the sequential transaction model, making concurrent ATT transactions possible when conducted over distinct Enhanced ATT bearers.
• EATT uses the L2CAP Enhanced Connection-Oriented Channels mode. This L2CAP mode provides flow control so that EATT can be regarded as reliable.
• MTU values at the ATT layer and L2CAP layer have been made independently configurable, and this may reduce latency experienced by some applications that share the BLE stack with other applications.

Bluetooth® Enhanced Attribute Protocol
connectivity EATT GATT L2CAP.png


1.2. Changes introduced in Bluetooth® Low Energy stack by the introduction of EATT

If EATT is enabled, at GATT initialization, two new characteristics are added to the GATT service:

A new characteristic called Server Supported Features has been defined and must be included in the Generic Attribute Profile service if EATT is supported by the server.
Bit 0 of the first octet of the value of this characteristic set to 1 means that EATT is supported.
A GATT client can determine whether or not the server supports EATT by reading this characteristic.

Server Supported Features (for "EATT Supported")

The Client Supported Features characteristic has been defined.
Bits of the characteristic’s value indicate support for certain features. Bit 1 indicates whether or not the Enhanced ATT Bearer is supported by the client. Bit 2 indicates whether or not a new ATT PDU called Multiple Handle Value Notifications is supported.
The client must write an appropriate value to this characteristic to inform the server of the features it supports.

Client Supported Features (for "Enhanced ATT bearer" and "Multiple Handle Value Notifications)


New GATT information is stored in NVM:

Client Supported Features (for "Enhanced ATT bearer" and "Multiple Handle Value Notifications)

1.3. GATT commands and events supporting the enhancement

Refer to Bluetooth®Programming Manual PM0271 [1].

In same principle as GATT commands, the GATT events referring to a specific EATT bearer return the value 0xEA00 | channel_index for the Connection_Handle parameter.

1.4. Flag configuration on STM32WB and STM32WBA

To enable EATT feature on STM32WB/STM32WBA:

Feature available only in "full extended" for STM32WB.
Enable EATT feature on WB CMX interface.

connectivity EATT MX interface.png


Feature available in "Full ble stack" for STM32WBA.
Enable EATT feature on WBA CMX interface.

connectivity GATT EATT WBA CMX.png


1.5. how to implement on STM32WB and STM32WBA applications

1. Set the flag and build the application.

2. Set the variable CFG_BLE_NUM_LINK. The number of EATT bearers is equal to CFG_BLE_NUM_LINK + 4
The Channel_Number parameter in aci_l2cap_coc_connect command corresponds to the number of "bearers" we want to establish.

3. Pairing and bonding of Bluetooth® Low Energy link.

4. Establish a Connection Oriented Channel (COC) over the Bluetooth® Low Energy link with SPSM = 0x0027.

5. Channel_Number x ACI_GATT_EATT_BEARER_EVENT are received on central and peripheral sides.

On central side, Channel_Index (in ACI_GATT_EATT_BEARER_EVENT) is included between 0x00 and 0x1F.

On peripheral side, Channel_Index (in ACI_GATT_EATT_BEARER_EVENT) is included between 0x20 and 0x3F.

To address separately each bearer:
The connection handle to apply is between 0xEA00 and 0xEA1F for the central.

The connection handle to apply is between 0xEA20 and 0xEA3F for the peripheral.

2. Example of EATT feature including 5 bearers and data exchange

2.1. Advertising data

At startup, EATT Server application starts Advertising.
Data advertised are composed as follows:

EATT Server Advertising packet
Description Length AD Type Value
Device Name 8 0x09 EATT_XX (XX: last byte of BD address)
Manufacturer Data 15 0xFF See table below
Flags 2 0x01 0x06
(GeneralDiscoverable, BrEdrNotSupported)



Manufacturer data are encoded following STMicroelectronics BlueST SDK v2 as described below:

STMicroelectronics Manufacturer Advertising data
Byte Index 0 1 2-3 4 5 6 7 8 9 10-15
Function Length Manufacturer ID Company BlueST SDK Version Device ID Firmware ID Option 1 Option 2 Option 3 Device Address
Value 0x0F 0xFF 0x0030 STMicro 0x02 0x8B Nucleo-WBA 0xE1 - EATT Server 0x00 0x00 0x00 0x08E12Axxxx


2.2. On-board buttons configuration

Button configuration for Bluetooth® Low Energy Gatt caching application on Nucleo-WBA55CG boards
Application Condition B1 Click B1 Long Press B2 Click B2 Long Press B3 Click B3 Long Press
Gatt caching Server Idle

Connected

Add char3 characteristic

Add char3 characteristic

/ Delete char3 characteristic

Delete char3 characteristic

/ -

-

/
Gatt caching Client Idle

Connected

Starts scan then connects, discovers service/characteristics

-

/ -

Sends disconnection request

/ -

Read char3 data

/
BLE and COC link establishment with EATT (SPSM=0x0027)


EATT bearers events


GATT data exchange


3. References