btstack/port/stm32-l451-miromico-sx1280
2020-10-05 12:48:31 +02:00
..
Drivers
Inc
port ports: remove memory config for classic where classic is not enabled 2020-10-05 12:48:31 +02:00
Src
startup
.gitignore
CMakeLists.txt
Makefile
ozone.jdebug
README.md
startup_stm32l451xx.s
stm32-l451-miromico-sx1280.ioc
STM32L451REIx_FLASH.ld

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 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
  • Scan response not supported

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 EXAMPLE.elf file created in build folder, e.g. with Ozone using the provided EXAMPLE.jdebug, and run it.

TODO

General

  • multiple packets per connection interval
  • indicate random address in advertising pdus
  • allow to set random BD_ADDR via HCI command
  • support other adv types
  • support scan requests
  • 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