mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-09-26 12:46:39 +00:00
SX1262 LDO Support
- Added build flag "SX126X_USE_REGULATOR_LDO" (set to 1 to enable) to use LDO for the SX1262 radio instead of DC-DC when the DCDC pin isn't wired up (e.g. t-echo lite) - Added additional debug mode diagnostic messages during SX1262 init to better highlight faults
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <RadioLib.h>
|
#include <RadioLib.h>
|
||||||
|
#include "MeshCore.h"
|
||||||
|
|
||||||
#define SX126X_IRQ_HEADER_VALID 0b0000010000 // 4 4 valid LoRa header received
|
#define SX126X_IRQ_HEADER_VALID 0b0000010000 // 4 4 valid LoRa header received
|
||||||
#define SX126X_IRQ_PREAMBLE_DETECTED 0x04
|
#define SX126X_IRQ_PREAMBLE_DETECTED 0x04
|
||||||
@@ -27,6 +28,14 @@ class CustomSX1262 : public SX1262 {
|
|||||||
uint8_t cr = 5;
|
uint8_t cr = 5;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SX126X_USE_REGULATOR_LDO
|
||||||
|
constexpr bool useRegulatorLDO = SX126X_USE_REGULATOR_LDO;
|
||||||
|
#else
|
||||||
|
constexpr bool useRegulatorLDO = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
MESH_DEBUG_PRINTLN("SX1262 regulator requested: %s", useRegulatorLDO ? "LDO" : "DC-DC");
|
||||||
|
|
||||||
#if defined(P_LORA_SCLK)
|
#if defined(P_LORA_SCLK)
|
||||||
#ifdef NRF52_PLATFORM
|
#ifdef NRF52_PLATFORM
|
||||||
if (spi) { spi->setPins(P_LORA_MISO, P_LORA_SCLK, P_LORA_MOSI); spi->begin(); }
|
if (spi) { spi->setPins(P_LORA_MISO, P_LORA_SCLK, P_LORA_MOSI); spi->begin(); }
|
||||||
@@ -42,11 +51,12 @@ class CustomSX1262 : public SX1262 {
|
|||||||
if (spi) spi->begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI);
|
if (spi) spi->begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
int status = begin(LORA_FREQ, LORA_BW, LORA_SF, cr, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 16, tcxo);
|
int status = begin(LORA_FREQ, LORA_BW, LORA_SF, cr, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 16, tcxo, useRegulatorLDO);
|
||||||
// if radio init fails with -707/-706, try again with tcxo voltage set to 0.0f
|
// if radio init fails with -707/-706, try again with tcxo voltage set to 0.0f
|
||||||
if (status == RADIOLIB_ERR_SPI_CMD_FAILED || status == RADIOLIB_ERR_SPI_CMD_INVALID) {
|
if (status == RADIOLIB_ERR_SPI_CMD_FAILED || status == RADIOLIB_ERR_SPI_CMD_INVALID) {
|
||||||
|
MESH_DEBUG_PRINTLN("SX1262 init failed with error %d, retrying with TCXO at 0.0V", status);
|
||||||
tcxo = 0.0f;
|
tcxo = 0.0f;
|
||||||
status = begin(LORA_FREQ, LORA_BW, LORA_SF, cr, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 16, tcxo);
|
status = begin(LORA_FREQ, LORA_BW, LORA_SF, cr, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 16, tcxo, useRegulatorLDO);
|
||||||
}
|
}
|
||||||
if (status != RADIOLIB_ERR_NONE) {
|
if (status != RADIOLIB_ERR_NONE) {
|
||||||
Serial.print("ERROR: radio init failed: ");
|
Serial.print("ERROR: radio init failed: ");
|
||||||
@@ -83,6 +93,8 @@ class CustomSX1262 : public SX1262 {
|
|||||||
writeRegister(0x8B5, &r_data, 1);
|
writeRegister(0x8B5, &r_data, 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
MESH_DEBUG_PRINTLN("SX1262 status=0x%02X device_errors=0x%04X", getStatus(), getDeviceErrors());
|
||||||
|
|
||||||
return true; // success
|
return true; // success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user