1c00c65faSMatthias 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. 235e00af0SMatthias Ringwald 3c00c65faSMatthias Ringwald## HCI Interface 4c00c65faSMatthias Ringwald 5c00c65faSMatthias 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. 635e00af0SMatthias Ringwald 77a656c79SMatthias Ringwald{#fig:HostChipsetConnection} 835e00af0SMatthias Ringwald 9c00c65faSMatthias Ringwald### HCI H2 10c00c65faSMatthias 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. 11c00c65faSMatthias Ringwald 1235e00af0SMatthias RingwaldOn embedded systems, UART connections are used instead, although USB could be used as well. 1335e00af0SMatthias Ringwald 14c00c65faSMatthias RingwaldFor UART connections, different transport layer variants exist. 1535e00af0SMatthias Ringwald 16c00c65faSMatthias Ringwald### HCI H4 17c00c65faSMatthias 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. 18c00c65faSMatthias Ringwald 19c00c65faSMatthias Ringwald### HCI H5 20c00c65faSMatthias 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. 21c00c65faSMatthias Ringwald 22daa2e90cSMatthias Ringwald### BCSP 23daa2e90cSMatthias 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* 24daa2e90cSMatthias Ringwald 25c00c65faSMatthias Ringwald### eHCILL 26c00c65faSMatthias 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. 27c00c65faSMatthias Ringwald 28c00c65faSMatthias Ringwald### HCI Shortcomings 2935e00af0SMatthias Ringwald 3035e00af0SMatthias RingwaldUnfortunately, the HCI standard misses a few relevant details: 3135e00af0SMatthias Ringwald 32c00c65faSMatthias 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. 3335e00af0SMatthias Ringwald 3435e00af0SMatthias 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. 3535e00af0SMatthias Ringwald 3635e00af0SMatthias 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. 3735e00af0SMatthias Ringwald 38c00c65faSMatthias 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. 3935e00af0SMatthias Ringwald 40c00c65faSMatthias Ringwald## Documentation and Support 4135e00af0SMatthias RingwaldThe level of developer documentation and support varies widely between the various Bluetooth chipset providers. 4235e00af0SMatthias Ringwald 4335e00af0SMatthias 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. 4435e00af0SMatthias Ringwald 4535e00af0SMatthias 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. 4635e00af0SMatthias Ringwald 4735e00af0SMatthias RingwaldCSR, which has been acquired by Qualcomm, provides all relevant information on their Support website after signing an NDA. 4835e00af0SMatthias Ringwald 49c00c65faSMatthias Ringwald## Chipset Overview 50c00c65faSMatthias Ringwald 51439b93a1SMatthias RingwaldChipset | Type | HCI Transport | BD_ADDR (1) | SCO over HCI (2) | LE DLE | Multiple LE Roles | BTstack folder | Comment 5235e00af0SMatthias Ringwald-------------------- |-----------| ---------------|--------------|------------------|--------|----------------------|----------------|--------- 5365b6e0cdSMatthias RingwaldBroadcom UART | Dual mode | H4, H5 | Rarely | Probably (2) | No | Maybe (3) | bcm | Max UART baudrate 2 mbps 54d77060bdSMatthias RingwaldBroadcom USB Dongles | Dual mode | USB | Yes | Yes | No | No | bcm | 55daa2e90cSMatthias RingwaldCSR UART | Dual mode | H4, H5, BCSP | Rarely | No (didn't work) | No | No | csr | 5635e00af0SMatthias RingwaldCSR USB Dongles | Dual mode | USB | Mostly | Yes | No | No | csr | 5765b6e0cdSMatthias RingwaldDialog DA14581 | LE | H4, SPI | No | n.a. | No | No | da14581 | Official HCI firmware included in BTstack 5835e00af0SMatthias RingwaldEM 9301 | LE | SPI | No | n.a. | No | No | em9301 | Custom HCI SPI implementation 5935e00af0SMatthias RingwaldEM 9304 | LE | SPI, H4 | ? | n.a. | Yes | No | | Waiting for dev kit 6065b6e0cdSMatthias RingwaldNordic nRF | LE | H4 | Fixed Random | n.a. | Yes | Yes | | Requires custom HCI firmware 6135e00af0SMatthias RingwaldSTM STLC2500D | Classic | H4 | No | No (didn't try) | n.a | n.a. | stlc2500d | Custom deep sleep management not supported 6235e00af0SMatthias RingwaldToshiba TC35661 | Dual mode | H4 | No | No (didn't try) | No | No | tc3566 | HCI version not tested. See below 63439b93a1SMatthias RingwaldTI CC256x, WL183x | Dual mode | H4, H5, eHCILL | Yes | Yes | No | Yes for CC256XC | cc256x | Also WL185x, WL187x, and WL189x 6435e00af0SMatthias Ringwald 6535e00af0SMatthias Ringwald**Notes**: 6635e00af0SMatthias Ringwald 6765b6e0cdSMatthias Ringwald 1. BD_ADDR: Indciates if Bluetooth chipset compes with its own valid MAC Addess. Better Broadcom and CSR dongles usually come with a MAC address from the dongle manufacturer, but cheaper ones might come with identical addresses. 6835e00af0SMatthias 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. 69c00c65faSMatthias Ringwald 3. Multiple LE Roles: Apple uses Broadcom Bluetooth+Wifi in their iOS devices and newer iOS versions support multiple concurrent LE roles, 7035e00af0SMatthias Ringwald so at least some Broadcom models support multiple concurrent LE roles. 7135e00af0SMatthias Ringwald 7235e00af0SMatthias Ringwald## Broadcom 7335e00af0SMatthias Ringwald 7429c2a6e3SMatthias 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. 75c00c65faSMatthias 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. 7635e00af0SMatthias Ringwald 7729c2a6e3SMatthias 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. 7835e00af0SMatthias Ringwald 7935e00af0SMatthias RingwaldBroadcom USB dongles do not require special configuration, however SCO data is not routed over USB by default. 8035e00af0SMatthias Ringwald 8135e00af0SMatthias 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. 8235e00af0SMatthias Ringwald 8335e00af0SMatthias RingwaldTo find the correct file, Broadcom chipsets return their model number when asked for their local name. 8435e00af0SMatthias Ringwald 8594bb7abfSMatthias 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. 8635e00af0SMatthias Ringwald 87c00c65faSMatthias 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. 8835e00af0SMatthias Ringwald 8994bb7abfSMatthias 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. 9035e00af0SMatthias Ringwald 9129c2a6e3SMatthias 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. 9235e00af0SMatthias Ringwald 9335e00af0SMatthias 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. 9435e00af0SMatthias Ringwald 9594bb7abfSMatthias RingwaldSCO Data can be routed over HCI for both USB dongles and UART connections, however BTstack does not provide any form of flow control for UART connections. HSP and HFP Narrow Band Speech is supported via I2C/PCM pins. 9635e00af0SMatthias Ringwald 9735e00af0SMatthias Ringwald## CSR 9835e00af0SMatthias Ringwald 9935e00af0SMatthias RingwaldSimilar to Broadcom, the best source for documentation is the source code for blueZ. 10035e00af0SMatthias Ringwald 10135e00af0SMatthias RingwaldCSR USB dongles do not require special configuration and SCO data is routed over USB by default. 10235e00af0SMatthias Ringwald 10335e00af0SMatthias 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. 10435e00af0SMatthias Ringwald 10535e00af0SMatthias 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. 10635e00af0SMatthias Ringwald 10735e00af0SMatthias 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. 10835e00af0SMatthias Ringwald 10929c2a6e3SMatthias Ringwald**Baud rate** can be set as part of the initial configuration and gets actived by the warm reset. 11035e00af0SMatthias Ringwald 11135e00af0SMatthias 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. 11235e00af0SMatthias Ringwald 11335e00af0SMatthias 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. 11435e00af0SMatthias Ringwald 11535e00af0SMatthias Ringwald 11635e00af0SMatthias Ringwald## Dialog Semiconductor 11735e00af0SMatthias Ringwald 11829c2a6e3SMatthias RingwaldDialog Semiconductor offers the DA14581, an 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. 11935e00af0SMatthias Ringwald 120c240379eSMatthias RingwaldIT does not implement the Data Length Extension or supports multiple concurrent roles. 121c240379eSMatthias Ringwald 12265b6e0cdSMatthias 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. 12365b6e0cdSMatthias Ringwald 124c240379eSMatthias 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 using Dialog's HCI SDK. 125c240379eSMatthias Ringwald 12665b6e0cdSMatthias Ringwald**BTstack integration**: *btstack_chipset_da14581.c* contains the code to download the provided HCI firmware into the SRAM of the DA14581. After that, it can be used as any other HCI chipset. 12735e00af0SMatthias Ringwald 12835e00af0SMatthias Ringwald## EM Microelectronic Marin 12935e00af0SMatthias Ringwald 130c00c65faSMatthias 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 extension to implement flow control and signal if the EM9301 has data to send. 13135e00af0SMatthias Ringwald 13235e00af0SMatthias 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. 13335e00af0SMatthias Ringwald 13435e00af0SMatthias Ringwald**BD Addr** must be set during startup since it does not have a stored fix address. 13535e00af0SMatthias Ringwald 13635e00af0SMatthias Ringwald**SCO data** is not supported since it is LE only. 13735e00af0SMatthias Ringwald 13835e00af0SMatthias Ringwald**Baud rate** could be set for UART mode. For SPI, the master controls the speed via the SPI Clock line. 13935e00af0SMatthias Ringwald 14035e00af0SMatthias Ringwald**Init scripts** are not required although it is possible to upload small firmware patches. 14135e00af0SMatthias Ringwald 14235e00af0SMatthias 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. 14335e00af0SMatthias Ringwald 14435e00af0SMatthias Ringwald 14535e00af0SMatthias Ringwald## Nordic nRF5 series 14635e00af0SMatthias Ringwald 14735e00af0SMatthias 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. 14835e00af0SMatthias Ringwald 14935e00af0SMatthias 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. 15035e00af0SMatthias Ringwald 151c00c65faSMatthias 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 encrypted connections at the moment (November 18th, 2016) although this might become supported as well. 15235e00af0SMatthias Ringwald 15335e00af0SMatthias 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. 15435e00af0SMatthias Ringwald 15535e00af0SMatthias Ringwald**SCO data** is not supported since it is LE only. 15635e00af0SMatthias Ringwald 157c00c65faSMatthias Ringwald**Baud rate** is fixed to 115200 by the patch although the firmware could be extended to support a baud rate change. 15835e00af0SMatthias Ringwald 15935e00af0SMatthias Ringwald**Init script** is not required. 16035e00af0SMatthias Ringwald 16135e00af0SMatthias 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. 16235e00af0SMatthias Ringwald 16335e00af0SMatthias 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: 16435e00af0SMatthias Ringwald 16535e00af0SMatthias Ringwald * Install [J-Link Software and documentation pack](https://www.segger.com/jlink-software.html). 16635e00af0SMatthias 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. 16729c2a6e3SMatthias Ringwald * [Checkout Zephyr 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. 16829c2a6e3SMatthias Ringwald * Download our [patch](https://raw.githubusercontent.com/bluekitchen/btstack/develop/port/nrf5-zephyr/hci_firmware.patch) into the Zephyr root folder and apply it there: 16935e00af0SMatthias Ringwald 17035e00af0SMatthias Ringwald<!-- --> 17135e00af0SMatthias Ringwald $ patch -p1 < hci_firmware.patch 17235e00af0SMatthias Ringwald 17335e00af0SMatthias Ringwald * In *samples/bluetooth/hci_uart* compile the firmware for nRF52 Dev Kit 17435e00af0SMatthias Ringwald 17535e00af0SMatthias Ringwald<!-- --> 17635e00af0SMatthias Ringwald 17735e00af0SMatthias Ringwald $ make BOARD=nrf52_pca10040 17835e00af0SMatthias Ringwald 17935e00af0SMatthias Ringwald * Upload the firmware 18035e00af0SMatthias Ringwald 18135e00af0SMatthias Ringwald $ ./flash_nrf52_pca10040.sh 18235e00af0SMatthias Ringwald 18335e00af0SMatthias Ringwald * For the nRF51 Dev Kit, use `make BOARD=nrf51_pca10028` and `./flash_nrf51_10028.sh` with the nRF51 kit. 18435e00af0SMatthias Ringwald * The nRF5 dev kit acts as an LE HCI Controller with H4 interface. 18535e00af0SMatthias Ringwald 18635e00af0SMatthias Ringwald## STMicroelectronics 18735e00af0SMatthias Ringwald 18835e00af0SMatthias RingwaldSTMicroelectronics offers the Bluetooth V2.1 + EDR chipset STLC2500D that supports SPI and UART H4 connection. 18935e00af0SMatthias Ringwald 190c00c65faSMatthias Ringwald**BD Addr** can be set with custom command although all chipsets have an official address stored. 19135e00af0SMatthias Ringwald 19235e00af0SMatthias Ringwald**SCO data** might work. We didn't try. 19335e00af0SMatthias Ringwald 19429c2a6e3SMatthias 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. 19535e00af0SMatthias Ringwald 19635e00af0SMatthias Ringwald**Init scripts** are not required although it is possible to upload firmware patches. 19735e00af0SMatthias Ringwald 19835e00af0SMatthias 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. 19935e00af0SMatthias Ringwald 20035e00af0SMatthias Ringwald 20135e00af0SMatthias Ringwald 20235e00af0SMatthias Ringwald## Texas Instruments CC256x series 20335e00af0SMatthias Ringwald 2044f537631SMatthias 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. 20535e00af0SMatthias Ringwald 20635e00af0SMatthias RingwaldThe CC256x chipset is connected via an UART connection and supports the H4, H5 (since third iteration), and eHCILL. 20735e00af0SMatthias Ringwald 208439b93a1SMatthias RingwaldThe latest generation CC256xC chipsets support multiple LE roles in parallel. 209439b93a1SMatthias Ringwald 2104f537631SMatthias 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 main CC256x series. 2114f537631SMatthias Ringwald 2124f537631SMatthias RingwaldChipset | LMP Subversion | AKA 21348093f19SMatthias Ringwald--------|----------------|------- 2144f537631SMatthias RingwaldCC2560 | 0x191f | 6.2.31 2154f537631SMatthias RingwaldCC2560A, CC2564 | 0x1B0F | 6.6.15 2164f537631SMatthias RingwaldCC256xB | 0x1B90 | 6.7.16 2174f537631SMatthias RingwaldCC256xC | 0x9a1a | 6.12.26 2184f537631SMatthias Ringwald 21935e00af0SMatthias 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. 22035e00af0SMatthias Ringwald 221*39e7ee9fSMatthias 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). 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. 222*39e7ee9fSMatthias Ringwald 223*39e7ee9fSMatthias 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. If this happens, BTstack provides a workaround in the HCI H4 transport implementation by adding #define ENABLE_CC256X_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND to your btstack_config.h. If 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. When detected, it will tweak the next UART read to expect the HCI Command Complete event. 22471aad618SMatthias Ringwald 2254e94d79fSMatthias 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. 2264e94d79fSMatthias Ringwald 2274e94d79fSMatthias 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. 2284e94d79fSMatthias Ringwald 2294e94d79fSMatthias RingwaldThe Makefile at *chipset/cc256x/Makefile.inc* is able to automatically download and convert the requested file. It does this by: 2304e94d79fSMatthias Ringwald 2314e94d79fSMatthias Ringwald- Downloading one or more [BTS files](http://processors.wiki.ti.com/index.php/CC256x_Downloads) for your chipset. 2324e94d79fSMatthias Ringwald- Running the Python script: 2334e94d79fSMatthias Ringwald 2344e94d79fSMatthias Ringwald<!-- --> 2354e94d79fSMatthias Ringwald 2364e94d79fSMatthias Ringwald ./convert_bts_init_scripts.py main.bts [ble_add_on.bts] output_file.c 2374e94d79fSMatthias Ringwald 2384e94d79fSMatthias 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_chipset_t* instance and passed to *hci_init* function. *btstack_chipset_cc256x_lmp_subversion* provides the LMP Subversion for the selected init script. 2394e94d79fSMatthias Ringwald 2404e94d79fSMatthias RingwaldSCO Data can be routed over HCI, so HFP Wide-Band Speech is supported. 2414e94d79fSMatthias Ringwald 24235e00af0SMatthias Ringwald## Toshiba 24335e00af0SMatthias Ringwald 24429c2a6e3SMatthias 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. 24535e00af0SMatthias Ringwald 24635e00af0SMatthias 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. 24735e00af0SMatthias Ringwald 24835e00af0SMatthias Ringwald**SCO data** might work. We didn't try. 24935e00af0SMatthias Ringwald 25035e00af0SMatthias Ringwald**Baud rate** can be set with custom command. 25135e00af0SMatthias Ringwald 25235e00af0SMatthias Ringwald**BD Addr ** must be set with custom command. It does not have a stored valid public BD Addr. 25335e00af0SMatthias Ringwald 25435e00af0SMatthias Ringwald**Init Script** is not required. A patch file might be uploaded. 25535e00af0SMatthias Ringwald 25629c2a6e3SMatthias 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. 257