fix: harden T-Beam 1W radio setup

This commit is contained in:
Jared Dohrman
2026-05-24 17:32:53 +10:00
parent 41848e75e4
commit 7d561d7459
2 changed files with 20 additions and 3 deletions
+12 -2
View File
@@ -17,13 +17,21 @@ constexpr uint32_t kMaxFanPostTxHoldMs = 600000;
void TBeam1WBoard::begin() { void TBeam1WBoard::begin() {
ESP32Board::begin(); ESP32Board::begin();
// Keep both shared-SPI devices deselected before either SD or LoRa is touched.
pinMode(SDCARD_CS, OUTPUT);
digitalWrite(SDCARD_CS, HIGH);
pinMode(P_LORA_NSS, OUTPUT);
digitalWrite(P_LORA_NSS, HIGH);
// Power on radio module (must be done before radio init) // Power on radio module (must be done before radio init)
pinMode(SX126X_POWER_EN, OUTPUT); pinMode(SX126X_POWER_EN, OUTPUT);
digitalWrite(SX126X_POWER_EN, HIGH); digitalWrite(SX126X_POWER_EN, HIGH);
radio_powered = true; radio_powered = true;
delay(10); // Allow radio to power up delay(10); // Allow radio to power up
// RF switch RXEN pin handled by RadioLib via setRfSwitchPins() // RF switch RXEN pin is normally handled by RadioLib; start in RX-safe state.
pinMode(SX126X_RXEN, OUTPUT);
digitalWrite(SX126X_RXEN, HIGH);
// Initialize LED // Initialize LED
pinMode(LED_PIN, OUTPUT); pinMode(LED_PIN, OUTPUT);
@@ -37,7 +45,8 @@ void TBeam1WBoard::begin() {
} }
void TBeam1WBoard::onBeforeTransmit() { void TBeam1WBoard::onBeforeTransmit() {
// RF switching handled by RadioLib via SX126X_DIO2_AS_RF_SWITCH and setRfSwitchPins() // Switch the external LNA off before TX; DIO2 still controls the PA path.
digitalWrite(SX126X_RXEN, LOW);
digitalWrite(LED_PIN, HIGH); // TX LED on digitalWrite(LED_PIN, HIGH); // TX LED on
if (fan_mode == FanMode::Auto) { if (fan_mode == FanMode::Auto) {
fan_force_on_until = millis() + fan_post_tx_hold_ms; fan_force_on_until = millis() + fan_post_tx_hold_ms;
@@ -46,6 +55,7 @@ void TBeam1WBoard::onBeforeTransmit() {
} }
void TBeam1WBoard::onAfterTransmit() { void TBeam1WBoard::onAfterTransmit() {
digitalWrite(SX126X_RXEN, HIGH);
digitalWrite(LED_PIN, LOW); // TX LED off digitalWrite(LED_PIN, LOW); // TX LED off
if (fan_mode == FanMode::Auto) { if (fan_mode == FanMode::Auto) {
fan_force_on_until = millis() + fan_post_tx_hold_ms; fan_force_on_until = millis() + fan_post_tx_hold_ms;
+8 -1
View File
@@ -33,7 +33,13 @@ bool radio_init() {
fallback_clock.begin(); fallback_clock.begin();
rtc_clock.begin(Wire); rtc_clock.begin(Wire);
// Initialize SPI for radio // Radio and SD share SPI. Keep SD deselected before binding the bus to LoRa.
pinMode(SDCARD_CS, OUTPUT);
digitalWrite(SDCARD_CS, HIGH);
pinMode(P_LORA_NSS, OUTPUT);
digitalWrite(P_LORA_NSS, HIGH);
// Initialize SPI for radio.
spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI); spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI);
// GPS serial initialized by EnvironmentSensorManager::begin() // GPS serial initialized by EnvironmentSensorManager::begin()
@@ -43,6 +49,7 @@ bool radio_init() {
// T-Beam 1W has external PA requiring longer ramp time (>800us recommended) // T-Beam 1W has external PA requiring longer ramp time (>800us recommended)
// RADIOLIB_SX126X_PA_RAMP_800U = 0x05 // RADIOLIB_SX126X_PA_RAMP_800U = 0x05
radio.setTxParams(LORA_TX_POWER, RADIOLIB_SX126X_PA_RAMP_800U); radio.setTxParams(LORA_TX_POWER, RADIOLIB_SX126X_PA_RAMP_800U);
digitalWrite(SX126X_RXEN, HIGH);
} }
return success; return success;
} }