README.md (4a4e2291e13040f1c0286e1d31d85c46fa2065ab) README.md (59200c1c2d69b4e80af53a1d63492d824ff9fb12)
1#
2
3In this chapter, we first explain how Bluetooth chipsets are connected physically and then provide information about popular Bluetooth chipset and their use with BTstack.
4
5## HCI Interface
6
7The communication between a Host (a computer or an MCU) and a Host Controller (the actual Bluetooth chipset) follows the Host Controller Interface (HCI), see {@fig:HostChipsetConnection}. HCI defines how commands, events, asynchronous and synchronous data packets are exchanged. Asynchronous packets (ACL) are used for data transfer, while synchronous packets (SCO) are used for Voice with the Headset and the Hands-Free Profiles.
8

--- 39 unchanged lines hidden (view full) ---

48From our experience, only Texas Instruments and EM Microelectronics provide all relevant information directly on their website. Nordic Semiconductor does not officially have Bluetooth chipsets with HCI interface, but their the documentation on their nRF5 series is complete and very informative. TI and Nordic also provide excellent support via their respective web forum.
49
50Broadcom, whose Bluetooth + Wifi division has been acquired by the Cypress Semiconductor Corporation, provides developer documentation only to large customers as far as we know. It's possible to join their Community forum and download the WICED SDK. The WICED SDK is targeted at Wifi + Bluetooth Combo chipsets and contains the necessary chipset patch files.
51
52CSR, which has been acquired by Qualcomm, provides all relevant information on their Support website after signing an NDA.
53
54## Chipset Overview
55
1#
2
3In this chapter, we first explain how Bluetooth chipsets are connected physically and then provide information about popular Bluetooth chipset and their use with BTstack.
4
5## HCI Interface
6
7The communication between a Host (a computer or an MCU) and a Host Controller (the actual Bluetooth chipset) follows the Host Controller Interface (HCI), see {@fig:HostChipsetConnection}. HCI defines how commands, events, asynchronous and synchronous data packets are exchanged. Asynchronous packets (ACL) are used for data transfer, while synchronous packets (SCO) are used for Voice with the Headset and the Hands-Free Profiles.
8

--- 39 unchanged lines hidden (view full) ---

48From our experience, only Texas Instruments and EM Microelectronics provide all relevant information directly on their website. Nordic Semiconductor does not officially have Bluetooth chipsets with HCI interface, but their the documentation on their nRF5 series is complete and very informative. TI and Nordic also provide excellent support via their respective web forum.
49
50Broadcom, whose Bluetooth + Wifi division has been acquired by the Cypress Semiconductor Corporation, provides developer documentation only to large customers as far as we know. It's possible to join their Community forum and download the WICED SDK. The WICED SDK is targeted at Wifi + Bluetooth Combo chipsets and contains the necessary chipset patch files.
51
52CSR, which has been acquired by Qualcomm, provides all relevant information on their Support website after signing an NDA.
53
54## Chipset Overview
55
56Chipset | Type | HCI Transport | BD_ADDR (1) | SCO over HCI (2) | LE DLE | Multiple LE Roles (3)| Classic SC (4) | LE Addr Resolution | BTstack folder | Comment
57-------------------- |-----------| ---------------|--------------|------------------|--------|----------------------|----------------|--------------------|----------------|---------
58Atmel ATWILC3000 | LE | H4 | Yes | n.a | No | No | n.a. | Don't know | atwilc3000 | BLE Firmware size: 60 kB
59Broadcom UART | Dual mode | H4, H5 | Rarely | Partially (2) | No | Maybe (3) | 43438: Yes | | bcm | Max UART baudrate 2 mbps
60Broadcom USB Dongles | Dual mode | USB | Yes | Yes | No | No | BCM20702: No | | bcm |
61CSR UART | Dual mode | H4, H5, BCSP | Rarely | Partially (2) | No | No | CSR8811: No | | csr |
62CSR USB Dongles | Dual mode | USB | Mostly | Yes | No | No | CSR8510: No | | csr |
63Cypress CYW20704/7 | Dual mode | H4, H5, USB | Don't know | Partially (2) | Yes | Yes | Yes | Yes | bcm |
64Cypress CYW20819 | Dual mode | H4, H5, USB | Don't know | Partially (2) | Yes | Yes | Yes | Don't know | bcm | Keep CTS high during power cycle
65Cypress CYW43xxx | Dual mode + Wifi | H4, H5 | Don't know | Partially (2) | Don't know | No | Don't know | Don't know | bcm | Bluetooth + Wifi Combo Controller
66Cypress PSoC 4 | LE | H4 | Don't know | n.a. | Yes | Don't know | n.a. | Don't know | | HCI Firmware part of PSoC Creator kits examples
67Dialog DA14531 | LE | H4 | No | n.a. | Yes | Yes | n.a. | Don't know | da145xx | Official HCI firmware included in BTstack
68Dialog DA14581 | LE | H4, SPI | No | n.a. | No | No | n.a. | Don't know | da145xx | Official HCI firmware included in BTstack
69Dialog DA14585 | LE | H4, SPI | No | n.a. | Yes | Yes | n.a. | Yes | da145xx | Official HCI firmware included in BTstack
70Dialog DA1469x | LE | H4, SPI | No | n.a. | Yes | Yes | n.a. | Yes | da145xx | HCI Firmware part of DA1469x SDK
71Espressif ESP32 | Dual mode + Wifi | VHCI | Yes | Yes | Yes | Yes | Yes | Don't know | | SoC with Bluetooth and Wifi
72EM 9301 | LE | SPI, H4 | No | n.a. | No | No | n.a. | Don't know | em9301 | Custom HCI SPI implementation
73EM 9304 | LE | SPI, H4 | Yes | n.a. | Yes | Yes | n.a. | Don't know | em9301 | Custom HCI SPI implementation
74Intel Dual Wireless 3165, 8260, 8265 | Dual mode | USB | Yes | Probably | Don't know | Don't know | Don't know | Don't know | intel | Firmware size: 400 kB
75Nordic nRF | LE | H4 | Fixed Random | n.a. | Yes | Yes | n.a. | Yes | | Requires HCI firmware
76STM STLC2500D | Classic | H4 | No | Don't know | n.a | n.a. | No | n.a. | stlc2500d | Custom deep sleep management not supported
77Renesas RX23W | LE | H4 | No | n.a. | Yes | Yes | n.a . | Don't know | | HCI Firmware part of BTTS
78Realtek RTL8822CS | Dual mode + Wifi | H5 | Yes | Yes | Don't know | Don't know | Don't know | Don't know | | Requires initial firmware + config
79Realtek USB Dongles | Dual mode + Wifi | USB | Yes | Yes | Don't know | Don't know | Don't know | Don't know | realtek | Requires initial firmware + config
80Toshiba TC35661 | Dual mode | H4 | No | No | No | No | No | No | tc3566 | Only -007/009 models provide full HCI. See below
81TI CC256x, WL183x | Dual mode | H4, H5, eHCILL | Yes | Yes | No | Yes for CC256XC | No | No | cc256x | Also WL185x, WL187x, and WL189x
56| Chipset | Type | HCI Transport | BD_ADDR (1) | SCO over HCI (2) | LE DLE | Multiple LE Roles (3) | Classic SC (4) | LE Addr Resolution | BTstack folder | Comment |
57|--------------------------------------|------------------|----------------|--------------|------------------|------------|-----------------------|----------------|--------------------|----------------|--------------------------------------------------|
58| Atmel ATWILC3000 | LE | H4 | Yes | n.a | No | No | n.a. | Don't know | atwilc3000 | BLE Firmware size: 60 kB |
59| Broadcom UART | Dual mode | H4, H5 | Rarely | Partially (2) | No | Maybe (3) | 43438: Yes | | bcm | Max UART baudrate 2 mbps |
60| Broadcom USB Dongles | Dual mode | USB | Yes | Yes | No | No | BCM20702: No | | bcm | |
61| CSR UART | Dual mode | H4, H5, BCSP | Rarely | Partially (2) | No | No | CSR8811: No | | csr | |
62| CSR USB Dongles | Dual mode | USB | Mostly | Yes | No | No | CSR8510: No | | csr | |
63| Cypress CYW20704/7 | Dual mode | H4, H5, USB | Don't know | Partially (2) | Yes | Yes | Yes | Yes | bcm | |
64| Cypress CYW20819 | Dual mode | H4, H5, USB | Don't know | Partially (2) | Yes | Yes | Yes | Don't know | bcm | Keep CTS high during power cycle |
65| Cypress CYW43xxx | Dual mode + Wifi | H4, H5 | Don't know | Partially (2) | Don't know | No | Don't know | Don't know | bcm | Bluetooth + Wifi Combo Controller |
66| Cypress PSoC 4 | LE | H4 | Don't know | n.a. | Yes | Don't know | n.a. | Don't know | | HCI Firmware part of PSoC Creator kits examples |
67| Dialog DA14531 | LE | H4 | No | n.a. | Yes | Yes | n.a. | Don't know | da145xx | Official HCI firmware included in BTstack |
68| Dialog DA14581 | LE | H4, SPI | No | n.a. | No | No | n.a. | Don't know | da145xx | Official HCI firmware included in BTstack |
69| Dialog DA14585 | LE | H4, SPI | No | n.a. | Yes | Yes | n.a. | Yes | da145xx | Official HCI firmware included in BTstack |
70| Dialog DA1469x | LE | H4, SPI | No | n.a. | Yes | Yes | n.a. | Yes | da145xx | HCI Firmware part of DA1469x SDK |
71| Espressif ESP32 | Dual mode + Wifi | VHCI | Yes | Yes | Yes | Yes | Yes | Don't know | | SoC with Bluetooth and Wifi |
72| Espressif ESP32-S3,C3 | LE + Wifi | VHCI | Yes | No | Yes | Yes | Yes | Yes | | SoC with Bluetooth and Wifi |
73| EM 9301 | LE | SPI, H4 | No | n.a. | No | No | n.a. | Don't know | em9301 | Custom HCI SPI implementation |
74| EM 9304 | LE | SPI, H4 | Yes | n.a. | Yes | Yes | n.a. | Don't know | em9301 | Custom HCI SPI implementation |
75| Intel Dual Wireless 3165, 8260, 8265 | Dual mode | USB | Yes | Probably | Don't know | Don't know | Don't know | Don't know | intel | Firmware size: 400 kB |
76| Nordic nRF | LE | H4 | Fixed Random | n.a. | Yes | Yes | n.a. | Yes | | Requires HCI firmware |
77| STM STLC2500D | Classic | H4 | No | Don't know | n.a | n.a. | No | n.a. | stlc2500d | Custom deep sleep management not supported |
78| Renesas RX23W | LE | H4 | No | n.a. | Yes | Yes | n.a . | Don't know | | HCI Firmware part of BTTS |
79| Realtek RTL8822CS | Dual mode + Wifi | H5 | Yes | Yes | Don't know | Don't know | Don't know | Don't know | | Requires initial firmware + config |
80| Realtek USB Dongles | Dual mode + Wifi | USB | Yes | Yes | Don't know | Don't know | Don't know | Don't know | realtek | Requires initial firmware + config |
81| Toshiba TC35661 | Dual mode | H4 | No | No | No | No | No | No | tc3566 | Only -007/009 models provide full HCI. See below |
82| TI CC256x, WL183x | Dual mode | H4, H5, eHCILL | Yes | Yes | No | Yes for CC256XC | No | No | cc256x | Also WL185x, WL187x, and WL189x |
82
83**Notes**:
84
85 1. BD_ADDR: Indicates if Bluetooth chipset comes with its own valid MAC Address. Better Broadcom and CSR dongles usually come with a MAC address from the dongle manufacturer, but cheaper ones might come with identical addresses.
86 2. SCO over HCI: All Bluetooth Classic chipsets support SCO over HCI in general. BTstack can receive SCO packets without problems. However, only TI CC256x has support for using SCO buffers in the Controller and a useful flow control. On CSR/Broadcom/Cypress Controllers, BTstack cannot queue multiple SCO packets in the Controller. Instead, the SCO packet must be sent periodically at the right time - without a clear indication about when this time is. The current implementation observes the timestamps of the received SCO packets to schedule sending packets. With full control over the system and no other Bluetooth data, this can be flawless, but it's rather fragile in general. For these, it's necessary to use the I2S/PCM interface for stable operation.
87 , for those that are marked with No, we either didn't try or didn't found enough information to configure it correctly.
88 3. Multiple LE Roles: Apple uses Broadcom Bluetooth+Wifi in their iOS devices and newer iOS versions support multiple concurrent LE roles,
89 so at least some Broadcom models support multiple concurrent LE roles.

--- 84 unchanged lines hidden (view full) ---

174**BTstack integration**: *btstack_chipset_da145xx.c* contains the code to download the provided HCI firmware into the SRAM of the DA145xx. After that, it can be used as any other HCI chipset. No special support needed for DA1469x after compiling and flashing the HCI firmware.
175
176
177## Espressif ESP32
178
179The ESP32 is a SoC with a built-in Dual mode Bluetooth and Wifi radio. The HCI Controller is implemented in software and accessed via a so called Virtual HCI (VHCI) interface.
180It supports both LE Data Length Extensions (DLE) as well as multiple LE roles. Since ESP-IDF v4.3, SCO-over-HCI is usable for HSP/HFP.
181
83
84**Notes**:
85
86 1. BD_ADDR: Indicates if Bluetooth chipset comes with its own valid MAC Address. Better Broadcom and CSR dongles usually come with a MAC address from the dongle manufacturer, but cheaper ones might come with identical addresses.
87 2. SCO over HCI: All Bluetooth Classic chipsets support SCO over HCI in general. BTstack can receive SCO packets without problems. However, only TI CC256x has support for using SCO buffers in the Controller and a useful flow control. On CSR/Broadcom/Cypress Controllers, BTstack cannot queue multiple SCO packets in the Controller. Instead, the SCO packet must be sent periodically at the right time - without a clear indication about when this time is. The current implementation observes the timestamps of the received SCO packets to schedule sending packets. With full control over the system and no other Bluetooth data, this can be flawless, but it's rather fragile in general. For these, it's necessary to use the I2S/PCM interface for stable operation.
88 , for those that are marked with No, we either didn't try or didn't found enough information to configure it correctly.
89 3. Multiple LE Roles: Apple uses Broadcom Bluetooth+Wifi in their iOS devices and newer iOS versions support multiple concurrent LE roles,
90 so at least some Broadcom models support multiple concurrent LE roles.

--- 84 unchanged lines hidden (view full) ---

175**BTstack integration**: *btstack_chipset_da145xx.c* contains the code to download the provided HCI firmware into the SRAM of the DA145xx. After that, it can be used as any other HCI chipset. No special support needed for DA1469x after compiling and flashing the HCI firmware.
176
177
178## Espressif ESP32
179
180The ESP32 is a SoC with a built-in Dual mode Bluetooth and Wifi radio. The HCI Controller is implemented in software and accessed via a so called Virtual HCI (VHCI) interface.
181It supports both LE Data Length Extensions (DLE) as well as multiple LE roles. Since ESP-IDF v4.3, SCO-over-HCI is usable for HSP/HFP.
182
183The newer ESP32-S3 and ESP32-C3 SoCs have a newer LE Controller, but no support for Classic (BR/EDR).
182
184
185ALl can either be used as an SoC with the application running on the ESP32 itself or can be configured as a regular Bluetooth HCI Controller.
186BTstack can work either on the SoC itself, or another MCU when ESP32 is connected via 4-wire UART.
187
188Wifi can be used with Espressif's [ESP-Hosted firmware](https://github.com/espressif/esp-hosted), too.
189
183## EM Microelectronic Marin
184
185For a long time, the EM9301 has been the only Bluetooth Single-Mode LE chipset with an HCI interface. The EM9301 can be connected via SPI or UART. The UART interface does not support hardware flow control and is not recommended for use with BTstack. The SPI mode uses a proprietary but documented extension to implement flow control and signal if the EM9301 has data to send.
186
187In December 2016, EM released the new EM9304 that also features an HCI mode and adds support for optional Bluetooth 4.2. features. It supports the Data Length Extension and up to 8 LE roles. The EM9304 is a larger MCU that allows to run custom code on it. For this, an advanced mechanism to upload configuration and firmware to RAM or into an One-Time-Programmable area of 128 kB is supported. It supports a superset of the vendor specific commands of the EM9301.
188
189EM9304 is used by the 'stm32-l053r8-em9304' port in BTstack. The port.c file also contains an IRQ+DMA-driven implementation of the SPI H4 protocol specified in the [datasheet](http://www.emmicroelectronic.com/sites/default/files/public/products/datasheets/9304-ds_0.pdf).
190

--- 170 unchanged lines hidden ---
190## EM Microelectronic Marin
191
192For a long time, the EM9301 has been the only Bluetooth Single-Mode LE chipset with an HCI interface. The EM9301 can be connected via SPI or UART. The UART interface does not support hardware flow control and is not recommended for use with BTstack. The SPI mode uses a proprietary but documented extension to implement flow control and signal if the EM9301 has data to send.
193
194In December 2016, EM released the new EM9304 that also features an HCI mode and adds support for optional Bluetooth 4.2. features. It supports the Data Length Extension and up to 8 LE roles. The EM9304 is a larger MCU that allows to run custom code on it. For this, an advanced mechanism to upload configuration and firmware to RAM or into an One-Time-Programmable area of 128 kB is supported. It supports a superset of the vendor specific commands of the EM9301.
195
196EM9304 is used by the 'stm32-l053r8-em9304' port in BTstack. The port.c file also contains an IRQ+DMA-driven implementation of the SPI H4 protocol specified in the [datasheet](http://www.emmicroelectronic.com/sites/default/files/public/products/datasheets/9304-ds_0.pdf).
197

--- 170 unchanged lines hidden ---