diff --git a/variants/lilygo_tbeam_1w/TBeam1WBoard.cpp b/variants/lilygo_tbeam_1w/TBeam1WBoard.cpp index 28c6c241..3f171335 100644 --- a/variants/lilygo_tbeam_1w/TBeam1WBoard.cpp +++ b/variants/lilygo_tbeam_1w/TBeam1WBoard.cpp @@ -17,13 +17,21 @@ constexpr uint32_t kMaxFanPostTxHoldMs = 600000; void TBeam1WBoard::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) pinMode(SX126X_POWER_EN, OUTPUT); digitalWrite(SX126X_POWER_EN, HIGH); radio_powered = true; 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 pinMode(LED_PIN, OUTPUT); @@ -37,7 +45,8 @@ void TBeam1WBoard::begin() { } 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 if (fan_mode == FanMode::Auto) { fan_force_on_until = millis() + fan_post_tx_hold_ms; @@ -46,6 +55,7 @@ void TBeam1WBoard::onBeforeTransmit() { } void TBeam1WBoard::onAfterTransmit() { + digitalWrite(SX126X_RXEN, HIGH); digitalWrite(LED_PIN, LOW); // TX LED off if (fan_mode == FanMode::Auto) { fan_force_on_until = millis() + fan_post_tx_hold_ms; diff --git a/variants/lilygo_tbeam_1w/target.cpp b/variants/lilygo_tbeam_1w/target.cpp index 6ec6fba7..a638c87b 100644 --- a/variants/lilygo_tbeam_1w/target.cpp +++ b/variants/lilygo_tbeam_1w/target.cpp @@ -33,7 +33,13 @@ bool radio_init() { fallback_clock.begin(); 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); // 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) // RADIOLIB_SX126X_PA_RAMP_800U = 0x05 radio.setTxParams(LORA_TX_POWER, RADIOLIB_SX126X_PA_RAMP_800U); + digitalWrite(SX126X_RXEN, HIGH); } return success; }