…
|
||
---|---|---|
.. | ||
Drivers | ||
example | ||
Inc | ||
port | ||
Src | ||
startup | ||
.gitignore | ||
CMakeLists.txt | ||
Makefile | ||
ozone.jdebug | ||
README.md | ||
startup_stm32l451xx.s | ||
stm32-l451-miromico-sx1280.ioc | ||
STM32L451REIx_FLASH.ld |
BTstack Port with Cinnamon for Semtech SX1280 Controller on Miromico FMLR-80
Cinnamon is BlueKitchen's minimal, yet robust Controller/Link Layer implementation for use with BTstack.
In contrast to common Link Layer implementations, our focus is on a robust and compact implementation for production use, where code size matters (e.g. current code size about 8 kB).
Overview
This 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.
It 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.
Status
Tested with the Miromico FMLR-80-P-STL4E module and our SX1280 Shield - see (port/stm32-l476rg-nucleo-sx1280). On the FMLR-80-P-STL4E module, the 52 Mhz clock for the SX1280 is controlled by the MCU.
SEGGER RTT is used for debug output, so a Segger J-Link programmer is required.
Uses 32.768 kHz crytstal as LSE for timing
Support for Broadcast and Peripheral roles.
The Makefile project compiles gatt_counter, gatt_streamer_server, hog_mouse and hog_keyboard examples.
Limitation
Advertising State:
- Only Connectable Advertising supported
- Only fixed public BD_ADDR of 33:33:33:33:33:33 is used
Connection State:
- Encryption not implemented
- Some LL PDUs not supported
Central Role:
- Not implemented
Observer Role:
- Not implemented
Low power mode - basically not implemented:
- MCU does not sleep
- SPI could be disabled during sleep
- 1 ms SysTick is used for host stack although 16-bit tick time is provided by LPTIM1 based on 32768 Hz LSE.
Getting Started
For the FMLR-80-P-STL4E module, just run make. You can upload the EXAMPLE.elf file created in build folder, e.g. with Ozone using the provided EXAMPLE.jdebug, and run it.
TODO
General
- indicate random address in advertising pdus
- allow to set random BD_ADDR via HCI command and use in Advertisements
- support other regular adv types
- handle Encryption
Low Power
- enter STANDY_RC mode when idle
- implement MCU sleep (if next wakeup isn't immediate)
- sleep after connection request until first packet from Central
- replace SysTick with tick counter based on LPTIM1
- disable SPI on MCU sleep