NimBLE - Mynewt's Bluetooth 5 compliant stack

NimBLE is a complete Bluetooth Low Energy 5 stack featuring source code for both host and controller subsystems. You can choose to run NimBLE as

The standardized Host Controller Interface (HCI) allows you to mix and match Mynewt’s host or controller portion with another vendor’s controller or host implementation respectively, to suit your product hardware and application. As an example, you may run the NimBLE controller with BlueZ, the Linux Bluetooth host protocol stack. As a reverse example you could choose to run NimBLE's host with a chip vendor's controller that supports HCI over UART transport.

Features

Profile and Service support

Bluetooth Mesh support

Memory sizing

The recommended memory size for running Mynewt OS with NimBLE is 64 kB of RAM and 512 kB of Flash. This allows the application developer to build an image for a product with ample space for application data and logic, security capabilities such as secure bootloader, and operational utilities such as detailed logs and statistics.

While the recommendations are for higher amounts of memory, Mynewt OS with NimBLE can be optimized to operate with 32 kB of RAM and 256 kB of Flash.

Role configuration

NimBLE gives you tremendous flexibility to meet your application and device requirements.

System configuration

NimBLE allows the application developer to configure the system to extract the most suitable performance. Whether it is getting the most number of concurrent connections or getting a high throughput or ensuring low latencies for data bursts to several peripherals, NimBLE offers plenty of options. Of course, any changes to the default configuration has implications on code size, runtime RAM usage etc., a glimpse of which is shown below.

Subsystem Examples of Configuration Options Default(kB) Element Size(kB) Default Size(kB) Size for x # of connections
Host Max. number of config descriptors 1 4 4 (x+1)*3
Max. number of attributes in a single GATT Reliable Write procedure 36 32 1152 Independent
Max. number of concurrent connections 1 80 80 x*80
...and several more. Full system configuration is specified in /net/nimble/host/syscfg.yml with sensible defaults.
Controller Whitelist size 8 8 64 Independent
RNG buffer size 32 1 32 Independent
Max. number of concurrent connections 1 416 416 x*416
...and several more. Full system configuration is specified in /net/nimble/controller/syscfg.yml with sensible defaults.