Experimental port for Semtech SX1280 2.4 GHz Multi Protocol Controller
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 provide an optimized polling SPI driver that is faster then the one provided by STM32CubeMX.
Status
Only 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.
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 Broadcaster and Peripheral roles.
The current Makefile project compiles the gatt_counter.c example.
Limitation
Advertising State:
- Only advertises on Channel 37
- Advertises as fast as possible, back to back
- Only Connectable Advertising supported
- Only fixed public BD_ADDR of 33:33:33:33:33:33 is used
Connection State:
- Only a single packet is sent in each Connection Interval
- 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 64-bit tick time is provided from LPTIM1
Getting Started
For the FMLR-80-P-STL4E module, just run make. You can upload the .elf file created in build folder e.g. with Ozone using the provided stm32-sx1280.jdebug and run it.
TODO
General
- advertise on all configured channels
- only advertise with advertising interval
- indicate random address in adertising pdus
- allow to set random BD_ADDR via HCI command
- handle Connection Param Update
- multiple packets per connection interval
- 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