xref: /btstack/port/stm32-l451-miromico-sx1280/README.md (revision d42180bbda46eb526d460bdea01321837cb04af6)
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