RadioLib Universal wireless communication library for Arduino

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_5 0b00001000 // 5 3 error coding rate: 4/5
35 #define RADIOLIB_SX1272_CR_4_6 0b00010000 // 5 3 4/6
36 #define RADIOLIB_SX1272_CR_4_7 0b00011000 // 5 3 4/7
37 #define RADIOLIB_SX1272_CR_4_8 0b00100000 // 5 3 4/8
38 #define RADIOLIB_SX1272_HEADER_EXPL_MODE 0b00000000 // 2 2 explicit header mode
39 #define RADIOLIB_SX1272_HEADER_IMPL_MODE 0b00000100 // 2 2 implicit header mode
40 #define RADIOLIB_SX1272_RX_CRC_MODE_OFF 0b00000000 // 1 1 CRC disabled
41 #define RADIOLIB_SX1272_RX_CRC_MODE_ON 0b00000010 // 1 1 CRC enabled
42 #define RADIOLIB_SX1272_LOW_DATA_RATE_OPT_OFF 0b00000000 // 0 0 low data rate optimization disabled
43 #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
44
45 // RADIOLIB_SX127X_REG_MODEM_CONFIG_2
46 #define RADIOLIB_SX1272_AGC_AUTO_OFF 0b00000000 // 2 2 LNA gain set by REG_LNA
47 #define RADIOLIB_SX1272_AGC_AUTO_ON 0b00000100 // 2 2 LNA gain set by internal AGC loop
48
49 // RADIOLIB_SX127X_REG_VERSION
50 #define RADIOLIB_SX1272_CHIP_VERSION 0x22
51
52 // SX1272 FSK modem settings
53 // RADIOLIB_SX127X_REG_OP_MODE
54 #define RADIOLIB_SX1272_NO_SHAPING 0b00000000 // 4 3 data shaping: no shaping (default)
55 #define RADIOLIB_SX1272_FSK_GAUSSIAN_1_0 0b00001000 // 4 3 FSK modulation Gaussian filter, BT = 1.0
56 #define RADIOLIB_SX1272_FSK_GAUSSIAN_0_5 0b00010000 // 4 3 FSK modulation Gaussian filter, BT = 0.5
57 #define RADIOLIB_SX1272_FSK_GAUSSIAN_0_3 0b00011000 // 4 3 FSK modulation Gaussian filter, BT = 0.3
58 #define RADIOLIB_SX1272_OOK_FILTER_BR 0b00001000 // 4 3 OOK modulation filter, f_cutoff = BR
59 #define RADIOLIB_SX1272_OOK_FILTER_2BR 0b00010000 // 4 3 OOK modulation filter, f_cutoff = 2*BR
60
61 // RADIOLIB_SX127X_REG_PA_RAMP
62 #define RADIOLIB_SX1272_LOW_PN_TX_PLL_OFF 0b00010000 // 4 4 use standard PLL in transmit mode (default)
63 #define RADIOLIB_SX1272_LOW_PN_TX_PLL_ON 0b00000000 // 4 4 use lower phase noise PLL in transmit mode
64
65 // RADIOLIB_SX127X_REG_SYNC_CONFIG
66 #define RADIOLIB_SX1272_FIFO_FILL_CONDITION_SYNC_ADDRESS 0b00000000 // 3 3 FIFO will be filled when sync address interrupt occurs (default)
67 #define RADIOLIB_SX1272_FIFO_FILL_CONDITION_ALWAYS 0b00001000 // 3 3 FIFO will be filled as long as this bit is set
68
69 // RADIOLIB_SX1272_REG_AGC_REF
70 #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]
71
72 // RADIOLIB_SX1272_REG_AGC_THRESH_1
73 #define RADIOLIB_SX1272_AGC_STEP_1 0x0E // 4 0 1st AGC threshold
74
75 // RADIOLIB_SX1272_REG_AGC_THRESH_2
76 #define RADIOLIB_SX1272_AGC_STEP_2 0x50 // 7 4 2nd AGC threshold
77 #define RADIOLIB_SX1272_AGC_STEP_3 0x0B // 4 0 3rd AGC threshold
78
79 // RADIOLIB_SX1272_REG_AGC_THRESH_3
80 #define RADIOLIB_SX1272_AGC_STEP_4 0xD0 // 7 4 4th AGC threshold
81 #define RADIOLIB_SX1272_AGC_STEP_5 0x0B // 4 0 5th AGC threshold
82
83 // RADIOLIB_SX1272_REG_PLL_LOW_PN
84 #define RADIOLIB_SX1272_PLL_LOW_PN_BANDWIDTH_75_KHZ 0b00000000 // 7 6 low phase noise PLL bandwidth: 75 kHz
85 #define RADIOLIB_SX1272_PLL_LOW_PN_BANDWIDTH_150_KHZ 0b01000000 // 7 6 150 kHz
86 #define RADIOLIB_SX1272_PLL_LOW_PN_BANDWIDTH_225_KHZ 0b10000000 // 7 6 225 kHz
87 #define RADIOLIB_SX1272_PLL_LOW_PN_BANDWIDTH_300_KHZ 0b11000000 // 7 6 300 kHz (default)
88
94 class SX1272: public SX127x {
95 public:
96
97 // constructor
98
103 SX1272(Module* mod);
104
105 // basic methods
106
121 int16_t begin(float freq = 915.0, float bw = 125.0, uint8_t sf = 9, uint8_t cr = 7, uint8_t syncWord = RADIOLIB_SX127X_SYNC_WORD, int8_t power = 10, uint16_t preambleLength = 8, uint8_t gain = 0);
122
135 int16_t beginFSK(float freq = 915.0, float br = 4.8, float freqDev = 5.0, float rxBw = 125.0, int8_t power = 10, uint16_t preambleLength = 16, bool enableOOK = false);
136
140 void reset() override;
141
142 // configuration methods
143
149 int16_t setFrequency(float freq);
150
156 int16_t setBandwidth(float bw);
157
163 int16_t setSpreadingFactor(uint8_t sf);
164
170 int16_t setCodingRate(uint8_t cr);
171
177 int16_t setBitRate(float br) override;
178
184 int16_t setDataRate(DataRate_t dr) override;
185
191 int16_t checkDataRate(DataRate_t dr) override;
192
199 int16_t setOutputPower(int8_t power) override;
200
207 int16_t setOutputPower(int8_t power, bool useRfo);
208
215 int16_t setGain(uint8_t gain);
216
223 int16_t setDataShaping(uint8_t sh) override;
224
232 int16_t setDataShapingOOK(uint8_t sh);
233
239 float getRSSI();
240
247 float getRSSI(bool packet, bool skipReceive = false);
248
257 int16_t setCRC(bool enable, bool mode = false);
258
265 int16_t forceLDRO(bool enable);
266
272 int16_t autoLDRO();
273
279 int16_t implicitHeader(size_t len);
280
285 int16_t explicitHeader();
286
287 #if !RADIOLIB_GODMODE
288 protected:
289 #endif
290 int16_t setBandwidthRaw(uint8_t newBandwidth);
291 int16_t setSpreadingFactorRaw(uint8_t newSpreadingFactor);
292 int16_t setCodingRateRaw(uint8_t newCodingRate);
293 int16_t setHeaderType(uint8_t headerType, size_t len = 0xFF);
294
295 int16_t configFSK();
296 void errataFix(bool rx);
297
298 #if !RADIOLIB_GODMODE
299 private:
300 #endif
301 bool ldroAuto = true;
302 bool ldroEnabled = false;
303
304 };
305
306 #endif
307
308 #endif
Module
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition: Module.h:68
SX1272
Derived class for SX1272 modules. Also used as base class for SX1273. Both modules use the same basic...
Definition: SX1272.h:94
SX1272::reset
void reset() override
Reset method. Will reset the chip to the default state using RST pin.
Definition: SX1272.cpp:76
SX1272::setBandwidth
int16_t setBandwidth(float bw)
Sets LoRa link bandwidth. Allowed values are 125, 250 and 500 kHz. Only available in LoRa mode.
Definition: SX1272.cpp:96
SX1272::checkDataRate
int16_t checkDataRate(DataRate_t dr) override
Check the data rate can be configured by this module.
Definition: SX1272.cpp:255
SX1272::setDataShapingOOK
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:388
SX1272::forceLDRO
int16_t forceLDRO(bool enable)
Forces LoRa low data rate optimization. Only available in LoRa mode. After calling this method,...
Definition: SX1272.cpp:459
SX1272::implicitHeader
int16_t implicitHeader(size_t len)
Set implicit header mode for future reception/transmission. Required for spreading factor 6.
Definition: SX1272.cpp:482
SX1272::setDataRate
int16_t setDataRate(DataRate_t dr) override
Set data.
Definition: SX1272.cpp:226
SX1272::setSpreadingFactor
int16_t setSpreadingFactor(uint8_t sf)
Sets LoRa link spreading factor. Allowed values range from 6 to 12. Only available in LoRa mode.
Definition: SX1272.cpp:134
SX1272::beginFSK
int16_t beginFSK(float freq=915.0, float br=4.8, float freqDev=5.0, float rxBw=125.0, int8_t power=10, uint16_t preambleLength=16, bool enableOOK=false)
FSK modem initialization method. Must be called at least once from Arduino sketch to initialize the m...
Definition: SX1272.cpp:41
SX1272::setDataShaping
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:357
SX1272::setCodingRate
int16_t setCodingRate(uint8_t cr)
Sets LoRa link coding rate denominator. Allowed values range from 5 to 8. Only available in LoRa mode...
Definition: SX1272.cpp:188
SX1272::SX1272
SX1272(Module *mod)
Default constructor. Called from Arduino sketch when creating new LoRa instance.
Definition: SX1272.cpp:5
SX1272::setBitRate
int16_t setBitRate(float br) override
Sets FSK bit rate. Allowed values range from 0.5 to 300 kbps. Only available in FSK mode.
Definition: SX1272.cpp:222
SX1272::autoLDRO
int16_t autoLDRO()
Re-enables automatic LDRO configuration. Only available in LoRa mode. After calling this method,...
Definition: SX1272.cpp:473
SX1272::setCRC
int16_t setCRC(bool enable, bool mode=false)
Enables/disables CRC check of received packets.
Definition: SX1272.cpp:430
SX1272::setGain
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:320
SX1272::explicitHeader
int16_t explicitHeader()
Set explicit header mode for future reception/transmission.
Definition: SX1272.cpp:486
SX1272::begin
int16_t begin(float freq=915.0, float bw=125.0, uint8_t sf=9, uint8_t cr=7, uint8_t syncWord=RADIOLIB_SX127X_SYNC_WORD, int8_t power=10, uint16_t preambleLength=8, uint8_t gain=0)
LoRa modem initialization method. Must be called at least once from Arduino sketch to initialize the ...
Definition: SX1272.cpp:9
SX1272::setOutputPower
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:278
SX1272::setFrequency
int16_t setFrequency(float freq)
Sets carrier frequency. Allowed values range from 860.0 MHz to 1020.0 MHz.
Definition: SX1272.cpp:85
SX1272::getRSSI
float getRSSI()
Gets recorded signal strength indicator. Overload with packet mode enabled for PhysicalLayer compatib...
Definition: SX1272.cpp:422
SX127x
Base class for SX127x series. All derived classes for SX127x (e.g. SX1278 or SX1272) inherit from thi...
Definition: SX127x.h:583
DataRate_t
Common data rate structure.
Definition: PhysicalLayer.h:38