1*35e00af0SMatthias RingwaldIn this chapter, we first explain how Bluetooth chipsets are connected physically and 2*35e00af0SMatthias Ringwaldthen provide information about popular Bluetooth chipset and their use with BTstack. 3*35e00af0SMatthias Ringwald 4*35e00af0SMatthias RingwaldThe communication between a Host (a computer or an MCU) and a Host Controller (the actual Bluetoot 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. 5*35e00af0SMatthias Ringwald 6*35e00af0SMatthias Ringwald{#fig:HostChipsetConnection} 7*35e00af0SMatthias Ringwald 8*35e00af0SMatthias 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. 9*35e00af0SMatthias RingwaldOn embedded systems, UART connections are used instead, although USB could be used as well. 10*35e00af0SMatthias Ringwald 11*35e00af0SMatthias RingwaldMost USB Bluetooth dongles on the market conatin either an Broadcom BCM20702 12*35e00af0SMatthias Ringwald 13*35e00af0SMatthias RingwaldFor UART connections, different transport layer variants exist. The 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. The "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 retranssion. Finally, Texas Instruments created the "eHCILL transport" layer based on H4 that allows both sides to enter sleep mode without loosing synchronisation. 14*35e00af0SMatthias Ringwald 15*35e00af0SMatthias RingwaldUnfortunately, the HCI standard misses a few relevant details: 16*35e00af0SMatthias Ringwald 17*35e00af0SMatthias 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 neceesary to activate the baud rate change as well. 18*35e00af0SMatthias Ringwald 19*35e00af0SMatthias 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. 20*35e00af0SMatthias Ringwald 21*35e00af0SMatthias 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. 22*35e00af0SMatthias Ringwald 23*35e00af0SMatthias Ringwald * In addition, most vendors allow to patch or configure their chipsets at run time by sending custom comands to the chipset. Obviously, this is also vendor dependent. 24*35e00af0SMatthias Ringwald 25*35e00af0SMatthias Ringwald 26*35e00af0SMatthias RingwaldThe level of developer documentation and support varies widely between the various Bluetooth chipset providers. 27*35e00af0SMatthias Ringwald 28*35e00af0SMatthias RingwaldFrom 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. 29*35e00af0SMatthias Ringwald 30*35e00af0SMatthias RingwaldBroadcom, 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. 31*35e00af0SMatthias Ringwald 32*35e00af0SMatthias RingwaldCSR, which has been acquired by Qualcomm, provides all relevant information on their Support website after signing an NDA. 33*35e00af0SMatthias Ringwald 34*35e00af0SMatthias RingwaldChipset | Type | HCI Transport | BD_ADDR (1) | SCO over HCI (2) | LE DLE | Multiple LE Roles (3)| BTstack folder | Comment 35*35e00af0SMatthias Ringwald-------------------- |-----------| ---------------|--------------|------------------|--------|----------------------|----------------|--------- 36*35e00af0SMatthias RingwaldBroadcom UART | Dual mode | H4, H5 | rarely | No (didn't work) | No | Maybe | bcm | Max UART baudrate 3 mbps 37*35e00af0SMatthias RingwaldBroadcom USB Dongles | Dual mode | USB | Yes | No (didn't work) | No | No | bcm | 38*35e00af0SMatthias RingwaldCSR UART | Dual mode | H4, H5 | rarely | No (didn't work) | No | No | csr | 39*35e00af0SMatthias RingwaldCSR USB Dongles | Dual mode | USB | Mostly | Yes | No | No | csr | 40*35e00af0SMatthias RingwaldDialog DA14581 | LE | H4, SPI | ? | n.a. | No | No | | Waiting for dev kit 41*35e00af0SMatthias RingwaldEM 9301 | LE | SPI | No | n.a. | No | No | em9301 | Custom HCI SPI implementation 42*35e00af0SMatthias RingwaldEM 9304 | LE | SPI, H4 | ? | n.a. | Yes | No | | Waiting for dev kit 43*35e00af0SMatthias RingwaldNordic nRF | LE | H4 | fixed random | n.a. | Yes | Yes | | Requires custom HCI firmware 44*35e00af0SMatthias RingwaldSTM STLC2500D | Classic | H4 | No | No (didn't try) | n.a | n.a. | stlc2500d | Custom deep sleep management not supported 45*35e00af0SMatthias RingwaldToshiba TC35661 | Dual mode | H4 | No | No (didn't try) | No | No | tc3566 | HCI version not tested. See below 46*35e00af0SMatthias RingwaldTI CC256x, WL183x | Dual mode | H4, H5, eHCILL | Yes | Yes | No | No | cc256x | Also WL185x, WL187x, and WL189x 47*35e00af0SMatthias Ringwald 48*35e00af0SMatthias Ringwald**Notes**: 49*35e00af0SMatthias Ringwald 50*35e00af0SMatthias Ringwald 1. BD_ADDR: Not all Bluetooth chipset come with a fixed valid MAC Address. Better Broadcom and CSR dongles come with a MAC address from the dongle manufacturer, but cheaper ones might come with identical addresses. 51*35e00af0SMatthias Ringwald 2. SCO over HCI: All Bluetooth Classic chipsets support SCO over HCI, for those that are marked with No, we either didn't try or didn't found enough information to configure it correctly. 52*35e00af0SMatthias Ringwald 2. Multiple LE Roles: Apple uses Broadcom Bluetooth+Wifi in their iOS devices and newer iOS versions support multipe concurrent LE roles, 53*35e00af0SMatthias Ringwald so at least some Broadcom models support multiple concurrent LE roles. 54*35e00af0SMatthias Ringwald 55*35e00af0SMatthias Ringwald## Broadcom 56*35e00af0SMatthias Ringwald 57*35e00af0SMatthias RingwaldBefore the Broadcom Wifi+Bluetooth division was taken over by Cypress Semiconductor, it was not possible to buy Broadcom chipset in low quantities. However, 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. 58*35e00af0SMatthias 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 Rasperry Pi models. 59*35e00af0SMatthias Ringwald 60*35e00af0SMatthias RingwaldThe best source for documentation so far has been the source code for blueZ and the Bluedroid Bluetooth stack from Android. 61*35e00af0SMatthias Ringwald 62*35e00af0SMatthias RingwaldBroadcom USB dongles do not require special configuration, however SCO data is not routed over USB by default. 63*35e00af0SMatthias Ringwald 64*35e00af0SMatthias 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. 65*35e00af0SMatthias Ringwald 66*35e00af0SMatthias RingwaldTo find the correct file, Broadcom chipsets return their model number when asked for their local name. 67*35e00af0SMatthias Ringwald 68*35e00af0SMatthias RingwaldBTstack supports uploading of the init script for both variants: file lookup by name in the posix-h4 port and linking against the init script in the WICED port. 69*35e00af0SMatthias Ringwald 70*35e00af0SMatthias Ringwald**BD Addr** can be set with a custom command. A fixed addres is provided on some modules, e.g. the AP6212A, but not on others. 71*35e00af0SMatthias Ringwald 72*35e00af0SMatthias Ringwald**SCO data** can be configured with a custom command found in the bluez sources. We haven't been able to route SCO data over HCI yet. 73*35e00af0SMatthias Ringwald 74*35e00af0SMatthias Ringwald**Baud rate** can be set with custom command. It is reset during the warm start after uploading the init script. 75*35e00af0SMatthias Ringwald 76*35e00af0SMatthias 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. 77*35e00af0SMatthias Ringwald 78*35e00af0SMatthias RingwaldSCO Data can not be routed over HCI, so HFP Wide-Band Speech is not supported currently. HSP and HFP Narrow Band Speech is supported via I2C/PCM pins. 79*35e00af0SMatthias Ringwald 80*35e00af0SMatthias Ringwald## CSR 81*35e00af0SMatthias Ringwald 82*35e00af0SMatthias RingwaldSimilar to Broadcom, the best source for documentation is the source code for blueZ. 83*35e00af0SMatthias Ringwald 84*35e00af0SMatthias RingwaldCSR USB dongles do not require special configuration and SCO data is routed over USB by default. 85*35e00af0SMatthias Ringwald 86*35e00af0SMatthias 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. 87*35e00af0SMatthias Ringwald 88*35e00af0SMatthias 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. 89*35e00af0SMatthias Ringwald 90*35e00af0SMatthias 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. 91*35e00af0SMatthias Ringwald 92*35e00af0SMatthias Ringwald**Baud rate** can be set as part of the initial configuration and gets active by the warm reset. 93*35e00af0SMatthias Ringwald 94*35e00af0SMatthias 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. 95*35e00af0SMatthias Ringwald 96*35e00af0SMatthias 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. 97*35e00af0SMatthias Ringwald 98*35e00af0SMatthias Ringwald 99*35e00af0SMatthias Ringwald## Dialog Semiconductor 100*35e00af0SMatthias Ringwald 101*35e00af0SMatthias RingwaldDialog Semiconductor offers the DA14581, a LE-only SoC, that can be programmed with an HCI firmware. The HCI firmware can be uploaded on boot into SRAM or stored in the OTP (One-time programmable) memory, or in an external SPI. 102*35e00af0SMatthias Ringwald 103*35e00af0SMatthias RingwaldWe just ordered a Dev Kit and will try to implement the firmware upload to SRAM option. This chipset supports the Bluetooth 4.2. specification but does not seem to implement the Data Length Extension nor supports multiple concurrent roles. 104*35e00af0SMatthias Ringwald 105*35e00af0SMatthias Ringwald## EM Microelectronic Marin 106*35e00af0SMatthias Ringwald 107*35e00af0SMatthias 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. 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 exension to implement flow control and signal if the EM9301 has data to send. 108*35e00af0SMatthias Ringwald 109*35e00af0SMatthias Ringwald**Update:** EM has just announced a new EM9304 that also features an HCI mode and supports the Bluetooth 4.2. specification. It seems to support the Data Length Extension but not and multiple concurrent roles. 110*35e00af0SMatthias Ringwald 111*35e00af0SMatthias Ringwald**BD Addr** must be set during startup since it does not have a stored fix address. 112*35e00af0SMatthias Ringwald 113*35e00af0SMatthias Ringwald**SCO data** is not supported since it is LE only. 114*35e00af0SMatthias Ringwald 115*35e00af0SMatthias Ringwald**Baud rate** could be set for UART mode. For SPI, the master controls the speed via the SPI Clock line. 116*35e00af0SMatthias Ringwald 117*35e00af0SMatthias Ringwald**Init scripts** are not required although it is possible to upload small firmware patches. 118*35e00af0SMatthias Ringwald 119*35e00af0SMatthias Ringwald**BTstack integration**: The common code for the EM9301 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. 120*35e00af0SMatthias Ringwald 121*35e00af0SMatthias Ringwald 122*35e00af0SMatthias Ringwald## Nordic nRF5 series 123*35e00af0SMatthias Ringwald 124*35e00af0SMatthias RingwaldThe Single-Mode LE chipsets from the Nordic nRF5 series chipsets 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 usually. Since the chipset can be programmed, it can also be loaded with a firmware that provides a regular HCI H4 interface for a Host. 125*35e00af0SMatthias Ringwald 126*35e00af0SMatthias 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. 127*35e00af0SMatthias Ringwald 128*35e00af0SMatthias RingwaldBoth nRF5 series, the nRF51 and the nRF52, can be used with an HCI firmware. The HCI firmware does not support the Data Length Extension yet, but this will be supported soon. Also, the nRF51 does not support encryted connections at the moment (November 18th, 2016) although this might become supported as well. 129*35e00af0SMatthias Ringwald 130*35e00af0SMatthias 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. 131*35e00af0SMatthias Ringwald 132*35e00af0SMatthias Ringwald**SCO data** is not supported since it is LE only. 133*35e00af0SMatthias Ringwald 134*35e00af0SMatthias Ringwald**Baud rate** is fixed to 115200 at the moment althouth the firmware could be extended to support a baud rate change. 135*35e00af0SMatthias Ringwald 136*35e00af0SMatthias Ringwald**Init script** is not required. 137*35e00af0SMatthias Ringwald 138*35e00af0SMatthias Ringwald**BTstack integration**: No special chipset driver is provided. In order to use the random static address, the provided patch stores this address as the (invalid) public address that is returned by the HCI Read BD Addr command. When BTstack detects that it is a Nordic chipset, it automatically uses this address as random static address - unless the app chooses to use private addresses. 139*35e00af0SMatthias Ringwald 140*35e00af0SMatthias RingwaldTo use these chipsets with BTstack, you need to install an arm-none-eabi gcc toolchain and the nRF5x Command Line Tools incl. the J-Link drivers, checkout the Zephyr project, apply a minimal patch to help with using a random static address, and flash it onto the chipset: 141*35e00af0SMatthias Ringwald 142*35e00af0SMatthias Ringwald * Install [J-Link Software and documentation pack](https://www.segger.com/jlink-software.html). 143*35e00af0SMatthias Ringwald * Get nrfjprog as part of the [nRFx-Command-Line-Tools](http://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF52-DK). Click on Downloads tab on the top and look for your OS. 144*35e00af0SMatthias Ringwald * [Checkout Zephry and install toolchain](https://www.zephyrproject.org/doc/getting_started/getting_started.html). We recommend using the [arm-non-eabi gcc binaries](https://launchpad.net/gcc-arm-embedded) instead of compiling it yourself. At least on OS X, this failed for us. 145*35e00af0SMatthias Ringwald * Download our [patch](https://raw.githubusercontent.com/bluekitchen/btstack/develop/port/nrf5-zephyr/hci_firmware.patch) into the Zephry root folder and apply it there: 146*35e00af0SMatthias Ringwald 147*35e00af0SMatthias Ringwald<!-- --> 148*35e00af0SMatthias Ringwald $ patch -p1 < hci_firmware.patch 149*35e00af0SMatthias Ringwald 150*35e00af0SMatthias Ringwald * In *samples/bluetooth/hci_uart* compile the firmware for nRF52 Dev Kit 151*35e00af0SMatthias Ringwald 152*35e00af0SMatthias Ringwald<!-- --> 153*35e00af0SMatthias Ringwald 154*35e00af0SMatthias Ringwald $ make BOARD=nrf52_pca10040 155*35e00af0SMatthias Ringwald 156*35e00af0SMatthias Ringwald * Upload the firmware 157*35e00af0SMatthias Ringwald 158*35e00af0SMatthias Ringwald $ ./flash_nrf52_pca10040.sh 159*35e00af0SMatthias Ringwald 160*35e00af0SMatthias Ringwald * For the nRF51 Dev Kit, use `make BOARD=nrf51_pca10028` and `./flash_nrf51_10028.sh` with the nRF51 kit. 161*35e00af0SMatthias Ringwald * The nRF5 dev kit acts as an LE HCI Controller with H4 interface. 162*35e00af0SMatthias Ringwald 163*35e00af0SMatthias Ringwald## STMicroelectronics 164*35e00af0SMatthias Ringwald 165*35e00af0SMatthias RingwaldSTMicroelectronics offers the Bluetooth V2.1 + EDR chipset STLC2500D that supports SPI and UART H4 connection. 166*35e00af0SMatthias Ringwald 167*35e00af0SMatthias Ringwald**BD Addr** can be set with custom command alhough all chipsets have an official address stored. 168*35e00af0SMatthias Ringwald 169*35e00af0SMatthias Ringwald**SCO data** might work. We didn't try. 170*35e00af0SMatthias Ringwald 171*35e00af0SMatthias Ringwald**Baud rate** can be set with custom command. 172*35e00af0SMatthias Ringwald 173*35e00af0SMatthias Ringwald**Init scripts** are not required although it is possible to upload firmware patches. 174*35e00af0SMatthias Ringwald 175*35e00af0SMatthias 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. 176*35e00af0SMatthias Ringwald 177*35e00af0SMatthias Ringwald 178*35e00af0SMatthias Ringwald 179*35e00af0SMatthias Ringwald## Texas Instruments CC256x series 180*35e00af0SMatthias Ringwald 181*35e00af0SMatthias RingwaldThe Texas Instruments CC256x series is currently in its third iteration and provides a Classic-only (CC2560), a Dual-mode (CC2564), and a Classic + ANT model (CC2567). 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. 182*35e00af0SMatthias Ringwald 183*35e00af0SMatthias RingwaldThe CC256x chipset is connected via an UART connection and supports the H4, H5 (since third iteration), and eHCILL. 184*35e00af0SMatthias Ringwald 185*35e00af0SMatthias Ringwald**SCO data** is routed to the I2S/PCM interface but can be configured with the [HCI_VS_Write_SCO_Configuration](http://processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_Write_SCO_Configuration_.280xFE10.29) command. 186*35e00af0SMatthias Ringwald 187*35e00af0SMatthias Ringwald**Baud rate** can be set with [HCI_VS_Update_UART_HCI_Baudrate](http://processors.wiki.ti.com/index.php/CC256x_VS_HCI_Commands#HCI_VS_Update_UART_HCI_Baudrate_.280xFF36.29) 188*35e00af0SMatthias Ringwald 189*35e00af0SMatthias Ringwald**BD Addr** can be set with [HCI_VS_Write_BD_Addr](2.2.1 HCI_VS_Write_BD_Addr (0xFC06)) although all chipsets have an official address stored. 190*35e00af0SMatthias Ringwald 191*35e00af0SMatthias 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. 192*35e00af0SMatthias Ringwald 193*35e00af0SMatthias RingwaldThe Makefile at *chipset/cc256x/Makefile* is able to automatically download and convert the requested file. It does this by: 194*35e00af0SMatthias Ringwald 195*35e00af0SMatthias Ringwald- Downloading one or more [BTS files](http://processors.wiki.ti.com/index.php/CC256x_Downloads) for your chipset. 196*35e00af0SMatthias Ringwald- Running running the Python script: 197*35e00af0SMatthias Ringwald 198*35e00af0SMatthias Ringwald<!-- --> 199*35e00af0SMatthias Ringwald 200*35e00af0SMatthias Ringwald ./convert_bts_init_scripts.py 201*35e00af0SMatthias Ringwald 202*35e00af0SMatthias Ringwald**Update:** For the latest revision of the CC256x chipsets, the CC2560B 203*35e00af0SMatthias Ringwaldand CC2564B, TI decided to split the init script into a main part and 204*35e00af0SMatthias Ringwaldthe BLE part. The conversion script has been updated to detect 205*35e00af0SMatthias Ringwald*bluetooth_init_cc256x_1.2.bts* and adds *BLE_init_cc256x_1.2.bts* 206*35e00af0SMatthias Ringwaldif present and merges them into a single .c file. 207*35e00af0SMatthias Ringwald 208*35e00af0SMatthias Ringwald**Update 2:** In May 2015, TI renamed the init scripts to match 209*35e00af0SMatthias Ringwaldthe naming scheme previously used on Linux systems. The conversion 210*35e00af0SMatthias Ringwaldscript has been updated to also detect *initscripts_TIInit_6.7.16_bt_spec_4.1.bts* 211*35e00af0SMatthias Ringwaldand integrates *initscripts_TIInit_6.7.16_ble_add-on.bts* if present. 212*35e00af0SMatthias Ringwald 213*35e00af0SMatthias Ringwald**BTstack integration**: 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_chiopset_t* instance and passed to *hci_init* function. 214*35e00af0SMatthias Ringwald 215*35e00af0SMatthias RingwaldSCO Data can be routed over HCI, so HFP Wide-Band Speech is supported. 216*35e00af0SMatthias Ringwald 217*35e00af0SMatthias Ringwald## Toshiba 218*35e00af0SMatthias Ringwald 219*35e00af0SMatthias RingwaldThe Toshiba TC35661 Dual-Mode chipset is available in 3 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. 220*35e00af0SMatthias Ringwald 221*35e00af0SMatthias RingwaldWe've tried their USB Evaluation Stick that contains an USB-to-UART adapter and the PAN1026 module that contains the TC35661 -501. We have been told by our distributor that the -501 variant also supports the HCI interface. However, while our tests have shown that Classic Bluetooth with SPP works fine with this variant, none of the LE commands work. 222*35e00af0SMatthias Ringwald 223*35e00af0SMatthias Ringwald**SCO data** might work. We didn't try. 224*35e00af0SMatthias Ringwald 225*35e00af0SMatthias Ringwald**Baud rate** can be set with custom command. 226*35e00af0SMatthias Ringwald 227*35e00af0SMatthias Ringwald**BD Addr ** must be set with custom command. It does not have a stored valid public BD Addr. 228*35e00af0SMatthias Ringwald 229*35e00af0SMatthias Ringwald**Init Script** is not required. A patch file might be uploaded. 230*35e00af0SMatthias Ringwald 231*35e00af0SMatthias 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 to set the BD Addr during startup. 232