mirror of
https://github.com/meshtastic/firmware.git
synced 2025-02-26 22:33:24 +00:00
Potential fix for bad Rx performance on T1000-E (#4885)
* Potential fix for bad Rx performance on T1000-E * validate and refactor RF switching, eliminate godmode --------- Co-authored-by: Thomas Göttgens <tgoettgens@gmail.com>
This commit is contained in:
parent
e530ceb566
commit
12efedec42
@ -3,6 +3,15 @@
|
|||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "mesh/NodeDB.h"
|
#include "mesh/NodeDB.h"
|
||||||
|
#ifdef LR11X0_DIO_AS_RF_SWITCH
|
||||||
|
#include "rfswitch.h"
|
||||||
|
#else
|
||||||
|
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC};
|
||||||
|
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
||||||
|
{LR11x0::MODE_STBY, {}}, {LR11x0::MODE_RX, {}}, {LR11x0::MODE_TX, {}}, {LR11x0::MODE_TX_HP, {}},
|
||||||
|
{LR11x0::MODE_TX_HF, {}}, {LR11x0::MODE_GNSS, {}}, {LR11x0::MODE_WIFI, {}}, END_OF_MODE_TABLE,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ARCH_PORTDUINO
|
#ifdef ARCH_PORTDUINO
|
||||||
#include "PortduinoGlue.h"
|
#include "PortduinoGlue.h"
|
||||||
@ -52,54 +61,6 @@ template <typename T> bool LR11x0Interface<T>::init()
|
|||||||
|
|
||||||
limitPower();
|
limitPower();
|
||||||
|
|
||||||
#ifdef TRACKER_T1000_E // Tracker T1000E uses DIO5, DIO6, DIO7, DIO8 for RF switching
|
|
||||||
|
|
||||||
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_LR11X0_DIO7,
|
|
||||||
RADIOLIB_LR11X0_DIO8, RADIOLIB_NC};
|
|
||||||
|
|
||||||
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
|
||||||
// mode DIO5 DIO6 DIO7 DIO8
|
|
||||||
{LR11x0::MODE_STBY, {LOW, LOW, LOW, LOW}}, {LR11x0::MODE_RX, {HIGH, LOW, LOW, HIGH}},
|
|
||||||
{LR11x0::MODE_TX, {HIGH, HIGH, LOW, HIGH}}, {LR11x0::MODE_TX_HP, {LOW, HIGH, LOW, HIGH}},
|
|
||||||
{LR11x0::MODE_TX_HF, {LOW, LOW, LOW, LOW}}, {LR11x0::MODE_GNSS, {LOW, LOW, HIGH, LOW}},
|
|
||||||
{LR11x0::MODE_WIFI, {LOW, LOW, LOW, LOW}}, END_OF_MODE_TABLE,
|
|
||||||
};
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
// set RF switch configuration for Wio WM1110
|
|
||||||
// Wio WM1110 uses DIO5 and DIO6 for RF switching
|
|
||||||
|
|
||||||
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_NC, RADIOLIB_NC,
|
|
||||||
RADIOLIB_NC};
|
|
||||||
|
|
||||||
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
|
||||||
// mode DIO5 DIO6
|
|
||||||
{LR11x0::MODE_STBY, {LOW, LOW}}, {LR11x0::MODE_RX, {HIGH, LOW}},
|
|
||||||
{LR11x0::MODE_TX, {HIGH, HIGH}}, {LR11x0::MODE_TX_HP, {LOW, HIGH}},
|
|
||||||
{LR11x0::MODE_TX_HF, {LOW, LOW}}, {LR11x0::MODE_GNSS, {LOW, LOW}},
|
|
||||||
{LR11x0::MODE_WIFI, {LOW, LOW}}, END_OF_MODE_TABLE,
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// We need to do this before begin() call
|
|
||||||
#ifdef LR11X0_DIO_AS_RF_SWITCH
|
|
||||||
LOG_DEBUG("Setting DIO RF switch\n");
|
|
||||||
bool dioAsRfSwitch = true;
|
|
||||||
#elif defined(ARCH_PORTDUINO)
|
|
||||||
bool dioAsRfSwitch = false;
|
|
||||||
if (settingsMap[dio2_as_rf_switch]) {
|
|
||||||
LOG_DEBUG("Setting DIO RF switch\n");
|
|
||||||
dioAsRfSwitch = true;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
bool dioAsRfSwitch = false;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (dioAsRfSwitch)
|
|
||||||
lora.setRfSwitchTable(rfswitch_dio_pins, rfswitch_table);
|
|
||||||
|
|
||||||
int res = lora.begin(getFreq(), bw, sf, cr, syncWord, power, preambleLength, tcxoVoltage);
|
int res = lora.begin(getFreq(), bw, sf, cr, syncWord, power, preambleLength, tcxoVoltage);
|
||||||
// \todo Display actual typename of the adapter, not just `LR11x0`
|
// \todo Display actual typename of the adapter, not just `LR11x0`
|
||||||
LOG_INFO("LR11x0 init result %d\n", res);
|
LOG_INFO("LR11x0 init result %d\n", res);
|
||||||
@ -123,6 +84,23 @@ template <typename T> bool LR11x0Interface<T>::init()
|
|||||||
// FIXME: May want to set depending on a definition, currently all LR1110 variant files use the DC-DC regulator option
|
// FIXME: May want to set depending on a definition, currently all LR1110 variant files use the DC-DC regulator option
|
||||||
if (res == RADIOLIB_ERR_NONE)
|
if (res == RADIOLIB_ERR_NONE)
|
||||||
res = lora.setRegulatorDCDC();
|
res = lora.setRegulatorDCDC();
|
||||||
|
|
||||||
|
#ifdef LR11X0_DIO_AS_RF_SWITCH
|
||||||
|
bool dioAsRfSwitch = true;
|
||||||
|
#elif defined(ARCH_PORTDUINO)
|
||||||
|
bool dioAsRfSwitch = false;
|
||||||
|
if (settingsMap[dio2_as_rf_switch]) {
|
||||||
|
dioAsRfSwitch = true;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
bool dioAsRfSwitch = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (dioAsRfSwitch) {
|
||||||
|
lora.setRfSwitchTable(rfswitch_dio_pins, rfswitch_table);
|
||||||
|
LOG_DEBUG("Setting DIO RF switch\n", res);
|
||||||
|
}
|
||||||
|
|
||||||
if (res == RADIOLIB_ERR_NONE) {
|
if (res == RADIOLIB_ERR_NONE) {
|
||||||
if (config.lora.sx126x_rx_boosted_gain) { // the name is unfortunate but historically accurate
|
if (config.lora.sx126x_rx_boosted_gain) { // the name is unfortunate but historically accurate
|
||||||
res = lora.setRxBoostedGainMode(true);
|
res = lora.setRxBoostedGainMode(true);
|
||||||
|
@ -3,7 +3,7 @@ extends = nrf52840_base
|
|||||||
board = me25ls01-4y10td
|
board = me25ls01-4y10td
|
||||||
board_level = extra
|
board_level = extra
|
||||||
; platform = https://github.com/maxgerhardt/platform-nordicnrf52#cac6fcf943a41accd2aeb4f3659ae297a73f422e
|
; platform = https://github.com/maxgerhardt/platform-nordicnrf52#cac6fcf943a41accd2aeb4f3659ae297a73f422e
|
||||||
build_flags = ${nrf52840_base.build_flags} -Ivariants/ME25LS01-4Y10TD -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -DME25LS01_4Y10TD ;-DRADIOLIB_GODMODE
|
build_flags = ${nrf52840_base.build_flags} -Ivariants/ME25LS01-4Y10TD -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -DME25LS01_4Y10TD
|
||||||
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard"
|
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard"
|
||||||
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
||||||
board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld
|
board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld
|
||||||
|
15
variants/ME25LS01-4Y10TD/rfswitch.h
Normal file
15
variants/ME25LS01-4Y10TD/rfswitch.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "RadioLib.h"
|
||||||
|
#include "nrf.h"
|
||||||
|
|
||||||
|
// set RF switch configuration for Wio WM1110
|
||||||
|
// Wio WM1110 uses DIO5 and DIO6 for RF switching
|
||||||
|
|
||||||
|
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC};
|
||||||
|
|
||||||
|
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
||||||
|
// mode DIO5 DIO6
|
||||||
|
{LR11x0::MODE_STBY, {LOW, LOW}}, {LR11x0::MODE_RX, {HIGH, LOW}},
|
||||||
|
{LR11x0::MODE_TX, {HIGH, HIGH}}, {LR11x0::MODE_TX_HP, {LOW, HIGH}},
|
||||||
|
{LR11x0::MODE_TX_HF, {LOW, LOW}}, {LR11x0::MODE_GNSS, {LOW, LOW}},
|
||||||
|
{LR11x0::MODE_WIFI, {LOW, LOW}}, END_OF_MODE_TABLE,
|
||||||
|
};
|
@ -103,7 +103,6 @@ extern "C" {
|
|||||||
|
|
||||||
#define LR11X0_DIO3_TCXO_VOLTAGE 1.6
|
#define LR11X0_DIO3_TCXO_VOLTAGE 1.6
|
||||||
#define LR11X0_DIO_AS_RF_SWITCH
|
#define LR11X0_DIO_AS_RF_SWITCH
|
||||||
#define LR11X0_DIO_RF_SWITCH_CONFIG 0x0f, 0x0, 0x09, 0x0B, 0x0A, 0x0, 0x4, 0x0
|
|
||||||
|
|
||||||
#define HAS_GPS 0
|
#define HAS_GPS 0
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ extends = nrf52840_base
|
|||||||
board = me25ls01-4y10td
|
board = me25ls01-4y10td
|
||||||
board_level = extra
|
board_level = extra
|
||||||
; platform = https://github.com/maxgerhardt/platform-nordicnrf52#cac6fcf943a41accd2aeb4f3659ae297a73f422e
|
; platform = https://github.com/maxgerhardt/platform-nordicnrf52#cac6fcf943a41accd2aeb4f3659ae297a73f422e
|
||||||
build_flags = ${nrf52840_base.build_flags} -Ivariants/ME25LS01-4Y10TD_e-ink -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -DME25LS01_4Y10TD ;-DRADIOLIB_GODMODE
|
build_flags = ${nrf52840_base.build_flags} -Ivariants/ME25LS01-4Y10TD_e-ink -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 -DME25LS01_4Y10TD
|
||||||
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard"
|
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard"
|
||||||
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
|
||||||
-DEINK_DISPLAY_MODEL=GxEPD2_420_GDEY042T81
|
-DEINK_DISPLAY_MODEL=GxEPD2_420_GDEY042T81
|
||||||
|
15
variants/ME25LS01-4Y10TD_e-ink/rfswitch.h
Normal file
15
variants/ME25LS01-4Y10TD_e-ink/rfswitch.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "RadioLib.h"
|
||||||
|
#include "nrf.h"
|
||||||
|
|
||||||
|
// set RF switch configuration for Wio WM1110
|
||||||
|
// Wio WM1110 uses DIO5 and DIO6 for RF switching
|
||||||
|
|
||||||
|
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC};
|
||||||
|
|
||||||
|
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
||||||
|
// mode DIO5 DIO6
|
||||||
|
{LR11x0::MODE_STBY, {LOW, LOW}}, {LR11x0::MODE_RX, {HIGH, LOW}},
|
||||||
|
{LR11x0::MODE_TX, {HIGH, HIGH}}, {LR11x0::MODE_TX_HP, {LOW, HIGH}},
|
||||||
|
{LR11x0::MODE_TX_HF, {LOW, LOW}}, {LR11x0::MODE_GNSS, {LOW, LOW}},
|
||||||
|
{LR11x0::MODE_WIFI, {LOW, LOW}}, END_OF_MODE_TABLE,
|
||||||
|
};
|
@ -126,7 +126,6 @@ static const uint8_t SCK = PIN_SPI_SCK;
|
|||||||
|
|
||||||
#define LR11X0_DIO3_TCXO_VOLTAGE 1.6
|
#define LR11X0_DIO3_TCXO_VOLTAGE 1.6
|
||||||
#define LR11X0_DIO_AS_RF_SWITCH
|
#define LR11X0_DIO_AS_RF_SWITCH
|
||||||
#define LR11X0_DIO_RF_SWITCH_CONFIG 0x0f, 0x0, 0x09, 0x0B, 0x0A, 0x0, 0x4, 0x0
|
|
||||||
|
|
||||||
#define HAS_GPS 0
|
#define HAS_GPS 0
|
||||||
|
|
||||||
|
@ -25,8 +25,6 @@ extern "C" {
|
|||||||
#define NUM_ANALOG_INPUTS (6)
|
#define NUM_ANALOG_INPUTS (6)
|
||||||
#define NUM_ANALOG_OUTPUTS (0)
|
#define NUM_ANALOG_OUTPUTS (0)
|
||||||
|
|
||||||
#define RADIOLIB_GODMODE
|
|
||||||
|
|
||||||
// LEDs
|
// LEDs
|
||||||
#define PIN_LED1 (32 + 10) // LED P1.15
|
#define PIN_LED1 (32 + 10) // LED P1.15
|
||||||
#define PIN_LED2 (-1) //
|
#define PIN_LED2 (-1) //
|
||||||
|
@ -25,8 +25,6 @@ extern "C" {
|
|||||||
#define NUM_ANALOG_INPUTS (6)
|
#define NUM_ANALOG_INPUTS (6)
|
||||||
#define NUM_ANALOG_OUTPUTS (0)
|
#define NUM_ANALOG_OUTPUTS (0)
|
||||||
|
|
||||||
#define RADIOLIB_GODMODE
|
|
||||||
|
|
||||||
// LEDs
|
// LEDs
|
||||||
#define PIN_LED1 (32 + 10) // LED P1.15
|
#define PIN_LED1 (32 + 10) // LED P1.15
|
||||||
#define PIN_LED2 (-1) //
|
#define PIN_LED2 (-1) //
|
||||||
|
@ -3,4 +3,3 @@
|
|||||||
#define HAS_GPS 1
|
#define HAS_GPS 1
|
||||||
#define MAX_RX_TOPHONE settingsMap[maxtophone]
|
#define MAX_RX_TOPHONE settingsMap[maxtophone]
|
||||||
#define MAX_NUM_NODES settingsMap[maxnodes]
|
#define MAX_NUM_NODES settingsMap[maxnodes]
|
||||||
#define RADIOLIB_GODMODE 1
|
|
||||||
|
13
variants/tracker-t1000-e/rfswitch.h
Normal file
13
variants/tracker-t1000-e/rfswitch.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include "RadioLib.h"
|
||||||
|
#include "nrf.h"
|
||||||
|
|
||||||
|
static const uint32_t rfswitch_dio_pins[Module::RFSWITCH_MAX_PINS] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6,
|
||||||
|
RADIOLIB_LR11X0_DIO7, RADIOLIB_LR11X0_DIO8, RADIOLIB_NC};
|
||||||
|
|
||||||
|
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
||||||
|
// mode DIO5 DIO6 DIO7 DIO8
|
||||||
|
{LR11x0::MODE_STBY, {LOW, LOW, LOW, LOW}}, {LR11x0::MODE_RX, {HIGH, LOW, LOW, HIGH}},
|
||||||
|
{LR11x0::MODE_TX, {HIGH, HIGH, LOW, HIGH}}, {LR11x0::MODE_TX_HP, {LOW, HIGH, LOW, HIGH}},
|
||||||
|
{LR11x0::MODE_TX_HF, {LOW, LOW, LOW, LOW}}, {LR11x0::MODE_GNSS, {LOW, LOW, HIGH, LOW}},
|
||||||
|
{LR11x0::MODE_WIFI, {LOW, LOW, LOW, LOW}}, END_OF_MODE_TABLE,
|
||||||
|
};
|
15
variants/wio-sdk-wm1110/rfswitch.h
Normal file
15
variants/wio-sdk-wm1110/rfswitch.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "RadioLib.h"
|
||||||
|
#include "nrf.h"
|
||||||
|
|
||||||
|
// set RF switch configuration for Wio WM1110
|
||||||
|
// Wio WM1110 uses DIO5 and DIO6 for RF switching
|
||||||
|
|
||||||
|
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC};
|
||||||
|
|
||||||
|
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
||||||
|
// mode DIO5 DIO6
|
||||||
|
{LR11x0::MODE_STBY, {LOW, LOW}}, {LR11x0::MODE_RX, {HIGH, LOW}},
|
||||||
|
{LR11x0::MODE_TX, {HIGH, HIGH}}, {LR11x0::MODE_TX_HP, {LOW, HIGH}},
|
||||||
|
{LR11x0::MODE_TX_HF, {LOW, LOW}}, {LR11x0::MODE_GNSS, {LOW, LOW}},
|
||||||
|
{LR11x0::MODE_WIFI, {LOW, LOW}}, END_OF_MODE_TABLE,
|
||||||
|
};
|
13
variants/wio-t1000-s/rfswitch.h
Normal file
13
variants/wio-t1000-s/rfswitch.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#include "RadioLib.h"
|
||||||
|
#include "nrf.h"
|
||||||
|
|
||||||
|
static const uint32_t rfswitch_dio_pins[Module::RFSWITCH_MAX_PINS] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6,
|
||||||
|
RADIOLIB_LR11X0_DIO7, RADIOLIB_LR11X0_DIO8, RADIOLIB_NC};
|
||||||
|
|
||||||
|
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
||||||
|
// mode DIO5 DIO6 DIO7 DIO8
|
||||||
|
{LR11x0::MODE_STBY, {LOW, LOW, LOW, LOW}}, {LR11x0::MODE_RX, {HIGH, LOW, LOW, HIGH}},
|
||||||
|
{LR11x0::MODE_TX, {HIGH, HIGH, LOW, HIGH}}, {LR11x0::MODE_TX_HP, {LOW, HIGH, LOW, HIGH}},
|
||||||
|
{LR11x0::MODE_TX_HF, {LOW, LOW, LOW, LOW}}, {LR11x0::MODE_GNSS, {LOW, LOW, HIGH, LOW}},
|
||||||
|
{LR11x0::MODE_WIFI, {LOW, LOW, LOW, LOW}}, END_OF_MODE_TABLE,
|
||||||
|
};
|
@ -103,7 +103,6 @@ extern "C" {
|
|||||||
|
|
||||||
#define LR11X0_DIO3_TCXO_VOLTAGE 1.6
|
#define LR11X0_DIO3_TCXO_VOLTAGE 1.6
|
||||||
#define LR11X0_DIO_AS_RF_SWITCH
|
#define LR11X0_DIO_AS_RF_SWITCH
|
||||||
#define LR11X0_DIO_RF_SWITCH_CONFIG 0x0f, 0x0, 0x09, 0x0B, 0x0A, 0x0, 0x4, 0x0
|
|
||||||
|
|
||||||
#define HAS_GPS 1
|
#define HAS_GPS 1
|
||||||
#define GNSS_AIROHA
|
#define GNSS_AIROHA
|
||||||
|
15
variants/wio-tracker-wm1110/rfswitch.h
Normal file
15
variants/wio-tracker-wm1110/rfswitch.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "RadioLib.h"
|
||||||
|
#include "nrf.h"
|
||||||
|
|
||||||
|
// set RF switch configuration for Wio WM1110
|
||||||
|
// Wio WM1110 uses DIO5 and DIO6 for RF switching
|
||||||
|
|
||||||
|
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC};
|
||||||
|
|
||||||
|
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
||||||
|
// mode DIO5 DIO6
|
||||||
|
{LR11x0::MODE_STBY, {LOW, LOW}}, {LR11x0::MODE_RX, {HIGH, LOW}},
|
||||||
|
{LR11x0::MODE_TX, {HIGH, HIGH}}, {LR11x0::MODE_TX_HP, {LOW, HIGH}},
|
||||||
|
{LR11x0::MODE_TX_HF, {LOW, LOW}}, {LR11x0::MODE_GNSS, {LOW, LOW}},
|
||||||
|
{LR11x0::MODE_WIFI, {LOW, LOW}}, END_OF_MODE_TABLE,
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user