Semtech SX1272 and SX1276 radios driver¶
Driver for Semtech SX1272 and SX1276 radios.
This module contains the driver for radio devices of the Semtech SX127x series (SX1272 and SX1276). Only LoRa long range modem is supported at the moment.
SX127x modules are designed to be used in the ISM radio frequency (RF) band. This RF band depends on different regional regulations worldwide. Be careful to configure the device to use a RF frequency allowed in your region. Here is the list of allowed frequencies for your region (see LoRaWAN regional parameters document available online):
- Europe has 2 allowed bands (ETSI):
- EU863-870
- EU433 (from 433.175MHZ to 434.665MHZ exactly)
- US is US902-928
- China has 2 allowed bands:
- CN779-787 (from 779.5MHz to 786.5MHz exactly)
- CN470-510 (from 470.3MHz to 509.7MHz exactly)
- Australia is AU915-928
- South asia, AS923:
- Bruneï [923-925 MHz]
- Cambodia [923-925 MHz]
- Hong Kong [920-925 MHz]
- Indonesia [923-925 MHz]
- Japan [920-928 MHz]
- Laos [923-925 MHz]
- New Zealand [915-928 MHz]
- Singapore [920-925 MHz]
- Taiwan [922-928 MHz]
- Thailand [920-925 MHz]
- Vietnam [920-925 MHz]
- South Korea: KR920-923 (from 920.9MHz to 923.3MHz exactly)
For more information on Semtech SX1272 and SX1276 modules see:
-
SX127X_MODEM_DEFAULT
¶ Use LoRa as default modem.
1
(SX127X_MODEM_LORA)
-
SX127X_CHANNEL_DEFAULT
¶ Default channel frequency, 868.3MHz (Europe)
1
(868300000UL)
-
SX127X_HF_CHANNEL_DEFAULT
¶ Use to calibrate RX chain for LF and HF bands.
1
(868000000UL)
-
SX127X_RF_MID_BAND_THRESH
¶ Mid-band threshold.
1
(525000000UL)
-
SX127X_XTAL_FREQ
¶ Internal oscillator frequency, 32MHz.
1
(32000000UL)
-
SX127X_RADIO_WAKEUP_TIME
¶ In microseconds [us].
1
(1000U)
-
SX127X_TX_TIMEOUT_DEFAULT
¶ TX timeout, 30s.
1
(1000U * 1000U * 30UL)
-
SX127X_RX_SINGLE
¶ Single byte receive mode => continuous by default.
1
(false)
-
SX127X_RX_BUFFER_SIZE
¶ RX buffer size.
1
(256)
-
SX127X_RADIO_TX_POWER
¶ Radio power in dBm.
1
(14U)
-
SX127X_EVENT_HANDLER_STACK_SIZE
¶ Stack size event handler.
1
(2048U)
-
SX127X_IRQ_DIO0
¶ DIO0 IRQ.
1
(1<<0)
-
SX127X_IRQ_DIO1
¶ DIO1 IRQ.
1
(1<<1)
-
SX127X_IRQ_DIO2
¶ DIO2 IRQ.
1
(1<<2)
-
SX127X_IRQ_DIO3
¶ DIO3 IRQ.
1
(1<<3)
-
SX127X_IRQ_DIO4
¶ DIO4 IRQ.
1
(1<<4)
-
SX127X_IRQ_DIO5
¶ DIO5 IRQ.
1
(1<<5)
-
SX127X_LOW_DATARATE_OPTIMIZE_FLAG
¶ 1
(1 << 0)
-
SX127X_ENABLE_FIXED_HEADER_LENGTH_FLAG
¶ 1
(1 << 1)
-
SX127X_ENABLE_CRC_FLAG
¶ 1
(1 << 2)
-
SX127X_CHANNEL_HOPPING_FLAG
¶ 1
(1 << 3)
-
SX127X_IQ_INVERTED_FLAG
¶ 1
(1 << 4)
-
SX127X_RX_CONTINUOUS_FLAG
¶ 1
(1 << 5)
-
enum
@160
¶ - SX127X_INIT_OK
= 0
- Initialization was successful.
- SX127X_ERR_SPI
- Failed to initialize SPI bus or CS line.
- SX127X_ERR_GPIOS
- Failed to initialize GPIOs.
- SX127X_ERR_NODEV
- No valid device version found.
- SX127X_INIT_OK
-
enum
@161
¶ - SX127X_MODEM_FSK
= 0
- FSK modem driver.
- SX127X_MODEM_LORA
- LoRa modem driver.
- SX127X_MODEM_FSK
-
enum
@162
¶ - SX127X_RF_IDLE
= 0
- Idle state.
- SX127X_RF_RX_RUNNING
- Sending state.
- SX127X_RF_TX_RUNNING
- Receiving state.
- SX127X_RF_CAD
- Channel activity detection state.
- SX127X_RF_IDLE
-
enum
@163
¶ - SX127X_RX_DONE
= 0
- Receiving complete.
- SX127X_TX_DONE
- Sending complete.
- SX127X_RX_TIMEOUT
- Receiving timeout.
- SX127X_TX_TIMEOUT
- Sending timeout.
- SX127X_RX_ERROR_CRC
- Receiving CRC error.
- SX127X_FHSS_CHANGE_CHANNEL
- Channel change.
- SX127X_CAD_DONE
- Channel activity detection complete.
- SX127X_RX_DONE
-
enum
@164
¶ - SX127X_PA_RFO
= 0
- RFO HF or RFO LF.
- SX127X_PA_BOOST
- Power amplifier boost (high power)
- SX127X_PA_RFO
-
uint8_t
sx127x_flags_t
¶ SX127X IRQ flags.
-
void()
sx127x_dio_irq_handler_t
()¶ Hardware IO IRQ callback function definition.
-
void
sx127x_setup
(sx127x_t * dev, const sx127x_params_t * params)¶ Setup the SX127X.
Parameters
dev: Device descriptor params: Parameters for device initialization
-
int
sx127x_reset
(const sx127x_t * dev)¶ Resets the SX127X.
Parameters
dev: The sx127x device descriptor
-
int
sx127x_init
(sx127x_t * dev)¶ Initializes the transceiver.
Parameters
dev: The sx127x device descriptor Return values
- result of initialization
-
void
sx127x_init_radio_settings
(sx127x_t * dev)¶ Initialize radio settings with default values.
Parameters
dev: The sx127x device pointer
-
uint32_t
sx127x_random
(sx127x_t * dev)¶ Generates 32 bits random value based on the RSSI readings.
Parameters
dev: The sx127x device structure pointer Return values
- random 32 bits value
-
void
sx127x_start_cad
(sx127x_t * dev)¶ Start a channel activity detection.
Parameters
dev: The sx127x device descriptor
-
bool
sx127x_is_channel_free
(sx127x_t * dev, uint32_t freq, int16_t rssi_threshold)¶ Checks that channel is free with specified RSSI threshold.
Parameters
dev: The sx127x device structure pointer freq: channel RF frequency rssi_threshold: RSSI threshold Return values
- true if channel is free, false otherwise
-
int16_t
sx127x_read_rssi
(const sx127x_t * dev)¶ Reads the current RSSI value.
Parameters
dev: The sx127x device structure pointer Return values
- the current value of RSSI (in dBm)
-
uint8_t
sx127x_get_state
(const sx127x_t * dev)¶ Gets current state of transceiver.
Parameters
dev: The sx127x device descriptor Return values
- radio state [RF_IDLE, RF_RX_RUNNING, RF_TX_RUNNING]
-
void
sx127x_set_state
(sx127x_t * dev, uint8_t state)¶ Sets current state of transceiver.
Parameters
dev: The sx127x device descriptor state: The new radio state Return values
- radio state [RF_IDLE, RF_RX_RUNNING, RF_TX_RUNNING]
-
void
sx127x_set_modem
(sx127x_t * dev, uint8_t modem)¶ Configures the radio with the given modem.
Parameters
dev: The sx127x device descriptor modem: Modem to be used [0: FSK, 1: LoRa]
-
uint8_t
sx127x_get_syncword
(const sx127x_t * dev)¶ Gets the synchronization word.
Parameters
dev: The sx127x device descriptor Return values
- The synchronization word
-
void
sx127x_set_syncword
(sx127x_t * dev, uint8_t syncword)¶ Sets the synchronization word.
Parameters
dev: The sx127x device descriptor syncword: The synchronization word
-
uint32_t
sx127x_get_channel
(const sx127x_t * dev)¶ Gets the channel RF frequency.
Parameters
dev: The sx127x device descriptor Return values
- The channel frequency
-
void
sx127x_set_channel
(sx127x_t * dev, uint32_t freq)¶ Sets the channel RF frequency.
Parameters
dev: The sx127x device descriptor freq: Channel RF frequency
-
uint32_t
sx127x_get_time_on_air
(const sx127x_t * dev, uint8_t pkt_len)¶ Computes the packet time on air in milliseconds.
Parameters
dev: The sx127x device descriptor pkt_len: The received packet payload length Return values
- computed air time (ms) for the given packet payload length
-
void
sx127x_set_sleep
(sx127x_t * dev)¶ Sets the radio in sleep mode.
Parameters
dev: The sx127x device descriptor
-
void
sx127x_set_standby
(sx127x_t * dev)¶ Sets the radio in stand-by mode.
Parameters
dev: The sx127x device descriptor
-
void
sx127x_set_rx
(sx127x_t * dev)¶ Sets the radio in reception mode.
Parameters
dev: The sx127x device descriptor
-
void
sx127x_set_tx
(sx127x_t * dev)¶ Sets the radio in transmission mode.
Parameters
dev: The sx127x device descriptor
-
uint8_t
sx127x_get_max_payload_len
(const sx127x_t * dev)¶ Gets the maximum payload length.
Parameters
dev: The sx127x device descriptor Return values
- The maximum payload length
-
void
sx127x_set_max_payload_len
(const sx127x_t * dev, uint8_t maxlen)¶ Sets the maximum payload length.
Parameters
dev: The sx127x device descriptor maxlen: Maximum payload length in bytes
-
uint8_t
sx127x_get_op_mode
(const sx127x_t * dev)¶ Gets the SX127X operating mode.
Parameters
dev: The sx127x device descriptor Return values
- The actual operating mode
-
void
sx127x_set_op_mode
(const sx127x_t * dev, uint8_t op_mode)¶ Sets the SX127X operating mode.
Parameters
dev: The sx127x device descriptor op_mode: The new operating mode
-
uint8_t
sx127x_get_bandwidth
(const sx127x_t * dev)¶ Gets the SX127X bandwidth.
Parameters
dev: The sx127x device descriptor Return values
- the bandwidth
-
void
sx127x_set_bandwidth
(sx127x_t * dev, uint8_t bandwidth)¶ Sets the SX127X bandwidth.
Parameters
dev: The sx127x device descriptor bandwidth: The new bandwidth
-
uint8_t
sx127x_get_spreading_factor
(const sx127x_t * dev)¶ Gets the SX127X LoRa spreading factor.
Parameters
dev: The sx127x device descriptor Return values
- the spreading factor
-
void
sx127x_set_spreading_factor
(sx127x_t * dev, uint8_t sf)¶ Sets the SX127X LoRa spreading factor.
Parameters
dev: The sx127x device descriptor sf: The spreading factor
-
uint8_t
sx127x_get_coding_rate
(const sx127x_t * dev)¶ Gets the SX127X LoRa coding rate.
Parameters
dev: The sx127x device descriptor Return values
- the current LoRa coding rate
-
void
sx127x_set_coding_rate
(sx127x_t * dev, uint8_t coderate)¶ Sets the SX127X LoRa coding rate.
Parameters
dev: The sx127x device descriptor coderate: The LoRa coding rate
-
bool
sx127x_get_rx_single
(const sx127x_t * dev)¶ Checks if the SX127X LoRa RX single mode is enabled/disabled.
Parameters
dev: The sx127x device descriptor Return values
- the LoRa single mode
-
void
sx127x_set_rx_single
(sx127x_t * dev, bool single)¶ Enable/disable the SX127X LoRa RX single mode.
Parameters
dev: The sx127x device descriptor single: The LoRa RX single mode
-
bool
sx127x_get_crc
(const sx127x_t * dev)¶ Checks if the SX127X CRC verification mode is enabled.
Parameters
dev: The sx127x device descriptor Return values
- the LoRa single mode
-
void
sx127x_set_crc
(sx127x_t * dev, bool crc)¶ Enable/Disable the SX127X CRC verification mode.
Parameters
dev: The sx127x device descriptor crc: The CRC check mode
-
uint8_t
sx127x_get_hop_period
(const sx127x_t * dev)¶ Gets the SX127X frequency hopping period.
Parameters
dev: The sx127x device descriptor Return values
- the frequency hopping period
-
void
sx127x_set_hop_period
(sx127x_t * dev, uint8_t hop_period)¶ Sets the SX127X frequency hopping period.
Parameters
dev: The sx127x device descriptor hop_period: The frequency hopping period
-
bool
sx127x_get_fixed_header_len_mode
(const sx127x_t * dev)¶ Gets the SX127X LoRa fixed header length mode.
Parameters
dev: The sx127x device descriptor Return values
- the LoRa implicit mode
-
void
sx127x_set_fixed_header_len_mode
(sx127x_t * dev, bool mode)¶ Sets the SX127X to fixed header length mode (explicit mode)
Parameters
dev: The sx127x device descriptor mode: The header mode
-
uint8_t
sx127x_get_payload_length
(const sx127x_t * dev)¶ Gets the SX127X payload length.
Parameters
dev: The sx127x device descriptor Return values
- the payload length
-
void
sx127x_set_payload_length
(sx127x_t * dev, uint8_t len)¶ Sets the SX127X payload length.
Parameters
dev: The sx127x device descriptor len: The payload len
-
uint8_t
sx127x_get_tx_power
(const sx127x_t * dev)¶ Gets the SX127X TX radio power.
Parameters
dev: The sx127x device descriptor Return values
- the radio power
-
void
sx127x_set_tx_power
(sx127x_t * dev, int8_t power)¶ Sets the SX127X transmission power.
Parameters
dev: The sx127x device descriptor power: The TX power
-
uint16_t
sx127x_get_preamble_length
(const sx127x_t * dev)¶ Gets the SX127X preamble length.
Parameters
dev: The sx127x device descriptor Return values
- the preamble length
-
void
sx127x_set_preamble_length
(sx127x_t * dev, uint16_t preamble)¶ Sets the SX127X LoRa preamble length.
Parameters
dev: The sx127x device descriptor preamble: The LoRa preamble length
-
void
sx127x_set_symbol_timeout
(sx127x_t * dev, uint16_t timeout)¶ Sets the SX127X LoRa symbol timeout.
Parameters
dev: The sx127x device descriptor timeout: The LoRa symbol timeout
-
void
sx127x_set_rx_timeout
(sx127x_t * dev, uint32_t timeout)¶ Sets the SX127X RX timeout.
Parameters
dev: The sx127x device descriptor timeout: The RX timeout
-
void
sx127x_set_tx_timeout
(sx127x_t * dev, uint32_t timeout)¶ Sets the SX127X TX timeout.
Parameters
dev: The sx127x device descriptor timeout: The TX timeout
-
bool
sx127x_get_iq_invert
(const sx127x_t * dev)¶ Checks if the SX127X LoRa inverted IQ mode is enabled/disabled.
Parameters
dev: The sx127x device descriptor Return values
- the LoRa IQ inverted mode
-
void
sx127x_set_iq_invert
(sx127x_t * dev, bool iq_invert)¶ Enable/disable the SX127X LoRa IQ inverted mode.
Parameters
dev: The sx127x device descriptor iq_invert: The LoRa IQ inverted mode
-
void
sx127x_set_freq_hop
(sx127x_t * dev, bool freq_hop_on)¶ Sets the SX127X LoRa frequency hopping mode.
Parameters
dev: The sx127x device descriptor freq_hop_on: The LoRa frequency hopping mode
-
struct
sx127x_lora_settings_t
¶ LoRa configuration structure.
-
uint16_t
preamble_len
¶ Length of preamble header.
-
int8_t
power
¶ Signal power.
-
uint8_t
bandwidth
¶ Signal bandwidth.
-
uint8_t
datarate
¶ Spreading factor rate, e.g datarate.
-
uint8_t
coderate
¶ Error coding rate.
-
uint8_t
freq_hop_period
¶ Frequency hop period.
-
uint8_t
flags
¶ Boolean flags.
-
uint32_t
rx_timeout
¶ RX timeout in microseconds.
-
uint32_t
tx_timeout
¶ TX timeout in microseconds.
-
uint16_t
-
struct
sx127x_radio_settings_t
¶ Radio settings.
-
uint32_t
channel
¶ Radio channel.
-
uint8_t
state
¶ Radio state.
-
uint8_t
modem
¶ Driver model (FSK or LoRa)
-
sx127x_lora_settings_t
lora
¶ LoRa settings.
-
uint32_t
-
struct
sx127x_internal_t
¶ SX127X internal data.
-
xtimer.h::xtimer_t
tx_timeout_timer
¶ TX operation timeout timer.
-
xtimer.h::xtimer_t
rx_timeout_timer
¶ RX operation timeout timer.
-
uint32_t
last_channel
¶ Last channel in frequency hopping sequence.
-
bool
is_last_cad_success
¶ Sign of success of last CAD operation (activity detected)
-
-
struct
sx127x_params_t
¶ SX127X hardware and global parameters.
-
spi.h::spi_t
spi
¶ SPI device.
-
gpio.h::gpio_t
nss_pin
¶ SPI NSS pin.
-
gpio.h::gpio_t
reset_pin
¶ Reset pin.
-
gpio.h::gpio_t
dio0_pin
¶ Interrupt line DIO0 (Tx done)
-
gpio.h::gpio_t
dio1_pin
¶ Interrupt line DIO1 (Rx timeout)
-
gpio.h::gpio_t
dio2_pin
¶ Interrupt line DIO2 (FHSS channel change)
-
gpio.h::gpio_t
dio3_pin
¶ Interrupt line DIO3 (CAD done)
-
gpio.h::gpio_t
dio4_pin
¶ Interrupt line DIO4 (not used)
-
gpio.h::gpio_t
dio5_pin
¶ Interrupt line DIO5 (not used)
-
uint8_t
paselect
¶ Power amplifier mode (RFO or PABOOST)
-
-
struct
sx127x_t
¶ SX127X device descriptor.
-
netdev.h::netdev_t
netdev
¶ Netdev parent struct.
-
sx127x_radio_settings_t
settings
¶ Radio settings.
-
sx127x_params_t
params
¶ Device driver parameters.
-
sx127x.h::sx127x_flags_t
irq
¶ Device IRQ flags.
-