RadioLib
Universal wireless communication library for Arduino
Loading...
Searching...
No Matches
SX1272.h
1#if !defined(_RADIOLIB_SX1272_H)
2#define _RADIOLIB_SX1272_H
3
4#include "../../TypeDef.h"
5
6#if !RADIOLIB_EXCLUDE_SX127X
7
8#include "../../Module.h"
9#include "SX127x.h"
10
11// SX1272 specific register map
12#define RADIOLIB_SX1272_REG_AGC_REF 0x43
13#define RADIOLIB_SX1272_REG_AGC_THRESH_1 0x44
14#define RADIOLIB_SX1272_REG_AGC_THRESH_2 0x45
15#define RADIOLIB_SX1272_REG_AGC_THRESH_3 0x46
16#define RADIOLIB_SX1272_REG_PLL_HOP 0x4B
17#define RADIOLIB_SX1272_REG_TCXO 0x58
18#define RADIOLIB_SX1272_REG_PA_DAC 0x5A
19#define RADIOLIB_SX1272_REG_PLL 0x5C
20#define RADIOLIB_SX1272_REG_PLL_LOW_PN 0x5E
21#define RADIOLIB_SX1272_REG_FORMER_TEMP 0x6C
22#define RADIOLIB_SX1272_REG_BIT_RATE_FRAC 0x70
23
24// SX1272 LoRa modem settings
25// RADIOLIB_SX1272_REG_FRF_MSB + REG_FRF_MID + REG_FRF_LSB
26#define RADIOLIB_SX1272_FRF_MSB 0xE4 // 7 0 carrier frequency setting: f_RF = (F(XOSC) * FRF)/2^19
27#define RADIOLIB_SX1272_FRF_MID 0xC0 // 7 0 where F(XOSC) = 32 MHz
28#define RADIOLIB_SX1272_FRF_LSB 0x00 // 7 0 FRF = 3 byte value of FRF registers
29
30// RADIOLIB_SX127X_REG_MODEM_CONFIG_1
31#define RADIOLIB_SX1272_BW_125_00_KHZ 0b00000000 // 7 6 bandwidth: 125 kHz
32#define RADIOLIB_SX1272_BW_250_00_KHZ 0b01000000 // 7 6 250 kHz
33#define RADIOLIB_SX1272_BW_500_00_KHZ 0b10000000 // 7 6 500 kHz
34#define RADIOLIB_SX1272_CR_4_4 0b00000000 // 5 3 error coding rate: 4/4 (undocumented)
35#define RADIOLIB_SX1272_CR_4_5 0b00001000 // 5 3 4/5
36#define RADIOLIB_SX1272_CR_4_6 0b00010000 // 5 3 4/6
37#define RADIOLIB_SX1272_CR_4_7 0b00011000 // 5 3 4/7
38#define RADIOLIB_SX1272_CR_4_8 0b00100000 // 5 3 4/8
39#define RADIOLIB_SX1272_HEADER_EXPL_MODE 0b00000000 // 2 2 explicit header mode
40#define RADIOLIB_SX1272_HEADER_IMPL_MODE 0b00000100 // 2 2 implicit header mode
41#define RADIOLIB_SX1272_RX_CRC_MODE_OFF 0b00000000 // 1 1 CRC disabled
42#define RADIOLIB_SX1272_RX_CRC_MODE_ON 0b00000010 // 1 1 CRC enabled
43#define RADIOLIB_SX1272_LOW_DATA_RATE_OPT_OFF 0b00000000 // 0 0 low data rate optimization disabled
44#define RADIOLIB_SX1272_LOW_DATA_RATE_OPT_ON 0b00000001 // 0 0 low data rate optimization enabled, mandatory for SF 11 and 12 with BW 125 kHz
45
46// RADIOLIB_SX127X_REG_MODEM_CONFIG_2
47#define RADIOLIB_SX1272_AGC_AUTO_OFF 0b00000000 // 2 2 LNA gain set by REG_LNA
48#define RADIOLIB_SX1272_AGC_AUTO_ON 0b00000100 // 2 2 LNA gain set by internal AGC loop
49
50// RADIOLIB_SX127X_REG_VERSION
51#define RADIOLIB_SX1272_CHIP_VERSION 0x22
52
53// SX1272 FSK modem settings
54// RADIOLIB_SX127X_REG_OP_MODE
55#define RADIOLIB_SX1272_NO_SHAPING 0b00000000 // 4 3 data shaping: no shaping (default)
56#define RADIOLIB_SX1272_FSK_GAUSSIAN_1_0 0b00001000 // 4 3 FSK modulation Gaussian filter, BT = 1.0
57#define RADIOLIB_SX1272_FSK_GAUSSIAN_0_5 0b00010000 // 4 3 FSK modulation Gaussian filter, BT = 0.5
58#define RADIOLIB_SX1272_FSK_GAUSSIAN_0_3 0b00011000 // 4 3 FSK modulation Gaussian filter, BT = 0.3
59#define RADIOLIB_SX1272_OOK_FILTER_BR 0b00001000 // 4 3 OOK modulation filter, f_cutoff = BR
60#define RADIOLIB_SX1272_OOK_FILTER_2BR 0b00010000 // 4 3 OOK modulation filter, f_cutoff = 2*BR
61
62// RADIOLIB_SX127X_REG_PA_RAMP
63#define RADIOLIB_SX1272_LOW_PN_TX_PLL_OFF 0b00010000 // 4 4 use standard PLL in transmit mode (default)
64#define RADIOLIB_SX1272_LOW_PN_TX_PLL_ON 0b00000000 // 4 4 use lower phase noise PLL in transmit mode
65
66// RADIOLIB_SX127X_REG_SYNC_CONFIG
67#define RADIOLIB_SX1272_FIFO_FILL_CONDITION_SYNC_ADDRESS 0b00000000 // 3 3 FIFO will be filled when sync address interrupt occurs (default)
68#define RADIOLIB_SX1272_FIFO_FILL_CONDITION_ALWAYS 0b00001000 // 3 3 FIFO will be filled as long as this bit is set
69
70// RADIOLIB_SX1272_REG_AGC_REF
71#define RADIOLIB_SX1272_AGC_REFERENCE_LEVEL 0x13 // 5 0 floor reference for AGC thresholds: AgcRef = -174 + 10*log(2*RxBw) + 8 + AGC_REFERENCE_LEVEL [dBm]
72
73// RADIOLIB_SX1272_REG_AGC_THRESH_1
74#define RADIOLIB_SX1272_AGC_STEP_1 0x0E // 4 0 1st AGC threshold
75
76// RADIOLIB_SX1272_REG_AGC_THRESH_2
77#define RADIOLIB_SX1272_AGC_STEP_2 0x50 // 7 4 2nd AGC threshold
78#define RADIOLIB_SX1272_AGC_STEP_3 0x0B // 4 0 3rd AGC threshold
79
80// RADIOLIB_SX1272_REG_AGC_THRESH_3
81#define RADIOLIB_SX1272_AGC_STEP_4 0xD0 // 7 4 4th AGC threshold
82#define RADIOLIB_SX1272_AGC_STEP_5 0x0B // 4 0 5th AGC threshold
83
84// RADIOLIB_SX1272_REG_PLL_LOW_PN
85#define RADIOLIB_SX1272_PLL_LOW_PN_BANDWIDTH_75_KHZ 0b00000000 // 7 6 low phase noise PLL bandwidth: 75 kHz
86#define RADIOLIB_SX1272_PLL_LOW_PN_BANDWIDTH_150_KHZ 0b01000000 // 7 6 150 kHz
87#define RADIOLIB_SX1272_PLL_LOW_PN_BANDWIDTH_225_KHZ 0b10000000 // 7 6 225 kHz
88#define RADIOLIB_SX1272_PLL_LOW_PN_BANDWIDTH_300_KHZ 0b11000000 // 7 6 300 kHz (default)
89
95class SX1272: public SX127x {
96 public:
97
98 // constructor
99
104 SX1272(Module* mod); // cppcheck-suppress noExplicitConstructor
105
106 // basic methods
107
115 virtual int16_t begin(const ConfigLoRa_t& config);
116
124 int16_t beginFSK(const ConfigFSK_t& config);
125
129 void reset() override;
130
131 // configuration methods
132
138 int16_t setFrequency(uint32_t freq) override;
139
145 int16_t setBandwidth(uint32_t bw) override;
146
152 int16_t setSpreadingFactor(uint8_t sf) override;
153
161 int16_t setCodingRate(uint8_t cr, bool longInterleave = false) override;
162
168 int16_t setBitRate(uint32_t br) override;
169
177 int16_t checkDataRate(DataRate_t dr, ModemType_t modem = RADIOLIB_MODEM_NONE) override;
178
187 int16_t setOutputPower(int8_t power) override;
188
198 int16_t setOutputPower(int8_t power, bool forceRfo);
199
206 int16_t setGain(uint8_t gain);
207
214 int16_t setDataShaping(uint8_t sh) override;
215
223 int16_t setDataShapingOOK(uint8_t sh);
224
230 float getRSSI() override;
231
238 float getRSSI(bool packet, bool skipReceive = false);
239
250 int16_t setCRC(bool enable, bool mode = false);
251
258 int16_t forceLDRO(bool enable);
259
265 int16_t autoLDRO();
266
272 int16_t implicitHeader(size_t len);
273
278 int16_t explicitHeader();
279
286 int16_t setModem(ModemType_t modem) override;
287
288#if !RADIOLIB_GODMODE
289 protected:
290#endif
291 int16_t setBandwidthRaw(uint8_t newBandwidth);
292 int16_t setSpreadingFactorRaw(uint8_t newSpreadingFactor);
293 int16_t setCodingRateRaw(uint8_t newCodingRate);
294
295 int16_t configFSK() override;
296 void errataFix(bool rx) override;
297
298};
299
300#endif
301
302#endif
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition Module.h:74
void reset() override
Reset method. Will reset the chip to the default state using RST pin.
Definition SX1272.cpp:74
int16_t setSpreadingFactor(uint8_t sf) override
Sets LoRa link spreading factor. Allowed values range from 6 to 12. Only available in LoRa mode.
Definition SX1272.cpp:138
int16_t setModem(ModemType_t modem) override
Set modem for the radio to use. Will perform full reset and reconfigure the radio using its default p...
Definition SX1272.cpp:549
int16_t setDataShapingOOK(uint8_t sh)
Sets filter cutoff frequency that will be used for data shaping. Allowed values are 1 for frequency e...
Definition SX1272.cpp:383
int16_t forceLDRO(bool enable)
Forces LoRa low data rate optimization. Only available in LoRa mode. After calling this method,...
Definition SX1272.cpp:453
int16_t implicitHeader(size_t len)
Set implicit header mode for future reception/transmission. Required for spreading factor 6.
Definition SX1272.cpp:477
int16_t setCodingRate(uint8_t cr, bool longInterleave=false) override
Sets LoRa link coding rate denominator. Allowed values range from 4 to 8. Only available in LoRa mode...
Definition SX1272.cpp:194
float getRSSI() override
Gets received signal strength indicator. Overload with packet mode enabled for PhysicalLayer compatib...
Definition SX1272.cpp:417
int16_t checkDataRate(DataRate_t dr, ModemType_t modem=RADIOLIB_MODEM_NONE) override
Check the data rate can be configured by this module.
Definition SX1272.cpp:236
virtual int16_t begin(const ConfigLoRa_t &config)
Initialization method for LoRa modem.
Definition SX1272.cpp:11
int16_t setFrequency(uint32_t freq) override
Sets carrier frequency. Allowed values range from 860 MHz to 1020 MHz.
Definition SX1272.cpp:83
int16_t setDataShaping(uint8_t sh) override
Sets Gaussian filter bandwidth-time product that will be used for data shaping. Only available in FSK...
Definition SX1272.cpp:352
SX1272(Module *mod)
Default constructor. Called from Arduino sketch when creating new LoRa instance.
Definition SX1272.cpp:5
int16_t autoLDRO()
Re-enables automatic LDRO configuration. Only available in LoRa mode. After calling this method,...
Definition SX1272.cpp:468
int16_t setCRC(bool enable, bool mode=false)
Enables/disables CRC check of received packets.
Definition SX1272.cpp:425
int16_t setGain(uint8_t gain)
Sets gain of receiver LNA (low-noise amplifier). Can be set to any integer in range 1 to 6 where 1 is...
Definition SX1272.cpp:315
int16_t explicitHeader()
Set explicit header mode for future reception/transmission.
Definition SX1272.cpp:482
int16_t beginFSK(const ConfigFSK_t &config)
Initialization method for FSK modem.
Definition SX1272.cpp:41
int16_t setOutputPower(int8_t power) override
Sets transmission output power. Allowed values range from -1 to 14 dBm (RFO pin) or +2 to +20 dBm (PA...
Definition SX1272.cpp:264
int16_t setBandwidth(uint32_t bw) override
Sets LoRa link bandwidth. Allowed values are 125000, 250000 and 500000 Hz. Only available in LoRa mod...
Definition SX1272.cpp:94
int16_t setBitRate(uint32_t br) override
Sets FSK bit rate. Allowed values range from 500 bps to 300 kbps. Only available in FSK mode.
Definition SX1272.cpp:232
SX127x(Module *mod)
Default constructor. Called internally when creating new LoRa instance.
Definition SX127x.cpp:5
uint8_t gain
Gain of receiver LNA (low-noise amplifier). Can be set to any integer in range 1 to 6 where 1 is the ...
Definition SX127x.h:634
Definition PhysicalLayer.h:310
Definition PhysicalLayer.h:292
Common data rate structure.
Definition PhysicalLayer.h:74