1# BTstack port with Cinnamon for Semtech SX1280 2.4 GHz Multi Protocol Controller 2 3*Cinnamon* is BlueKitchen's minimal, yet robust Controller/Link Layer implementation for use with BTstack. 4 5In contrast to common Link Layer implementations, our focus is on a robust and compact implementation for production use, 6where code size matters (e.g. current code size about 8 kB). 7 8## Overview 9 10This port targets the Semtech SX1280 radio controller. The Host Stack and the Controller (incl. Link Layer) run on a STM32 MCU, with the SX1280 connected via SPI. 11 12It uses the SX1280 C-Driver from Semtech to communicate with the SX1280. The main modification was to the SPI driver that uses DMA for full packets. 13 14## Status 15 16Only tested with the Miromico FMLR-80-P-STL4E module so far. On this module, the 52 Mhz clock for the SX1280 is controlled by the MCU. 17 18SEGGER RTT is used for debug output, so a Segger J-Link programmer is required. 19 20Uses 32.768 kHz crytstal as LSE for timing 21 22Support for Broadcast and Peripheral roles. 23 24The Makefile project compiles gatt_counter, gatt_streamer_server, hog_mouse and hog_keyboard examples. 25 26## Limitation 27 28### Advertising State: 29- Only Connectable Advertising supported 30- Only fixed public BD_ADDR of 33:33:33:33:33:33 is used 31 32### Connection State: 33- Encryption not implemented 34- Some LL PDUs not supported 35 36### Central Role: 37- Not implemented 38 39### Observer Role: 40- Not implemented 41 42### Low power mode - basically not implemented: 43- MCU does not sleep 44- SPI could be disabled during sleep 45- 1 ms SysTick is used for host stack although 16-bit tick time is provided by LPTIM1 based on 32768 Hz LSE. 46 47## Getting Started 48 49For the FMLR-80-P-STL4E module, just run make. You can upload the EXAMPLE.elf file created in build folder, 50e.g. with Ozone using the provided EXAMPLE.jdebug, and run it. 51 52## TODO 53 54### General 55- indicate random address in advertising pdus 56- allow to set random BD_ADDR via HCI command and use in Advertisements 57- support other regular adv types 58- handle Encryption 59 60## Low Power 61- enter STANDY_RC mode when idle 62- implement MCU sleep (if next wakeup isn't immediate) 63- sleep after connection request until first packet from Central 64- replace SysTick with tick counter based on LPTIM1 65- disable SPI on MCU sleep 66 67