1*2fd737d3SMatthias Ringwald# Experimental port for Semtech SX1280 2.4 GHz Multi Protocol Controller 2*2fd737d3SMatthias Ringwald 3*2fd737d3SMatthias Ringwald## Overview 4*2fd737d3SMatthias Ringwald 5*2fd737d3SMatthias RingwaldThis 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. 6*2fd737d3SMatthias Ringwald 7*2fd737d3SMatthias RingwaldIt 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. 8*2fd737d3SMatthias Ringwald 9*2fd737d3SMatthias Ringwald## Status 10*2fd737d3SMatthias Ringwald 11*2fd737d3SMatthias RingwaldOnly 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. 12*2fd737d3SMatthias Ringwald 13*2fd737d3SMatthias RingwaldSegger RTT is used for debug output, so a Segger J-Link programmer is required. 14*2fd737d3SMatthias Ringwald 15*2fd737d3SMatthias RingwaldUses 32.768 kHz crytstal as LSE for timing 16*2fd737d3SMatthias Ringwald 17*2fd737d3SMatthias RingwaldSupport for Broadcaster and Peripheral roles. 18*2fd737d3SMatthias Ringwald 19*2fd737d3SMatthias RingwaldThe Makefile project compiles gatt_counter, gatt_streamer_server, hog_mouse and hog_keyboard examples. 20*2fd737d3SMatthias Ringwald 21*2fd737d3SMatthias Ringwald## Limitation 22*2fd737d3SMatthias Ringwald 23*2fd737d3SMatthias Ringwald### Advertising State: 24*2fd737d3SMatthias Ringwald- Only Connectable Advertising supported 25*2fd737d3SMatthias Ringwald- Only fixed public BD_ADDR of 33:33:33:33:33:33 is used 26*2fd737d3SMatthias Ringwald- Scan response not supported 27*2fd737d3SMatthias Ringwald 28*2fd737d3SMatthias Ringwald### Connection State: 29*2fd737d3SMatthias Ringwald- Only a single packet is sent in each Connection Interval 30*2fd737d3SMatthias Ringwald- Encryption not implemented 31*2fd737d3SMatthias Ringwald- Some LL PDUs not supported 32*2fd737d3SMatthias Ringwald 33*2fd737d3SMatthias Ringwald### Central Role: 34*2fd737d3SMatthias Ringwald- Not implemented 35*2fd737d3SMatthias Ringwald 36*2fd737d3SMatthias Ringwald### Observer Role: 37*2fd737d3SMatthias Ringwald- Not implemented 38*2fd737d3SMatthias Ringwald 39*2fd737d3SMatthias Ringwald### Low power mode - basically not implemented: 40*2fd737d3SMatthias Ringwald- MCU does not sleep 41*2fd737d3SMatthias Ringwald- SPI could be disabled during sleep 42*2fd737d3SMatthias Ringwald- 1 ms SysTick is used for host stack although 64-bit tick time is provided from LPTIM1 43*2fd737d3SMatthias Ringwald 44*2fd737d3SMatthias Ringwald## Getting Started 45*2fd737d3SMatthias Ringwald 46*2fd737d3SMatthias RingwaldFor the FMLR-80-P-STL4E module, just run make. You can upload the EXAMPLE.elf file created in build folder, 47*2fd737d3SMatthias Ringwalde.g. with Ozone using the provided EXAMPLE.jdebug, and run it. 48*2fd737d3SMatthias Ringwald 49*2fd737d3SMatthias Ringwald## TODO 50*2fd737d3SMatthias Ringwald 51*2fd737d3SMatthias Ringwald### General 52*2fd737d3SMatthias Ringwald- multiple packets per connection interval 53*2fd737d3SMatthias Ringwald- indicate random address in advertising pdus 54*2fd737d3SMatthias Ringwald- allow to set random BD_ADDR via HCI command 55*2fd737d3SMatthias Ringwald- support other adv types 56*2fd737d3SMatthias Ringwald- support scan requests 57*2fd737d3SMatthias Ringwald- handle Encryption 58*2fd737d3SMatthias Ringwald 59*2fd737d3SMatthias Ringwald## Low Power 60*2fd737d3SMatthias Ringwald- enter STANDY_RC mode when idle 61*2fd737d3SMatthias Ringwald- implement MCU sleep (if next wakeup isn't immediate) 62*2fd737d3SMatthias Ringwald- sleep after connection request until first packet from Central 63*2fd737d3SMatthias Ringwald- replace SysTick with tick counter based on LPTIM1 64*2fd737d3SMatthias Ringwald- disable SPI on MCU sleep 65*2fd737d3SMatthias Ringwald 66