NimBLE is a complete Bluetooth Low Energy 4.2 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.
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.
NimBLE gives you tremendous flexibility to meet your application and device requirements. It has been shown to work with much higher limits when compared to other implementations such as Nordic's SoftDevice or Intel's Zephyr:
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.|
|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.|