13b261e46SMilanka Ringwald# 23b261e46SMilanka Ringwald 3c00c65faSMatthias RingwaldIn this chapter, we first explain how Bluetooth chipsets are connected physically and then provide information about popular Bluetooth chipset and their use with BTstack. 435e00af0SMatthias Ringwald 5c00c65faSMatthias Ringwald## HCI Interface 6c00c65faSMatthias Ringwald 7c00c65faSMatthias RingwaldThe 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. 835e00af0SMatthias Ringwald 9503a627eSMilanka Ringwald{#fig:HostChipsetConnection} 1035e00af0SMatthias Ringwald 11c00c65faSMatthias Ringwald### HCI H2 12c00c65faSMatthias RingwaldOn desktop-class computers incl. laptops, USB is mainly used as HCI transport layer. For USB Bluetooth chipsets, there is little variation: most USB dongles on the market currently contain a Broadcom BCM20702 or a CSR 851x chipset. It is also called H2. 13c00c65faSMatthias Ringwald 1435e00af0SMatthias RingwaldOn embedded systems, UART connections are used instead, although USB could be used as well. 1535e00af0SMatthias Ringwald 16c00c65faSMatthias RingwaldFor UART connections, different transport layer variants exist. 1735e00af0SMatthias Ringwald 18c00c65faSMatthias Ringwald### HCI H4 19c00c65faSMatthias RingwaldThe most common one is the official "UART Transport", also called H4. It requires hardware flow control via the CTS/RTS lines and assumes no errors on the UART lines. 20c00c65faSMatthias Ringwald 21c00c65faSMatthias Ringwald### HCI H5 22c00c65faSMatthias RingwaldThe "Three-Wire UART Transport", also called H5, makes use of the SLIP protocol to transmit a packet and can deal with packet loss and bit-errors by retransmission. While it is possible to use H5 really with "three wires" without hardware handshake, we recommend to use a full UART with hardware handshake. If your design lacks the hardware handshake, H5 is your only option. 23c00c65faSMatthias Ringwald 24daa2e90cSMatthias Ringwald### BCSP 25daa2e90cSMatthias RingwaldThe predecessor of H5. The main difference to H5 is that Even Parity is used for BCSP. To use BCSP with BTstack, you use the H5 transport and can call *hci_transport_h5_enable_bcsp_mode* 26daa2e90cSMatthias Ringwald 27c00c65faSMatthias Ringwald### eHCILL 28c00c65faSMatthias RingwaldFinally, Texas Instruments extended H4 to create the "eHCILL transport" layer that allows both sides to enter sleep mode without loosing synchronisation. While it is easier to implement than H5, it it is only supported by TI chipsets and cannot handle packet loss or bit-errors. 29c00c65faSMatthias Ringwald 307c5fbb27SMatthias Ringwald### H4 over SPI 317c5fbb27SMatthias RingwaldChipsets from Dialog Semiconductor and EM Marin allow to send H4 formatted HCI packets via SPI. SPI has the benefit of a simpler implementation for both Host Controller and Host as it does not require an exact clock. The SPI Master, here the Host, provides the SPI Clock and the SPI Slave (Host Controller) only has to read and update it's data lines when the clock line changes. The EM9304 supports an SPI clock of up to 8 Mhz. However, an additional protocol is needed to let the Host know when the Host Controller has HCI packet for it. Often, an additional GPIO is used to signal this. 327c5fbb27SMatthias Ringwald 33c00c65faSMatthias Ringwald### HCI Shortcomings 3435e00af0SMatthias Ringwald 3535e00af0SMatthias RingwaldUnfortunately, the HCI standard misses a few relevant details: 3635e00af0SMatthias Ringwald 37c00c65faSMatthias Ringwald * For UART based connections, the initial baud rate isn't defined but most Bluetooth chipsets use 115200 baud. For better throughput, a higher baud rate is necessary, but there's no standard HCI command to change it. Instead, each vendor had to come up with their own set of vendor-specific commands. Sometimes, additional steps, e.g. doing a warm reset, are necessary to activate the baud rate change as well. 3835e00af0SMatthias Ringwald 3935e00af0SMatthias Ringwald * Some Bluetooth chipsets don't have a unique MAC address. On start, the MAC address needs to be set, but there's no standard HCI command to set it. 4035e00af0SMatthias Ringwald 4135e00af0SMatthias Ringwald * SCO data for Voice can either be transmitted via the HCI interface or via an explicit PCM/I2S interface on the chipset. Most chipsets default to the PCM/I2S interface. To use it via USB or for Wide-Band Speech in the Hands-Free Profile, the data needs to be delivered to the host MCU. Newer Bluetooth standards define a HCI command to configure the SCO routing, but it is not implemented in the chipsets we've tested so far. Instead, this is configured in a vendor-specific way as well. 4235e00af0SMatthias Ringwald 43c00c65faSMatthias Ringwald * In addition, most vendors allow to patch or configure their chipsets at run time by sending custom commands to the chipset. Obviously, this is also vendor dependent. 4435e00af0SMatthias Ringwald 45c00c65faSMatthias Ringwald## Documentation and Support 4635e00af0SMatthias RingwaldThe level of developer documentation and support varies widely between the various Bluetooth chipset providers. 4735e00af0SMatthias Ringwald 48c63d0213SMatthias RingwaldFrom our experience, only Texas Instruments and EM Microelectronics provide all relevant information directly on their website. 49c63d0213SMatthias RingwaldNordic Semiconductor does not officially have Bluetooth chipsets with HCI interface, but their documentation on the nRF5 series is complete and very informative. 50c63d0213SMatthias RingwaldTI and Nordic also provide excellent support via their respective web forum. 5135e00af0SMatthias Ringwald 52c63d0213SMatthias RingwaldInfineon acquired Cypress Semiconductor Corporation in 2020, which acquired the Bluetooth + Wifi division of Broadcom in 2016 provides 53c63d0213SMatthias Ringwaldsupport via their Community Forum. In addition, firmware updates (PatchRAM files) for Bluetooth + Wifi controllers 54c63d0213SMatthias Ringwaldare available via [Murata's Cypress GitHub](https://github.com/murata-wireless/cyw-bt-patch). 5535e00af0SMatthias Ringwald 5635e00af0SMatthias RingwaldCSR, which has been acquired by Qualcomm, provides all relevant information on their Support website after signing an NDA. 5735e00af0SMatthias Ringwald 5874d525e6SMatthias Ringwald 59c00c65faSMatthias Ringwald## Chipset Overview 60c00c65faSMatthias Ringwald 6159200c1cSMatthias Ringwald| 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 | 6274d525e6SMatthias Ringwald|--------------------------------------|------------------|----------------|--------------|------------------|------------|-----------------------|-------------------|--------------------|----------------|--------------------------------------------------| 6359200c1cSMatthias Ringwald| Atmel ATWILC3000 | LE | H4 | Yes | n.a | No | No | n.a. | Don't know | atwilc3000 | BLE Firmware size: 60 kB | 6459200c1cSMatthias Ringwald| Broadcom UART | Dual mode | H4, H5 | Rarely | Partially (2) | No | Maybe (3) | 43438: Yes | | bcm | Max UART baudrate 2 mbps | 6559200c1cSMatthias Ringwald| Broadcom USB Dongles | Dual mode | USB | Yes | Yes | No | No | BCM20702: No | | bcm | | 6659200c1cSMatthias Ringwald| CSR UART | Dual mode | H4, H5, BCSP | Rarely | Partially (2) | No | No | CSR8811: No | | csr | | 6759200c1cSMatthias Ringwald| CSR USB Dongles | Dual mode | USB | Mostly | Yes | No | No | CSR8510: No | | csr | | 68c63d0213SMatthias Ringwald| Infineon CYW207xx | Dual mode | H4, H5, USB | Don't know | Partially (2) | Yes | Yes | Yes | Yes | bcm | | 69c63d0213SMatthias Ringwald| Infineon CYW208xx | Dual mode | H4, H5, USB | Don't know | Partially (2) | Yes | Yes | Yes | Don't know | bcm | Keep CTS high during power cycle | 70c63d0213SMatthias Ringwald| Infineon CYW43xxx | Dual mode + Wifi | H4, H5 | Don't know | Partially (2) | Don't know | On newer versions | On wewer versions | On newer versions | bcm | Bluetooth + Wifi Combo Controller | 719277963bSMatthias Ringwald| Infineon CYW5557x | Dual mode + Wifi | H4, H5 | No | Yes | Yes | Yes | Yes | Yes | bcm | Bautobaud-mode needed, see posix-h4-bcm | 7259200c1cSMatthias Ringwald| 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 | 7359200c1cSMatthias Ringwald| Dialog DA14531 | LE | H4 | No | n.a. | Yes | Yes | n.a. | Don't know | da145xx | Official HCI firmware included in BTstack | 7459200c1cSMatthias Ringwald| Dialog DA14581 | LE | H4, SPI | No | n.a. | No | No | n.a. | Don't know | da145xx | Official HCI firmware included in BTstack | 7559200c1cSMatthias Ringwald| Dialog DA14585 | LE | H4, SPI | No | n.a. | Yes | Yes | n.a. | Yes | da145xx | Official HCI firmware included in BTstack | 7659200c1cSMatthias Ringwald| Dialog DA1469x | LE | H4, SPI | No | n.a. | Yes | Yes | n.a. | Yes | da145xx | HCI Firmware part of DA1469x SDK | 77eccd9dc9SMatthias Ringwald| Espressif ESP32 | Dual mode + Wifi | VHCI, H4 | Yes | Yes | Yes | Yes | Yes | Don't know | | SoC with Bluetooth and Wifi | 78*584063ebSMatthias Ringwald| Espressif ESP32-S3,C2,C3,C5,C6,H2 | LE + Wifi | VHCI, H4 | Yes | No | Yes | Yes | Yes | Yes | | SoC with Bluetooth and Wifi | 7959200c1cSMatthias Ringwald| EM 9301 | LE | SPI, H4 | No | n.a. | No | No | n.a. | Don't know | em9301 | Custom HCI SPI implementation | 8059200c1cSMatthias Ringwald| EM 9304 | LE | SPI, H4 | Yes | n.a. | Yes | Yes | n.a. | Don't know | em9301 | Custom HCI SPI implementation | 81c63d0213SMatthias Ringwald| EM 9305 | LE | SPI, H4 | Yes | n.a. | Yes | Yes | n.a. | Yes | em9301 | Custom HCI SPI implementation | 8259200c1cSMatthias Ringwald| 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 | 8359200c1cSMatthias Ringwald| Nordic nRF | LE | H4 | Fixed Random | n.a. | Yes | Yes | n.a. | Yes | | Requires HCI firmware | 84c63d0213SMatthias Ringwald| NXP 88W8997 | Dual mode | H4 | Yes | Partially(2) | Yes | Yes | No | Yes | nxp | Requires initial firmware | 854f10c4a1SMatthias Ringwald| NXP IW416 | Dual mode | H4 | Yes | No | Yes | Yes | No | Yes | nxp | Requires initial firmware | 869a0af64aSMatthias Ringwald| NXP IW61x | Dual mode | H4 | Yes | Partially(2) | Yes | Yes | No | Yes | nxp | Requires initial firmware | 8759200c1cSMatthias Ringwald| STM STLC2500D | Classic | H4 | No | Don't know | n.a | n.a. | No | n.a. | stlc2500d | Custom deep sleep management not supported | 8871f4b58fSMatthias Ringwald| STM32WB | LE | VHCI | Yes | n.a. | Yes | Yes | n.a. | Yes | | See port/stm32wb55x-nucleo-freertos | 8971f4b58fSMatthias Ringwald| STM32WB0 | LE | VHCI, H4 | Yes | n.a. | Yes | Yes | n.a. | Yes | | HCI Firmware part of STM32WB0 Cube Package | 9059200c1cSMatthias Ringwald| Renesas RX23W | LE | H4 | No | n.a. | Yes | Yes | n.a . | Don't know | | HCI Firmware part of BTTS | 9159200c1cSMatthias Ringwald| Realtek RTL8822CS | Dual mode + Wifi | H5 | Yes | Yes | Don't know | Don't know | Don't know | Don't know | | Requires initial firmware + config | 9259200c1cSMatthias Ringwald| 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 | 9359200c1cSMatthias Ringwald| Toshiba TC35661 | Dual mode | H4 | No | No | No | No | No | No | tc3566 | Only -007/009 models provide full HCI. See below | 9459200c1cSMatthias Ringwald| TI CC256x, WL183x | Dual mode | H4, H5, eHCILL | Yes | Yes | No | Yes for CC256XC | No | No | cc256x | Also WL185x, WL187x, and WL189x | 9535e00af0SMatthias Ringwald 9635e00af0SMatthias Ringwald**Notes**: 9735e00af0SMatthias Ringwald 983d5dc47fSMatthias Ringwald 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. 994ce43359SMatthias Ringwald 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. 1004ce43359SMatthias Ringwald , for those that are marked with No, we either didn't try or didn't found enough information to configure it correctly. 101c00c65faSMatthias Ringwald 3. Multiple LE Roles: Apple uses Broadcom Bluetooth+Wifi in their iOS devices and newer iOS versions support multiple concurrent LE roles, 10235e00af0SMatthias Ringwald so at least some Broadcom models support multiple concurrent LE roles. 103fbacaeecSMatthias Ringwald 104fbacaeecSMatthias Ringwald## Atmel/Microchip 105fbacaeecSMatthias Ringwald 1062c37f7fbSMatthias RingwaldThe ATILC3000 Bluetooth/Wifi combo controller has been used with Linux on embedded devices by Atmel/Microchip. Drivers and documentation are available from a [GitHub repository](https://github.com/atwilc3000). The ATWILC3000 has a basic HCI implementation stored in ROM and requires a firmware image to be uploaded before it can be used. The BLE Controller is qualified as [QDID 99659](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=36402). Please note: the BLE firmware is around 60 kB. It might need a separate Wifi firmware as well. 107fbacaeecSMatthias Ringwald 1087d82eb50SMatthias Ringwald**BD Addr** can be set with vendor-specific command although all chipsets have an official address stored. The BD_ADDR lookup results in "Newport Media Inc." which was [acquired by Atmel](http://www.atmel.com/about/news/release.aspx?reference=tcm:26-62532) in 2014. 109fbacaeecSMatthias Ringwald 110fbacaeecSMatthias Ringwald**Baud rate** can be set with a custom command. 111fbacaeecSMatthias Ringwald 112fbacaeecSMatthias Ringwald**BTstack integration**: *btstack_chipset_atwilc3000.c* contains the code to download the Bluetooth firmware image into the RAM of the ATWILC3000. After that, it can be normally used by BTstack. 11335e00af0SMatthias Ringwald 114c63d0213SMatthias Ringwald## Broadcom/Cypress/Infineon Semiconductor 11535e00af0SMatthias Ringwald 11629c2a6e3SMatthias RingwaldBefore the Broadcom Wifi+Bluetooth division was taken over by Cypress Semiconductor, it was not possible to buy Broadcom chipset in low quantities. Nevertheless, module manufacturers like Ampak created modules that contained Broadcom BCM chipsets (Bluetooth as well as Bluetooth+Wifi combos) that might already have been pre-tested for FCC and similar certifications. 1172c37f7fbSMatthias Ringwald 118c00c65faSMatthias RingwaldA popular example is the Ampak AP6212A module that contains an BCM 43438A1 and is used on the Raspberry Pi 3, the RedBear Duo, and the RedBear IoT pHAT for older Raspberry Pi models. 11935e00af0SMatthias Ringwald 1202c37f7fbSMatthias RingwaldThe CYW20704 A2 controller supports both DLE as well as multiple LE roles and is available e.g. from [LairdTech](https://www.lairdtech.com/bt850-bt851-and-bt860-series-modules-adapter-dvks-0002) as UART module (BT860), USB module (BT850), and USB dongle. 1212c37f7fbSMatthias Ringwald 1224ce43359SMatthias RingwaldInterestingly, the CYW20704 exhibits the same UART flow control bug as the CC2564. You can add ENABLE_CYPRESS_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND to activate a workaround and/or read the bug & workardound description in the TI section below. 1234ce43359SMatthias Ringwald 1244ce43359SMatthias RingwaldThe best source for documentation on vendor specific commands so far has been the source code for blueZ and the Bluedroid Bluetooth stack from Android, but with the takeover by Cypress, documentation is directly available. 12535e00af0SMatthias Ringwald 12635e00af0SMatthias RingwaldBroadcom USB dongles do not require special configuration, however SCO data is not routed over USB by default. 12735e00af0SMatthias Ringwald 128624eaff0SMatthias RingwaldThe PSoC 4 SoCs can be programmed with the "BLE DTM" HCI Firmware from the PSoC Creator Kit Examples. The UART baudrate is set to 115200. For higher baud rates, the clocks probably need to be configured differently, as the IDE gives a warning about this. 129624eaff0SMatthias Ringwald 130755dfcd8SMatthias RingwaldThe CYW20819 can be used as a SoC with Cypress' Bluetooth stack. To use it as a regular Bluetooth Controller over HCI H4, CTS must be asserted during Power-Up / Reset. 131755dfcd8SMatthias Ringwald 1324687e2cbSMatthias RingwaldThe CYW43xxx series contains a Wifi and Bluetooth Controller. The Bluetooth Controller can be used independent from the Wifi part. 1334687e2cbSMatthias Ringwald 1349277963bSMatthias RingwaldNewer Controller likes the CYW5557x series requires to enter a so-called autobaud mode by asserting CTS (low) during reset/power-up. In this mode, only a subset of 1359277963bSMatthias RingwaldHCI commands are available. Please see posix-h4-bcm port to get started. 1369277963bSMatthias Ringwald 13735e00af0SMatthias Ringwald**Init scripts**: For UART connected chipsets, an init script has to be uploaded after power on. For Bluetooth chipsets that are used in Broadcom Wifi+Bluetooth combos, this file often can be found as a binary file in Linux distributions with the ending *'.hcd'* or as part of the WICED SDK as C source file that contains the init script as a data array for use without a file system. 13835e00af0SMatthias Ringwald 13935e00af0SMatthias RingwaldTo find the correct file, Broadcom chipsets return their model number when asked for their local name. 14035e00af0SMatthias Ringwald 14194bb7abfSMatthias RingwaldBTstack supports uploading of the init script in two variants: using .hcd files looked up by name in the posix-h4 port and by linking against the init script in the WICED port. While the init script is processed, the chipsets RTS line goes high, but only 2 ms after the command complete event for the last command from the init script was sent. BTstack waits for 10 ms after receiving the command complete event for the last command to avoid sending before RTS goes high and the command fails. 14235e00af0SMatthias Ringwald 143c00c65faSMatthias Ringwald**BD Addr** can be set with a custom command. A fixed address is provided on some modules, e.g. the AP6212A, but not on others. 14435e00af0SMatthias Ringwald 14594bb7abfSMatthias Ringwald**SCO data** can be configured with a custom command found in the bluez sources. It works with USB chipsets. The chipsets don't implement the SCO Flow Control that is used by BTstack for UART connected devices. A forum suggests to send SCO packets as fast as they are received since both directions have the same constant speed. 14635e00af0SMatthias Ringwald 14729c2a6e3SMatthias Ringwald**Baud rate** can be set with custom command. The baud rate resets during the warm start after uploading the init script. So, the overall scheme is this: start at default baud rate, get local version info, send custom Broadcom baud rate change command, wait for response, set local UART to high baud rate, and then send init script. After sending the last command from the init script, reset the local UART. Finally, send custom baud rate change command, wait for response, and set local UART to high baud rate. 14835e00af0SMatthias Ringwald 14935e00af0SMatthias Ringwald**BTstack integration**: The common code for all Broadcom chipsets is provided by *btstack_chipset_bcm.c*. During the setup, *btstack_chipset_bcm_instance* function is used to get a *btstack_chipset_t* instance and passed to *hci_init* function. 15035e00af0SMatthias Ringwald 1519277963bSMatthias RingwaldSCO Data can be routed over HCI for both USB dongles and UART connections, however BTstack only can send audio correctly over UART with newer Controllers that support SCO Flow Control. 1529277963bSMatthias RingwaldHSP and HFP Narrow Band Speech is supported via I2C/PCM pins. Newer Controllers provide an mSBC codec that allows to use HSP/HFP incl. WBS over PCM/I2S with ENABLE_BCM_PCM_WBS. 15335e00af0SMatthias Ringwald 154c63d0213SMatthias Ringwald 15584827a69SMatthias Ringwald## CSR / Qualcomm Incorporated 15684827a69SMatthias Ringwald 15784827a69SMatthias RingwaldCSR plc has been acquired by Qualcomm Incorporated in August 2015. 15835e00af0SMatthias Ringwald 15935e00af0SMatthias RingwaldSimilar to Broadcom, the best source for documentation is the source code for blueZ. 16035e00af0SMatthias Ringwald 16135e00af0SMatthias RingwaldCSR USB dongles do not require special configuration and SCO data is routed over USB by default. 16235e00af0SMatthias Ringwald 16335e00af0SMatthias RingwaldCSR chipset do not require an actual init script in general, but they allow to configure the chipset via so-called PSKEYs. After setting one or more PSKEYs, a warm reset activates the new setting. 16435e00af0SMatthias Ringwald 16535e00af0SMatthias Ringwald**BD Addr** can be set via PSKEY. A fixed address can be provided if the chipset has some kind of persistent memory to store it. Most USB Bluetooth dongles have a fixed BD ADDR. 16635e00af0SMatthias Ringwald 16735e00af0SMatthias Ringwald**SCO data** can be configured via a set of PSKEYs. We haven't been able to route SCO data over HCI for UART connections yet. 16835e00af0SMatthias Ringwald 16929c2a6e3SMatthias Ringwald**Baud rate** can be set as part of the initial configuration and gets actived by the warm reset. 17035e00af0SMatthias Ringwald 17135e00af0SMatthias Ringwald**BTstack integration**: The common code for all Broadcom chipsets is provided by *btstack_chipset_csr.c*. During the setup, *btstack_chipset_csr_instance* function is used to get a *btstack_chipset_t* instance and passed to *hci_init* function. The baud rate is set during the general configuration. 17235e00af0SMatthias Ringwald 17335e00af0SMatthias RingwaldSCO Data is routed over HCI for USB dongles, but not for UART connections. HSP and HFP Narrow Band Speech is supported via I2C/PCM pins. 17435e00af0SMatthias Ringwald 17535e00af0SMatthias Ringwald 17674d525e6SMatthias Ringwald## Dialog Semiconductor / Renesas 17735e00af0SMatthias Ringwald 17874d525e6SMatthias RingwaldDaialo Semiconductor has been aquired by Renesas in February 2021. 17974d525e6SMatthias Ringwald 18074d525e6SMatthias RingwaldThey offers the DA145xx and DA1469xx series of LE-only SoCs that can be programmed with an HCI firmware. 1811c5cf6a0SMatthias RingwaldThe HCI firmware can be uploaded on boot into SRAM or stored in the OTP (One-time programmable) memory, or in an external SPI. 18235e00af0SMatthias Ringwald 1831c5cf6a0SMatthias RingwaldThe 581 does not implement the Data Length Extension or supports multiple concurrent roles, while later versions support it. 184c240379eSMatthias Ringwald 1851c5cf6a0SMatthias RingwaldThe mechanism to boot a firmware via UART/SPI has mostly stayed the same, while the set of supported interfaces and baudrates have slightly changed. 186ecde56a6SMatthias Ringwald 1871c5cf6a0SMatthias RingwaldThe DA1469x uses an external flash. The DA 1469x SDK contains a HCI firmware that can be compiled and downloaded into flash using the SmartSnippets Studio. 1884ce43359SMatthias Ringwald 18974d525e6SMatthias RingwaldUnexpected issues: 19074d525e6SMatthias Ringwald- DA14585 cannot scan for other devices if advertising is enabled alhtough it supports multiple Peripheral/Central roles (last check: 6.0.14.1114) 19174d525e6SMatthias Ringwald 19265b6e0cdSMatthias Ringwald**BD Addr** fixed to 80:EA:CA:00:00:01. No command in HCI firmware to set it differently. Random addresses could be used instead. 19365b6e0cdSMatthias Ringwald 1944ce43359SMatthias Ringwald**Baud rate**: The baud rate is fixed at 115200 with the provided firmware. A higher baud rate could be achieved by re-compiling the HCI firmware. 195c240379eSMatthias Ringwald 196d00ab9e3SMatthias Ringwald**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. 1974687e2cbSMatthias Ringwald 19835e00af0SMatthias Ringwald 1996e0288c2SMatthias Ringwald## Espressif ESP32 2006e0288c2SMatthias Ringwald 2012effbd4fSMatthias RingwaldThe 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. 2022effbd4fSMatthias RingwaldIt 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. 2032c37f7fbSMatthias Ringwald 20474d525e6SMatthias RingwaldThe newer ESP32-S3 and ESP32-C3 SoCs have a newer LE Controller that also supports 2M-PHY, but does support Classic (BR/EDR) anymore. 20559200c1cSMatthias Ringwald 20659200c1cSMatthias RingwaldALl 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. 20774d525e6SMatthias RingwaldBTstack can work either on the SoC itself or on another MCU with the ESP32 connected via 4-wire UART. 20859200c1cSMatthias Ringwald 20974d525e6SMatthias RingwaldSee Espressif's [ESP-Hosted firmware](https://github.com/espressif/esp-hosted) for use as Bluetooth/Wifi Ccontroller. 21074d525e6SMatthias Ringwald 2114687e2cbSMatthias Ringwald 21235e00af0SMatthias Ringwald## EM Microelectronic Marin 21335e00af0SMatthias Ringwald 21474d525e6SMatthias RingwaldFor 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. 21574d525e6SMatthias RingwaldThe 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. 21635e00af0SMatthias Ringwald 21774d525e6SMatthias RingwaldIn December 2016, EM released the new EM9304 that also features an HCI mode and adds support for optional Bluetooth 4.2. features. 21874d525e6SMatthias RingwaldIt 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. 21974d525e6SMatthias RingwaldFor this, an advanced mechanism to upload configuration and firmware to RAM or into an One-Time-Programmable area of 128 kB is supported. 22074d525e6SMatthias RingwaldIt supports a superset of the vendor specific commands of the EM9301. 22135e00af0SMatthias Ringwald 22274d525e6SMatthias RingwaldEM9304 is used by the 'stm32-l073rz-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). 223f93a2017SMatthias Ringwald 2242c37f7fbSMatthias Ringwald**BD Addr** must be set during startup for EM9301 since it does not have a stored fix address. The EM9304 comes with an valid address stored in OTP. 22535e00af0SMatthias Ringwald 22635e00af0SMatthias Ringwald**SCO data** is not supported since it is LE only. 22735e00af0SMatthias Ringwald 2282c37f7fbSMatthias Ringwald**Baud rate** can be set for UART mode. For SPI, the master controls the speed via the SPI Clock line. With 3.3V, 16 Mhz is supported. 22935e00af0SMatthias Ringwald 2302c37f7fbSMatthias Ringwald**Init scripts** are not required although it is possible to upload small firmware patches to RAM or the OTP memory (EM9304 only). 23135e00af0SMatthias Ringwald 232c1fc8abcSMatthias Ringwald**BTstack integration**: The common code for the EM9304 is provided by *btstack_chipset_em9301.c*. During the setup, *btstack_chipset_em9301_instance* function is used to get a *btstack_chipset_t* instance and passed to *hci_init* function. It enables to set the BD Addr during start. 23335e00af0SMatthias Ringwald 2344687e2cbSMatthias Ringwald 2358174b66aSMatthias Ringwald## Intel Dual Wireless 8260, 8265 2368174b66aSMatthias Ringwald 2378174b66aSMatthias RingwaldWifi/Bluetooth combo cards mainly used in mobile computers. The Bluetooth part requires the upload of a firmware file and a configuration file. SCO, DLE, Multiple roles not tested. 2388174b66aSMatthias Ringwald 2394687e2cbSMatthias Ringwald 24035e00af0SMatthias Ringwald## Nordic nRF5 series 24135e00af0SMatthias Ringwald 242410be61aSMatthias RingwaldThe Single-Mode LE chipsets from the Nordic nRF5 series chipsets usually do not have an HCI interface. Instead, they provide an LE Bluetooth Stack as a binary library, the so-called *SoftDevices*. Developer can write their Bluetooth application on top of this library. Since the chipset can be programmed, it can also be loaded with a firmware that provides a regular HCI H4 interface for a Host. 24335e00af0SMatthias Ringwald 24435e00af0SMatthias RingwaldAn interesting feature of the nRF5 chipsets is that they can support multiple LE roles at the same time, e.g. being Central in one connection and a Peripheral in another connection. Also, the nRF52 SoftDevice implementation supports the Bluetooth 4.2 Data Length Extension. 24535e00af0SMatthias Ringwald 246410be61aSMatthias RingwaldBoth nRF5 series, the nRF51 and the nRF52, can be used with an HCI firmware. The nRF51 does not support encrypted connections at the moment (November 18th, 2016) although this might become supported as well. 24735e00af0SMatthias Ringwald 24835e00af0SMatthias Ringwald**BD ADDR** is not set automatically. However, during production, a 64-bit random number is stored in the each chip. Nordic uses this random number as a random static address in their SoftDevice implementation. 24935e00af0SMatthias Ringwald 25035e00af0SMatthias Ringwald**SCO data** is not supported since it is LE only. 25135e00af0SMatthias Ringwald 252c00c65faSMatthias Ringwald**Baud rate** is fixed to 115200 by the patch although the firmware could be extended to support a baud rate change. 25335e00af0SMatthias Ringwald 25435e00af0SMatthias Ringwald**Init script** is not required. 25535e00af0SMatthias Ringwald 256410be61aSMatthias Ringwald**BTstack integration**: Support for a nRF5 chipset with the Zephyr Controller is provided by *btstack_chipset_zephyr.c*. It queries the static random address during init. 25735e00af0SMatthias Ringwald 2584da9eab9SMatthias RingwaldTo use these chipsets with BTstack, you need to flash the HCI UART example from NCS or Zephyr onto the chipset. 2594da9eab9SMatthias RingwaldPlease see the instructions in chipset/zephyr/nrf5340_dongle for nRF5340 DK and ADK. 26035e00af0SMatthias Ringwald 261c63d0213SMatthias Ringwald 262c63d0213SMatthias Ringwald## NXP Semiconductors 263c63d0213SMatthias RingwaldNXP Semiconductors acquired the Bluetooth + Wifi division of Marvel in 2019 and continues their products with new names. 264c63d0213SMatthias RingwaldAs the Controllers contain no Bluetooth firmware, the firmware needs to be uploaded on start. 265c63d0213SMatthias RingwaldBTstack supports firmware upload for older Controllers with bootloader version v1, like the NXP 88W8997. 266c63d0213SMatthias Ringwald 267c63d0213SMatthias Ringwald**BD ADDR** is stored in Controller. 268c63d0213SMatthias Ringwald 269c63d0213SMatthias Ringwald**SCO data** is routed over HCI by default but does not support flow control. 270c63d0213SMatthias Ringwald 271c63d0213SMatthias Ringwald**Baud rate** is currently kept at 115200 272c63d0213SMatthias Ringwald 273c63d0213SMatthias Ringwald**Init script** is required. 274c63d0213SMatthias Ringwald 275c63d0213SMatthias Ringwald**BTstack integration**: firmware update required and implemented by *btstack_chipset_nxp.c* See port/posix-h4-nxp for details on how to use it. 276c63d0213SMatthias Ringwald 277c63d0213SMatthias Ringwald 2784a4e2291SMatthias Ringwald## Realtek 2794a4e2291SMatthias Ringwald 2804a4e2291SMatthias RingwaldRealtek provides Dual-Mode Bluetooth Controllers with USB and UART (H4/H5) interfaces as well as combined Bluetooth/WiFi Controllers, which are also available as M.2 modules for laptops. 2814a4e2291SMatthias RingwaldThey commonly require to download a patch and a configuration file. Patch and configuration file can be found as part of their Linux drivers. 2824a4e2291SMatthias Ringwald 2834a4e2291SMatthias Ringwald**BD ADDR** is stored in Controller. 2844a4e2291SMatthias Ringwald 2854a4e2291SMatthias Ringwald**SCO data** can either be routed over HCI with working flow control or over I2S/PCM. The 8822CS supports mSBC codec internally. 2864a4e2291SMatthias Ringwald 2874a4e2291SMatthias Ringwald**Baud rate** is set by the config file. 2884a4e2291SMatthias Ringwald 2894a4e2291SMatthias Ringwald**Init script** is required. 2904a4e2291SMatthias Ringwald 2914a4e2291SMatthias Ringwald**BTstack integration**: H4/H5 Controller require firmware upload. 'rtk_attach' can be used for this. For USB Controllers, 2924a4e2291SMatthias Ringwald*btstack_chipset_realtek.c* implements the patch and config upload mechanism. See port/libusb for details on how to use it. 2934a4e2291SMatthias Ringwald 2944687e2cbSMatthias Ringwald 2953be461f3SMatthias Ringwald## Renesas Electronics 2963be461f3SMatthias Ringwald 29771f4b58fSMatthias RingwaldPlease see Dialog Semiconductor for DA14xxx Bluetooth SoCs above. 29874d525e6SMatthias Ringwald 2993be461f3SMatthias RingwaldRenesas currently has 3 LE-only SoCs: the older 16-bit RL78 and the newer RX23W and the RA4W1. 3003be461f3SMatthias RingwaldFor the newer SoCs, Renesas provides a pre-compiled HCI firmware as well as an HCI project for their e2 Studio IDE. 3013be461f3SMatthias RingwaldThe HCI firmware needs to be programmed into the SoC Flash. 3023be461f3SMatthias Ringwald 3033be461f3SMatthias RingwaldBoth newer SoC provide the newer Bluetooth 5.0 features like DLE, 2M-PHY, Long Range, and Multiple Roles. 3043be461f3SMatthias Ringwald 3053be461f3SMatthias RingwaldTo install the HCI Firmware on the [Target Board for RX23W](https://www.renesas.com/us/en/products/software-tools/boards-and-kits/eval-kits/rx-family-target-board.html): 3063be461f3SMatthias Ringwald 3073be461f3SMatthias Ringwald * Download [Bluetooth Test Tool Suite](https://www.renesas.com/eu/en/software/D6004348.html) 3083be461f3SMatthias Ringwald * Install [Renesas Flash Programmer](https://www.renesas.com/tw/en/products/software-tools/tools/programmer/renesas-flash-programmer-programming-gui.html) 3093be461f3SMatthias Ringwald * Follow instruction in [Target Board for RX23W Quick Start Guide](https://www.renesas.com/us/en/doc/products/mpumcu/apn/rx/013/r20qs0014ej0100-23wtbqsg.pdf) to flash `rx23w_uart_hci_sci8_br2000k_v1.00.mot` 3103be461f3SMatthias Ringwald 3113be461f3SMatthias Ringwald**BD Addr** fixed to 74:90:50:FF:FF:FF. A Windows tool in the BTTS suite allows to set a public Bluetooth Address. 3123be461f3SMatthias Ringwald 3133be461f3SMatthias Ringwald**Baud rate**: The baud rate is fixed at 115200 resp. 2000000 with the provided firmware images. With 2 mbps, there's no need to update the baudrate at run-time. 3143be461f3SMatthias Ringwald 3153be461f3SMatthias Ringwald**BTstack integration**: No special support needed. 3163be461f3SMatthias Ringwald 3173be461f3SMatthias Ringwald 31835e00af0SMatthias Ringwald## STMicroelectronics 31935e00af0SMatthias Ringwald 32074d525e6SMatthias RingwaldSTMicroelectronics has several different Bluetooth series. 32174d525e6SMatthias Ringwald 32274d525e6SMatthias Ringwald### STLC2500D 32374d525e6SMatthias Ringwald 32474d525e6SMatthias RingwaldIt offers the Bluetooth V2.1 + EDR chipset STLC2500D that supports SPI and UART H4 connection. 32535e00af0SMatthias Ringwald 326c00c65faSMatthias Ringwald**BD Addr** can be set with custom command although all chipsets have an official address stored. 32735e00af0SMatthias Ringwald 32835e00af0SMatthias Ringwald**SCO data** might work. We didn't try. 32935e00af0SMatthias Ringwald 33029c2a6e3SMatthias Ringwald**Baud rate** can be set with custom command. The baud rate change of the chipset happens within 0.5 seconds. At least on BTstack, knowning exactly when the command was fully sent over the UART is non-trivial, so BTstack switches to the new baud rate after 100 ms to expect the command response on the new speed. 33135e00af0SMatthias Ringwald 33235e00af0SMatthias Ringwald**Init scripts** are not required although it is possible to upload firmware patches. 33335e00af0SMatthias Ringwald 33435e00af0SMatthias Ringwald**BTstack integration**: Support for the STLC2500C is provided by *btstack_chipset_stlc.c*. During the setup, *btstack_chipset_stlc2500d_instance* function is used to get a *btstack_chipset_t* instance and passed to *hci_init* function. It enables higher UART baud rate and to set the BD Addr during startup. 33535e00af0SMatthias Ringwald 33674d525e6SMatthias Ringwald 33774d525e6SMatthias Ringwald### BlueNRG 33874d525e6SMatthias Ringwald 33974d525e6SMatthias RingwaldThe BlueNRG series is an LE-only SoC which can be used with an HCI Firmware over a custom SPI interface. 34074d525e6SMatthias Ringwald 34171f4b58fSMatthias Ringwald### STM32-WB 34274d525e6SMatthias Ringwald 34371f4b58fSMatthias RingwaldThe STM32-WB5x series microcontroller is an SoC with a multi-protocol 2.4 Ghz radio co-processor. It provides a virtual HCI interface. 34471f4b58fSMatthias Ringwald 34571f4b58fSMatthias Ringwald### STM32-WB0 34671f4b58fSMatthias Ringwald 34771f4b58fSMatthias RingwaldThe STM32-WB50 series microcontroller is an SoC with a multi-protocol 2.4 Ghz radio co-processor. 34871f4b58fSMatthias RingwaldThe [STM32Cube MCU Package for STM32WB0 series](https://www.st.com/en/embedded-software/stm32cubewb0.html) provides the HCI firmware. 34971f4b58fSMatthias Ringwald 35071f4b58fSMatthias RingwaldTo flash this firmware, you can: 35171f4b58fSMatthias Ringwald- [Download and Install STM32CubeIDE](https://www.st.com/en/development-tools/stm32cubeide.html) 35271f4b58fSMatthias Ringwald- [Download and Unzip the STM32WB0 MCU Package](https://www.st.com/en/embedded-software/stm32cubewb0.html) 35371f4b58fSMatthias Ringwald- Open STM32CubeIDE 35471f4b58fSMatthias Ringwald- Import projects`Projects/{Your DevKit}/Applications/BLE/BLE_TransparentMode/STM32CubeIDE` and make sure the option 'copy into workspace' is unchecked 35571f4b58fSMatthias Ringwald- In `ble_conf.h`, add the line: 35671f4b58fSMatthias Ringwald - `#define BLESTACK_CONTROLLER_ONLY 1` 35771f4b58fSMatthias Ringwald- Replace the controller+stack library with the controller only library: 35871f4b58fSMatthias Ringwald - Go to Properties->C/C++ Build->Settings->Tool Settings->MCU GCC Linker->Libraries in STM32CubeIDE 35971f4b58fSMatthias Ringwald - Replace `:stm32wb0x_ble_stack.a` with `:stm32wb0x_ble_stack_controller_only.a` 36071f4b58fSMatthias Ringwald- Connect your Nucleo board and press the "Run" button 36171f4b58fSMatthias Ringwald 36271f4b58fSMatthias RingwaldThe HCI firmware is configured for 921600 baud and no hardware flow control. You can modify these settings in `MX_USART1_UART_Init()` in `main.c`. 36371f4b58fSMatthias RingwaldUse `UART_HWCONTROL_RTS_CTS` to enable hardware flowcontrol. 36435e00af0SMatthias Ringwald 3654687e2cbSMatthias Ringwald 36635e00af0SMatthias Ringwald## Texas Instruments CC256x series 36735e00af0SMatthias Ringwald 3684bdbd754SMatthias RingwaldThe Texas Instruments CC256x series is currently in its fourth iteration and provides a Classic-only (CC2560), a Dual-mode (CC2564), and a Classic + ANT (CC2567) model. A variant of the Dual-mode chipset is also integrated into TI's WiLink 8 Wifi+Bluetooth combo modules of the WL183x, WL185x, WL187x, and WL189x series. Some of the latter support ANT as well. 36935e00af0SMatthias Ringwald 37035e00af0SMatthias RingwaldThe CC256x chipset is connected via an UART connection and supports the H4, H5 (since third iteration), and eHCILL. 37135e00af0SMatthias Ringwald 37223620124SMatthias RingwaldThe latest generation `CC256xC` chipsets support multiple LE roles in parallel. 37323620124SMatthias Ringwald 37423620124SMatthias RingwaldTI provides an alternative firmware that integrates an SBC Codec in the Bluetooth Controller itself for Assisted A2DP (A3DP) and Assisted HFP (Wide-band speech support). While this can save computation and code size on the main host, it cannot be used together with BLE, making it useless in most projects. 375439b93a1SMatthias Ringwald 376fb904c26SMatthias RingwaldThe different CC256x chipset can be identified by the LMP Subversion returned by the *hci_read_local_version_information* command. TI also uses a numeric way (AKA) to identify their chipsets. The table shows the LMP Subversion and AKA number for the CC256x and the WL18xx series. 3774f537631SMatthias Ringwald 3784f537631SMatthias RingwaldChipset | LMP Subversion | AKA 37948093f19SMatthias Ringwald--------|----------------|------- 3804f537631SMatthias RingwaldCC2560 | 0x191f | 6.2.31 38124a96a28SMatthias RingwaldCC2560A, CC2564, CC2567 | 0x1B0F | 6.6.15 3824f537631SMatthias RingwaldCC256xB | 0x1B90 | 6.7.16 3834f537631SMatthias RingwaldCC256xC | 0x9a1a | 6.12.26 384fb904c26SMatthias RingwaldWL18xx | 0xac20 | 11.8.32 3854f537631SMatthias Ringwald 3863c7822d8SMatthias Ringwald**SCO data:** Routing of SCO data can be configured with the `HCI_VS_Write_SCO_Configuration` command. 38735e00af0SMatthias Ringwald 3883c7822d8SMatthias Ringwald**Baud rate** can be set with `HCI_VS_Update_UART_HCI_Baudrate`. The chipset confirms the change with a command complete event after which the local UART is set to the new speed. Oddly enough, the CC256x chipsets ignore the incoming CTS line during this particular command complete response. 38939e7ee9fSMatthias Ringwald 39023620124SMatthias RingwaldIf you've implemented the hal_uart_dma.h without an additional ring buffer (as recommended!) and you have a bit of delay, e.g. because of thread switching on a RTOS, this could cause a UART overrun. 39123620124SMatthias RingwaldIf this happens, BTstack provides a workaround in the HCI H4 transport implementation by adding `ENABLE_CC256X_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND`. 39223620124SMatthias RingwaldIf this is enabled, the H4 transport layer will resort to "deep packet inspection" to first check if its a TI controller and then wait for the HCI_VS_Update_UART_HCI_Baudrate. 39323620124SMatthias RingwaldWhen detected, it will tweak the next UART read to expect the HCI Command Complete event. 39471aad618SMatthias Ringwald 3953c7822d8SMatthias Ringwald**BD Addr** can be set with `HCI_VS_Write_BD_Addr` although all chipsets have an official address stored. 3964e94d79fSMatthias Ringwald 3974e94d79fSMatthias Ringwald**Init Scripts.** In order to use the CC256x chipset an initialization script must be obtained and converted into a C file for use with BTstack. For newer revisions, TI provides a main.bts and a ble_add_on.bts that need to be combined. 3984e94d79fSMatthias Ringwald 3994e94d79fSMatthias RingwaldThe Makefile at *chipset/cc256x/Makefile.inc* is able to automatically download and convert the requested file. It does this by: 4004e94d79fSMatthias Ringwald 4013c7822d8SMatthias Ringwald- Downloading one or more `BTS files` for your chipset. 4024e94d79fSMatthias Ringwald- Running the Python script: 4034e94d79fSMatthias Ringwald 4044e94d79fSMatthias Ringwald<!-- --> 4054e94d79fSMatthias Ringwald 4064e94d79fSMatthias Ringwald ./convert_bts_init_scripts.py main.bts [ble_add_on.bts] output_file.c 4074e94d79fSMatthias Ringwald 40823620124SMatthias Ringwald**BTstack integration**: 40923620124SMatthias Ringwald- The common code for all CC256x chipsets is provided by *btstack_chipset_cc256x.c*. During the setup, *btstack_chipset_cc256x_instance* function is used to get a *btstack_chipset_t* instance and passed to *hci_init* function. *btstack_chipset_cc256x_lmp_subversion* provides the LMP Subversion for the selected init script. 41023620124SMatthias Ringwald- SCO Data is be routed over HCI with `ENABLE_SCO_OVER_HCI` or to PCM/I2S with `ENABLE_SCO_OVER_PCM`. Wide-band speech is supported in both cases. For SCO-over-HCI, BTstack implements the mSBC Codec. For SCO-over-I2S, Assisted HFP can be used. 41123620124SMatthias Ringwald- Assisted HFP: BTstack provides support for Assisted HFP mode if enabled with `ENABLE_CC256X_ASSISTED_HFP` and SCO is routed over PCM/I2S with `ENABLE_SCO_OVER_PCM`. During startup, the PCM/I2S is configured and the HFP implementation will enable/disable the mSBC Codec for Wide-band-speech when needed. 4124e94d79fSMatthias Ringwald 41374d525e6SMatthias RingwaldKnown issues: 41474d525e6SMatthias Ringwald- The CC2564C v1.5 may loose the connection in Peripheral role with a Slave Latency > 0 when the Central updates Connection Parameters. See [https://github.com/bluekitchen/btstack/issues/429](Issue #429) 41574d525e6SMatthias Ringwald 41674d525e6SMatthias Ringwald 41735e00af0SMatthias Ringwald## Toshiba 41835e00af0SMatthias Ringwald 41959ac44afSMatthias RingwaldThe Toshiba TC35661 Dual-Mode chipset is available in three variants: standalone incl. binary Bluetooth stack, as a module with embedded stack or with a regular HCI interface. The HCI variant has the model number TC35661–007 resp TC35561-009 for the newer silicon. 42035e00af0SMatthias Ringwald 42159ac44afSMatthias RingwaldWe first tried their USB Evaluation Stick that contains an USB-to-UART adapter and the PAN1026 module that contains the TC35661 -501. While it does support the HCI interface and Bluetooth Classic operations worked as expected, LE HCI Commands are not supported. With the -007 and the -009 models, everything works as expected. 42235e00af0SMatthias Ringwald 4237f8d4ab1SMatthias Ringwald**SCO data** does not seem to be supported. 42435e00af0SMatthias Ringwald 42535e00af0SMatthias Ringwald**Baud rate** can be set with custom command. 42635e00af0SMatthias Ringwald 42735e00af0SMatthias Ringwald**BD Addr ** must be set with custom command. It does not have a stored valid public BD Addr. 42835e00af0SMatthias Ringwald 42935e00af0SMatthias Ringwald**Init Script** is not required. A patch file might be uploaded. 43035e00af0SMatthias Ringwald 43129c2a6e3SMatthias Ringwald**BTstack integration**: Support for the TC35661 series is provided by *btstack_chipset_tc3566x.c*. During the setup, *btstack_chipset_tc3566x_instance* function is used to get a *btstack_chipset_t* instance and passed to *hci_init* function. It enables higher UART baud rate and sets the BD Addr during startup. 432