@@ -35,7 +35,8 @@ SPDX-License-Identifier: BSD-3-Clause
35
35
#include " sx1276Regs-LoRa.h"
36
36
37
37
#include < math.h> // rint
38
-
38
+ #include < chrono>
39
+ using namespace std ::chrono_literals;
39
40
using namespace rtos ;
40
41
using namespace mbed ;
41
42
@@ -210,6 +211,8 @@ SX1276_LoRaRadio::SX1276_LoRaRadio(PinName spi_mosi,
210
211
211
212
if (tcxo != NC) {
212
213
_tcxo = 1 ;
214
+ // TCXO startup time
215
+ ThisThread::sleep_for (5ms);
213
216
}
214
217
215
218
#ifdef MBED_CONF_RTOS_PRESENT
@@ -288,9 +291,9 @@ void SX1276_LoRaRadio::radio_reset()
288
291
{
289
292
_reset_ctl.output ();
290
293
_reset_ctl = 0 ;
291
- ThisThread::sleep_for (2 );
294
+ ThisThread::sleep_for (2ms );
292
295
_reset_ctl.input ();
293
- ThisThread::sleep_for (6 );
296
+ ThisThread::sleep_for (6ms );
294
297
}
295
298
296
299
/* *
@@ -357,7 +360,7 @@ uint32_t SX1276_LoRaRadio::random(void)
357
360
set_operation_mode (RF_OPMODE_RECEIVER);
358
361
359
362
for (i = 0 ; i < 32 ; i++) {
360
- ThisThread::sleep_for (1 );
363
+ ThisThread::sleep_for (1ms );
361
364
// Unfiltered RSSI value reading. Only takes the LSB value
362
365
rnd |= ((uint32_t ) read_register (REG_LR_RSSIWIDEBAND) & 0x01 ) << i;
363
366
}
@@ -805,7 +808,7 @@ void SX1276_LoRaRadio::send(uint8_t *buffer, uint8_t size)
805
808
// FIFO operations can not take place in Sleep mode
806
809
if ((read_register (REG_OPMODE) & ~RF_OPMODE_MASK) == RF_OPMODE_SLEEP) {
807
810
standby ();
808
- ThisThread::sleep_for (1 );
811
+ ThisThread::sleep_for (1ms );
809
812
}
810
813
// write_to_register payload buffer
811
814
write_fifo (buffer, size);
@@ -1025,7 +1028,7 @@ bool SX1276_LoRaRadio::perform_carrier_sense(radio_modems_t modem,
1025
1028
set_operation_mode (RF_OPMODE_RECEIVER);
1026
1029
1027
1030
// hold on a bit, radio turn-around time
1028
- ThisThread::sleep_for (1 );
1031
+ ThisThread::sleep_for (1ms );
1029
1032
1030
1033
Timer elapsed_time;
1031
1034
elapsed_time.start ();
@@ -1263,13 +1266,27 @@ void SX1276_LoRaRadio::read_fifo(uint8_t *buffer, uint8_t size)
1263
1266
void SX1276_LoRaRadio::set_operation_mode (uint8_t mode)
1264
1267
{
1265
1268
if (mode == RF_OPMODE_SLEEP) {
1269
+ write_to_register (REG_OPMODE, (read_register (REG_OPMODE) & RF_OPMODE_MASK) | mode);
1266
1270
set_low_power_mode ();
1271
+ /* FIXME taken from set_modem, it reduces the power consumption
1272
+ *from 300µA to 1.5µA */
1273
+ write_to_register (REG_DIOMAPPING1, 0x00 ); // sets DIO0-DI03 in default mode
1274
+ write_to_register (REG_DIOMAPPING2, 0x30 ); // bits 4-5 are turned on i.e.,
1275
+ if (_rf_ctrls.tcxo != NC) {
1276
+ ThisThread::sleep_for (1ms);
1277
+ _tcxo = 0 ;
1278
+ }
1267
1279
} else {
1280
+ if (_rf_ctrls.tcxo != NC) {
1281
+ _tcxo = 1 ;
1282
+ // TCXO startup time
1283
+ ThisThread::sleep_for (60ms);
1284
+ }
1268
1285
set_low_power_mode ();
1286
+ write_to_register (REG_OPMODE, (read_register (REG_OPMODE) & RF_OPMODE_MASK) | mode);
1269
1287
set_antenna_switch (mode);
1270
1288
}
1271
1289
1272
- write_to_register (REG_OPMODE, (read_register (REG_OPMODE) & RF_OPMODE_MASK) | mode);
1273
1290
}
1274
1291
1275
1292
/* *
@@ -1327,14 +1344,14 @@ void SX1276_LoRaRadio::set_sx1276_variant_type()
1327
1344
{
1328
1345
if (_rf_ctrls.ant_switch != NC) {
1329
1346
_ant_switch.input ();
1330
- ThisThread::sleep_for (1 );
1347
+ ThisThread::sleep_for (1ms );
1331
1348
if (_ant_switch == 1 ) {
1332
1349
radio_variant = SX1276MB1LAS;
1333
1350
} else {
1334
1351
radio_variant = SX1276MB1MAS;
1335
1352
}
1336
1353
_ant_switch.output ();
1337
- ThisThread::sleep_for (1 );
1354
+ ThisThread::sleep_for (1ms );
1338
1355
} else {
1339
1356
radio_variant = MBED_CONF_SX1276_LORA_DRIVER_RADIO_VARIANT;
1340
1357
}
@@ -2274,4 +2291,4 @@ void SX1276_LoRaRadio::handle_timeout_irq()
2274
2291
2275
2292
#endif // DEVICE_SPI
2276
2293
2277
- // EOF
2294
+ // EOF
0 commit comments